Mysql日志
2020-05-30 本文已影响0人
Odven
1) binlog日志
1. 开启
log_bin = /data/mysq/mysql_bin
sysnc_binlog = 1 # 每次事务提交都立即写binlog到磁盘
binlog_format = row
RBR : Row (5.7默认模式,为安全性考虑建议使用)
SBR : Statement (当主执行函数时(比如now()),从可能会导致数据不一致)
MBR : Mixed (不可控性)
2. 对binlog日志的查看和提取
show master status; # 查看当前使用的binlog日志文件和位置等
show binlog events in "二进制文件"; # 查看binlog日志文件中的事件
mysqlbinlog --start-posistion=xxx --stop-position=xxx 二进制日志文件 # 按位置提取日志
mysqlbinlog --start-datetime=xxx --stop-datetime=xxx 二进制日志文件 # 按时间提取日志
3. 通过binlog日志恢复数据
mysqlbinlog --start-posistion=xxx --stop-position=xxx 二进制日志文件 > /tmp/data.sql # 按位置提取要恢复的数据
进入数据库恢复
set sql_log_bin=0; # 当前会话不保存到binlog日志里面
source /tmp/data.sql;
set sql_log_bin=1;
4. binlog日志的清除(至少保留日志为全备份的一个周期)
自动清除
expire_logs_days = 15 # 添加到配置文件中
手动清除
purge binary logs to "mysql_bin.000010" # 这表示是删除mysql_bin.000001 ~ mysql_bin.000009的二进制日志文件
purge binary logs before "2020-05-21 22:22:22" 这表示是删除2020-05-21 22:22:22以前的二进制日志文件
5. 如果开启了gtid进行恢复
gtid_mode = ON
enforce_gtid_consistency = ON
mysqlbinlog --skip-gtids --include-gtids="server_uuid:n-m" --exclude-gtids="server_uuid:n-m" > /tmp/data.sql # 按gtid的范围提取要恢复的数据
--include-gtids : 截取server_uuid:n-m的事物
--exclude-gtids : 排除server_uuid:n-m的事物
进入数据库恢复
set sql_log_bin=0; # 当前会话不保存到binlog日志里面
source /tmp/data.sql;
set sql_log_bin=1;
6. 二进制日志的滚动
flush logs;
数据库重启
一个二进制文件的大小到达上限 # 查看大小select @@max_binlog_size;
mysqldump备份的时候使用 --flush-logs
7. 其他参数
--max-allowed-packet = 128M # 要发送或接收的最大数据包大小
--set-gtid-purged # 在构建主从时,使用auto/on,仅是做普通的本机备份恢复时,可以添加off (不管什么时候都可以不加这个参数保持默认的auto,只是可能有后报警提示,不用理会)
2) error日志
log_error = /data/mysql/error.log
可以通过错误日志判断mysql的问题
3) slow日志
slow_query_log = ON
long_query_time = 1 # 表示大于1秒的记入慢日志
slow_query_log_file = /data/mysql/slow.log
可以通过查看慢日志里面的内容进行语句的优化
mysqldumpslow -s c -t 10 /data/mysql/slow.log # 查看按访问次数排名排在前10的的语句
可以使用percona-toolkit工具https://www.percona.com/downloads/percona-toolkit/LATEST/