MySQL 通过 MTS 多线程恢复增量日志备份

文若3年前技术文章717


一、前言

当发生 DDL 误删数据时,只能通过 备份 + 增量日志 来恢复,备份恢复到新实例后,将增量日志备份进行应用,此时只能单线程效率不高,我们可以使用 MySQL 5.7 推出的 MTS 多线程复制机制,进行多线程日志回放。

二、操作案例

1. 全量备份恢复

使用备份恢复一个新的实例:

[root@db2 backup]# ls
backup_20211118  mysql-bin.000001  mysql-bin.000002  mysql-bin.index

-- xtrabackup --prepare --apply-log-only --target-dir=./
-- cp -r backup_20211118 /data/mysql_80/data

2. 将需要恢复的日志 COPY 到新目录

cp mysql-bin.* /data/mysql_80/log_relay/

修改文件名和 index 中的内容:

/data/mysql_80/log_relay/mysql-relay.000001
/data/mysql_80/log_relay/mysql-relay.000002

授权:

chown -R mysql:mysql /data/mysql_80/

3.  修改参数文件启动 MySQL

relay_log = /data/mysql_80/log_relay/mysql-relay
relay_log_index = /data/mysql_80/log_relay/mysql-relay.index
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=16
relay_log_recovery=off
skip_slave_start

修改 server_id 如果不修改 MySQL 回放会认为是自己生成的,会直接跳过。也可以使用 --replicate-same-server-id 启动数据库。

4. 创建复制通道

change master to 
master_host='localhost',
master_port=3306,
MASTER_AUTO_POSITION=0,
RELAY_LOG_FILE='mysql-relay.000001',
RELAY_LOG_POS=4;

启动复制,如果想在某个事物上面停下,可以使用 slave until 语法。

start slave sql_thread;
start slave until SQL_BEFORE_GTIDS ='00024731-1111-1111-1111-111111111111:22';

5. 监控回放情况

show slave status\G

Retrieved_Gtid_Set: dcd7886c-4844-11ec-8c2f-faec3ea1f200:1-2900
Executed_Gtid_Set: dcd7886c-4844-11ec-8c2f-faec3ea1f200:1-201


相关文章

MySQL运维实战(5.3) MySQL数据乱码的一些情况

MySQL运维实战(5.3) MySQL数据乱码的一些情况

表数据乱码当数据的真实编码和相关参数(常见的包括character_set_client, character_set_result, 字段的编码,终端的编码)不一致时,会产生乱码。测试1 - 表中的...

ES运维(一)底层数据存储原理

ES运维(一)底层数据存储原理

1、ES底层数据存储原理架构图Segment工作流程:A、 新的文档在内存中组织B、 每隔一段时间,buffer将会被提交:生成一个新的segment(一个额外的新的倒序索引)并被写到磁盘,同时一个新...

CPU--平均负载

1、原理概述平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。   * ...

impala故障处理

问题复现:[cdh004:21000] > select count(*) from impala_100yi; Query: select count(*) from impala_100y...

rabbitmq-监控告警

rabbitmq-监控告警

插件安装rabbitmq_prometheus这个插件包含在RabbitMQ3.9.x版本中。与所有的插件一样,必须启用它才能使用;在node1,node2,node3 三台机器上执行如下命令:rab...

Python 类型注解和参数类型检查

1、类型注解1.1 函数定义的弊端Python 是动态语言,变量随时可以被赋值,且能赋值为不同的类型。Python 不是静态编译型语言,变量类型是在运行期决定的。动态语言很灵活,但是这种特性也是弊端。...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。