日志
errlog错误日志
作用
记录Mysql从启动以来,所有的状态,警告,错误。
DBA靠此定位数据库问题。
配置
默认是开启,
vim /etc/my.cnf
log-error=/var/log/mysqld.log
binlog二进制日志
作用
主要记录数据库变化的日志。
数据恢复,主从复制中应用
#查看再用的binlogfile
show master status;
#查看binlog文件中的事件
show binlog events in 'bin.0004'
#筛选日志
mysql -e "show binlog events in 'bin.0004'" |grep xx
配置
vim /etc/my.cnf
server_id=4 #主机编号:5.7后要加此参数
log_bin=/data/mysql/mysql-bin #mysql-bin为前缀例如:mysql-bin001
sync_binlog=1 # binlog日志刷盘策略
binlog_format=row #binlog记录格式为row模式
binlog只记录变更的SQL,不记录查询语句。
1.DDL 原封不动的记录SQL
2.DCL 原封不动的记录SQL
3.DML 只记录已提交的DML
DML三种记录方式
1.statement(5.6默认) SBR(statement based replication)原封不动的记录SQL
2.ROW(5.7默认值) RBR(row based replication),记录数据行变化,用户看不懂,需要工具分析。
3.mixed(混合) MBR(mixed based replication):以上2种混合
查询日志
读取日志到a.sql,这种能够看到DDL,DCL但是DML事务的是乱码 。
mysqlbinlog binlog.000004 > /root/a.sql
需要这种方式才能看到DML的具体代码
mysqlbinlog --base64-output=decode-row -vvv binlog.000004 > /root/b.sql
一个事务,begin开始,commit结束,中间的语句是,insert into jinwei.t1 value(33)
### INSERT INTO `jinwei`.`t1`
### SET
### @1=33 /* INT meta=0 nullable=1 is_null=0 */
# at 811
#210204 13:12:25 server id 1 end_log_pos 888 CRC32 0xf6dba010 Query thread_id=13 exec_time=0 error_code=0
SET TIMESTAMP=1612415545/*!*/;
BEGIN
/*!*/;
# at 888
#210204 13:12:25 server id 1 end_log_pos 938 CRC32 0x2324d32c Table_map: `jinwei`.`t1` mapped to number 96
# at 938
#210204 13:12:25 server id 1 end_log_pos 978 CRC32 0xf54e2e4b Write_rows: table id 96 flags: STMT_END_F
### INSERT INTO `jinwei`.`t1`
### SET
### @1=33 /* INT meta=0 nullable=1 is_null=0 */
# at 978
#210204 13:12:25 server id 1 end_log_pos 1009 CRC32 0x1ac1d8f2 Xid = 82
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
日志截取
确定要截取的日志,开始到结束位置。
mysqlbinlog --start-position=233 --stop-position=702 /data/mysql/binlog.000005 > /root/e.sql
执行恢复
source /root/e.sql
日志删除
1.不能用rm
2.flush logs,服务重启也会新建一个新日志文件。
3.日志文件默认1G
4.自动清除
生产保留2个全备周期+1
select @@expire_log_days;
5.手工删除,
##删除1到5,保留6以后
PURGE BINARY LOGS TO 'binlog.00006'
##保留到这个点
PURGE BINARY LOGS BEFORE '202102-03 10:10:10'
##文件全部清空,让他从文件编号从1开始,危险,主从必宕
reset master;
binlogGTID模式管理
GTID(Global Transaction ID)
一个已提交事务的编号,并且是全局唯一 编号。
GTID=servier_uuid:transaction_id
xxxxx:30
开启GTID
my.cnf
gtid_mode=on
enforce_gtid_consistency=on
GTID截取日志
--include-gtids
--exclude-gtids
--skip-gtids
mysqlbinlog --include-gtids='xxx:1-6' --exclude-gtids='xx:4' --skip-gtids /data/mysql/binlog.0006
截取恢复
mysqlbinlog -d tt1 --include-gtids='933ceeac-6519-11eb-80db-00155da88b26:10-17' --exclude-gtids='933ceeac-6519-11eb-80db-00155da88b26:14' --skip-gtids /data/mysql/binlog.000004 /data/mysql/binlog.000003 > /root/k.sql
//关闭此回话日志,不在记录恢复执行的操作,恢复完再打开。
set @@sql_log_bin=0;
source /root/k.sql;
set @@sql_log_bin=1;
Slowlog慢日志
记录Mysql运行过程中较慢的语句,文本文件记录。
配置
默认慢日志没有开启。
查询是否开启
select @@slow_query_log;
查询日志位置。
select @@slow_query_log_file;
查询慢的阈值。
select @@long_query_time;
不走索引的
select @@log_queries_not_using_indexes;
my.cnf
slow_query_log=1
slow_query_log_file=/data/mysql/slow.log
long_query_time=0.1
log_queries_not_using_indexes=1
读取最耗时的语句
mysqldumpslow -s c -t 10 slow.log