1. 需求部分
1.1 基于MySQL复制同步特性,尝试使用Replication的SQL线程来回放binlog,可基于以下逻辑模拟场景
做全量xtrabackup备份模拟日常备份
执行sysbench压测4张表,20个线程,压测10分钟,模拟大量binlog
删除实例模拟数据库被误删除或硬件故障(binlog需要保留)
使用xtrabackup恢复全量备份
使用MySQL Replication SQL线程回放binlog(提示:恢复前需要将relay_log_recocery参数设置为0)
1.2 基于题目1.1,考虑是否可以做到以下场景的恢复
只恢复单个库的数据
只恢复单个表的数据
将数据恢复到指定的GTID或者position点(如恢复到误操作drop之前的GTID)
是否可以通过参数调整提升回放效率,列出提升效率的参数并实际测试用SQL线程回放binlog和直接使用mysqlbinlog回放binlog的性能对比
2.操作部分
2.1 环境准备及故障模拟
使用mysqlbinlog将binlog文件实时转储到备份目录(当前环境备份目录配置在/data/mysql/backup)
[root@10-186-61-162 ~]# mkdir -p /data/mysql/backup/binlog
[root@10-186-61-162 ~]# mysqlbinlog --raw --read-from-remote-server -h10.186.61.162 -urepl -pxxx -P3306 --result-file=/data/mysql/backup/binlog/ mysql-bin.000001 --stop-never --stop-never-slave-server-id=100 &
生成sysbench测试数据,创建4张表,每张各100W数据库并压测一分钟模拟数据变化
## 插入基础数据
[root@10-186-61-162 ~]# sysbench /usr/local/share/sysbench/oltp_read_write.lua --db-ps-mode=disable --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sysbench --mysql-password=xxx --mysql-db=sbtest --tables=4 --table-size=1000000 --report-interval=1 --time=600 --threads=20 prepare