mysql 日志方面与备份、恢复

binary log 日志

查询二进制日志位置

show varsables like "%log_bin%"

刷新重新生成一个binary_log

flush logs;

查看已有的二进制日志文件

show binary logs;

可以查看目前正在使用的哪个二进制日志

show master status;

查看二进制日志模式

select @@binlog_format
MIXED 混合模式 MBR
ROW 行模式 RBR 5.7版默认 推荐用
statment 原语句模式 SBR 5.6版默认

输出事务信息

SHOW BINLOG EVENTS IN 'mysql-bin.000009';
..可以查看事务的开始at位置号,结束at位置号

查看二进制日志内容

mysqlbinlog mysql-bin.000009;
mysqlbinlog --base64-output=decode-rows -vvv mysql-binlog.000009;

找到建表起始点和删除之前为结束点的at号进行恢复(-d 库名)

mysqlbinlog -d 库名 --skip-gtids --start-position=219 --stop-position=335 mysql-binlog.000009 >/tmp/xx.sql
..起始点at219,结束点at335

恢复前临时关闭当前会话二进制日志

set sql_log_bin=0;
source /tmp/xx.sql;
set sql_log_bin=1;


gtid记录模式的管理

组成

server_uuid:tid
保存在./data/auto.cnf

GTID幂等性

如果拿有GTID的日志去恢复时,检查当前系统中是否有相同的GTID号,如果有相同的就是自动跳过
会影响到binlog恢复和主从复制

GTID开启和配置

gtid-mode=on
enforce-gtid-consistency=true

GTID恢复

mysqlbinlog --skip-gtids --include-gtids='3ca79ab5-3e4d-11e9-a709-000c293b577e:7-12' mysql-bin.000004> /tmp/bin.sql
7-12表示从7到12的gtid子号
--skip-gtids 表示导出时忽略原有的gtid信息,恢复时生产最新的gtid信息,不忽略就会跳过导入,最终失败。
set sql_log_bin=0
source /tmp/bin.sql
set sql_log_bin=1
mysqlbinlog 其他参数--exclude-gtids排除(用于排除删除操作例如drop table),多段日志编号用逗号分开


slowlog 慢日志

开关:

slow_query_log=1

文件位置及名字

slow_query_log_file=/data/mysql/slow.log

设定慢查询时间:

long_query_time=0.1

没走索引的语句也记录:

log_queries_not_using_indexes

慢日志分析

mysqldumpslow -s c -t 10 /data/mysql/slow.log
过滤出 按照语句被执行次数排序,top10


mysqldump备份

备份恢复思路

先找个临时库,采用之前时间点的全备份恢复
然后使用binlog 恢复 全备份点之后新增的数据

注意难点:全备份中--master-data可以看到备份截止at点,或者是gtid点(show binlog event in 'mysql-bin.00000*')

最后用测试库顶替,或者是导出需要的部分表,再导入到生产

mysqldump命令备份

mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction|gzip > /backup/full_$(date +%F).sql.gz
mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction|gzip > /backup/full_$(date +%F-%T).sql.gz
-R存储过程 || --triggers 触发器
--master-data=2
*(1)记录备份时刻的binlog信息
*(2)自动锁表,不加--single-transaction,就是温备份
*加了--single-transaction ,对与innodb表不锁表,一致性快照备份,(快照备份)

扩展参数

--set-gtid-purged=auto/on 保存gtid信息
--set-gtid-purged=off 里面不保存gtid,单机数据库使用没有问题,但是主从环境下必须开启on
--max_allowed_packet=128M 传输数据包较大时使用

从mysqldump 全备中获取库和表的备份

1、获得表结构
*sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE zabbix/!d;q' full.sql>createtable.sql
2、获得insert into 语句,用于数据的恢复
*grep -i 'INSERT INTO zabbix' full.sql>data.sql &
3、获取单库的备份
*sed -n '/^-- Current Database: world/,/^-- Current Database: `/p' all.sql>world.sql

posted @ 2021-01-29 16:33  乌鸦yy  阅读(114)  评论(0编辑  收藏  举报