美文网首页
mysql主从数据恢复

mysql主从数据恢复

作者: supremecsp | 来源:发表于2021-06-23 18:02 被阅读0次

这一篇想记录下mysql的主从相关与数据恢复;

首先搭建一个mysql
yum方式:https://juejin.cn/post/6892924515253403655
包安装方式:https://blog.csdn.net/weixin_36146275/article/details/80841366
docker方式(建议):docker安装-》阿里云镜像加速-》拉取mysql并启动

有mysql之后搭建主从就比较简单了,可参考:https://www.jianshu.com/p/ab20e835a73f

image.png
SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。

一个事务日志同步的完整过程是这样的:
1,在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。
2,在备库 B 上执行 start slave 命令,这时候备库会启动两个线程,就是图中的 io_thread 和 sql_thread。其中 io_thread 负责与主库建立连接。
3,主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给 B。
4,备库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。
5,sql_thread 读取中转日志,解析出日志里的命令,并执行。

binlog数据恢复
binlog的日志格式有三种,statement,row,mixed;其中statement在主备的时候可能照成数据不一致,mixed不利于数据恢复,所以这里数据恢复采用的是row格式
首先:show variables like 'binlog_format'与show variables like 'sync_binlog';确保日志格式是row且事务结束时刷盘;

例子来源于MySQL实战45讲第24章
mysql> CREATE TABLE t (
id int(11) NOT NULL,
a int(11) DEFAULT NULL,
t_modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY a (a),
KEY t_modified(t_modified)
) ENGINE=InnoDB;
insert into t values(1,1,'2018-11-13');
insert into t values(2,2,'2018-11-12');
insert into t values(3,3,'2018-11-11');
insert into t values(4,4,'2018-11-10');
insert into t values(5,5,'2018-11-09');
mysql> delete from t /comment/ where a>=4 and t_modified<='2018-11-10' limit 1;
新增表数据且把id为4的数据删除

此时需要把id为4的数据恢复
1,登录mysql查看master节点的binlog日志名字 show master status;
2,查看binlog日志内容 show binlog events in 'edu-mysql-bin.000003';(其中delete操作是Delete_rows)


binlog

我们可以根据mysqlbinlog解析binlog日志的删除操作,可以看到删除的行数据内容;如果只是为了恢复少量语句,根据删除的数据重新insert即可
./mysqlbinlog -vv ../data/edu-mysql-bin.000003 --start-position=2344;


Delete_rows

值得注意的是,如果日志格式是statement,mixed, insert是now()时间的话;直接show binlog events后根据语句进行数据恢复时间将会于原来不一致;now()时间要正常恢复还需要mixed或者binlog格式通过mysqlbinlog进行恢复;


now.png

3,想要恢复ID为4的数据,也可以找事务的开始结束End_log_pos进行恢复
./mysqlbinlog ../data/edu-mysql-bin.000003 --start-position=1855 --stop-position=2067| ./mysql -u root -p;
如果条件允许可以扩大范围,比如从insert id=1到id=5的pos进行恢复;(会把其他ID数据覆盖)

如果是大数据量恢复,比如恢复到昨天某个时间点,一般是先全量恢复再binlog找到时间点的事务范围进行统一恢复
全量复制的话也比较简单使用mysqldump命令,对test_db库继续全量备份
./mysqldump -uroot -p123456 --databases test_db> one_databases.sql
恢复的话登录mysql执行source命令


source

参考文章:https://time.geekbang.org/column/article/76446
https://blog.csdn.net/king_kgh/article/details/74890381
https://blog.csdn.net/timchen525/article/details/77759434

相关文章

  • mysql主从数据恢复

    这一篇想记录下mysql的主从相关与数据恢复; 首先搭建一个mysqlyum方式:https://juejin.c...

  • 2017.07.23 周日【技术文章】《Mysql集群架构》

    1.主要内容 1)mysql的架构,锁,最佳实践,事务 2)mysql的命令行,主从复制,索引,数据备份/恢复...

  • Mysql主从同步实例

    mysql主从复制,不停库 1.实现思路 首先通过mysqldump将主库数据备份,然后将备份数据恢复至从库, 再...

  • mysql日志文件bin log,redo log,undo l

    mysql作为数据存储的工具,需要应对非常多的场景。例如主从复制,事务,数据恢复等都是需要的功能。 bin log...

  • Mysql 主从复制

    Mysql 主从复制 MySQL Replication 主从复制(也称 AB 复制)允许将来自一个MySQL数据...

  • 检查mysql主从重要表数据一致性

    mysql数据库主从做起来不难,但是主从数据的一致性很重要,本脚本用于粗略检查mysql数据库主从重要表的数据一致...

  • MySQL集群篇

    1 集群之主从复制 1.1 主从复制概述 MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群...

  • mysql主从复制

    构建MySQL主从复制 MySQL的主从复制和mysql的读写分离两者有着紧密联系,数据的读写分离实在主从复制的基...

  • MySQL主从复制过滤

    MySQL主从复制是逻辑复制,基于Binlog进行主从数据传输,MySQL提供了丰富的参数来配置主从复制过滤条件。...

  • docker 搭建mysql 主从

    mysql 主从复制 MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多...

网友评论

      本文标题:mysql主从数据恢复

      本文链接:https://www.haomeiwen.com/subject/oydmyltx.html