四.MYSQL日志

58 阅读5分钟

四、日志****

日志文件****选项****文件名称****作用****
通用日志****--general_loggeneral_log 
错误日志****--log_errorhost_name.err 
慢日志文件****--slow_query_log,--long_query_timeslow_log 
二进制日志****--log_bin,--expire-logs-daysmysql-bin 

[root@mysql mysql]# cat /etc/my.cnf

[mysqld]

user=mysql

basedir=/usr/local/mysql

datadir=/data/mysql/data

socket=/tmp/mysql.sock

server_id=2

port=3306

general_log=ON

log_error=/var/log/mysql/error.log

slow_query_log=1

slow_query_log_file=/var/log/mysql/slow.log

long_query_time=0.1

log_queries_not_using_indexes

log_bin=/var/log/mysql/mysql-bin

[mysql]

socket=/tmp/mysql.sock

image.png

1)通用日志****

general_log=[OFF|ON] (此变量表示开启状态,OFF表示关闭,ON表示开启,默认是OFF)

show variables like '%general%'; 查看是否开启

localhost.log 在mysql数据路径下

2)错误日志****

log_error=/var/log/mysql/error.log

chmod -R mysql.mysql /var/log/mysql给添加程序用户权限

log_error=日志存储路径(相对路径在data目录下,为了数据安全,可以将日志和数据路径分开,但是分开后要保证日志存放的路径程序用户有写入权限。)

3)慢查询日志********

检查执行时间过长,返回结果过慢的sql

影响sql语句返回结果的因素:有网络因素 系统因素 数据库sql  1.6

相关配置参数如:

1、开关slow_query_log=1

2、文件位置及名字 slow_query_log_file=/data/mysql/slow.log

3、设定慢查询时间long_query_time=0.1        设置这个参数指标的时候要考虑排除网络系统等消耗的时间,才是我们的sql执行的查询时间,例如,我们执行一个语句实际时间是2s,我的网络延迟是0.2秒,我的系统延迟是0.1s,我的sql语句的执行实际必须控制在1.7秒以内。

4、没走索引的语句也记录 log_queries_not_using_indexes

设置完慢查询语句后可以用mysqldumpslow来分析慢sql日志

mysqldumpslow -s c -t 5 slow.log(慢sql日志的名称)

-s 排序 c 统计 -t 10 排名前十

重点关注,执行频率高的语句,消耗时间长,没走索引的语句

4)二进制日志****

二进制日志主要记录的是ddl,dcl,dml语句,记录一些对数据数据库产生更改的语句,其中ddl语句和dcl语句是直接记录的,dml语句是根据事务记录的。

二进制日志的开启方式是在配置文件中增加

log-bin=路径

二进制日志的格式:binlog_format=row

二进制日志有三种格式:statement格式,sbr格式     此种模式binlog日志记录的sql语句,在此种格式下就记录这一条语句。

row格式    rbr格式      此种模式是按行记录sql语句

mixed格式 mbr格式     混合型的,让mysql自己去选择sbr还是rbr。

ddl,dcl语句都是按照sql记录。dml记录过程是按照行去记录

insert into 表名称 values (now())where id <100

这个表里有个值是date日期

rbr格式下记录的  inserte into 表名 (时间)id=1;

sbr语句记录的一个完整改变表的语句,大大节省了存储空间,看起方便,但是在数据恢复的时候容易产生错误。

rbr语句记录比较冗余,但是最大程度的按行了,每行发生的改变,数据恢复时最大程度的恢复了业务发生时的场景。

5 binlog 日志****

binlog日志主要的用途是:数据恢复和主从复制。

查看当前是否开启binlog日志的的命令show variables like "%log_bin%";

查看当前的binlog日志有哪些show binary logs;

在二进制日志当中,是靠位置信息及记录sql语句,我们通常需要查看当前所处binlog日志位置信息 :show master status;

切割二进制日志:flush logs;  

mysql-bin.index 记录binlog日志的索引文件

采用binlog日志恢复数据过程

获取要执行的binlog日志:mysqlbinlog --stop-position=782 mysql-bin.000004 >/tmp/yunjisuan.sql

恢复数据时要在恢复数据的窗口暂停记录binlog日志 set sql_log_bin=0;

恢复完毕后set sql_log_bin=1;在恢复记录binlog日志。

指定恢复某库的 mysqlbinlog --stop-position=933 --skip-gtids -d yunjisuan1 mysql-bin.000005 > /tmp/1.sql

mysqladmin 给超户设置密码

mysqldumpslow   分析慢日志

mysqlbinlog 查看二进制日志

6 )gtid是分为两个部分****

一部分叫server_uuid 这个是我们在初始化数据库的时候产生的

开启git模式和后,会在server-uuid后跟上一个tid

tid是一个自增数,用来记录是数据库发生变化的操作。

gtid有一个特性叫幂等性。这个特性的意思是一旦有了操作不会重复操作。

create database  yunjisuan1   产生一个gtid =1

通过gtid恢复数据需要将gtid=1这条调出到sql文件里,sql文件里的gtid和系统里记录的gtid一致的时候,sql文件里的gtid语句不执行。

开启gitid

vi /etc/my.cnf

gtid-mode=on

enforce-gtid-consistency=true

查看gtid show binlog events in 'mysql-bin.000006';

 

gtid 恢复数据:mysqlbinlog --skip-gtids --include-gtids='f1887910-c20c-11ed-930d-000c29f6f675:1-4' mysql-bin.000006 >/tmp/1.sql

 set sql_log_bin=0;

 

排除不执行语句用 --exclude-gtids='','' mysqlbinlog --skip-gtids --include-gtids='f1887910-c20c-11ed-930d-000c29f6f675:1-4' --exclude-gtids='f1887910-c20c-11ed-930d-000c29f6f675:4' mysql-bin.000006 >/tmp/1.sql

--skip-gtids

--include-gtids

--exclude-gtids