赞
踩
binlog 是mysql 二进制日志 binary log的简称,可以简单理解为数据的修改记录。
需要开启binlog,才会产生文件,mysql 8.0 默认开启,开启后可以在 /var/lib/mysql (这是mysql默认数据存储路径,如果用户自己指定则另说) 目录下看到一系列 binlog.xxxxxx 的文件
每次mysql重启 都会生成一个新的binlog文件,也可以使用命令来刷新binlog
1、进入mysql,使用flush logs,会看到新生成了新的binlog.000011文件
2、mysqladmin -uroot -p flush-logs(这里也需要root账号密码)
以下是官网的关于备份与恢复的翻译:
完整备份是必要的,但创建它们并不总是很方便。它们会生成大型备份文件,并且需要时间来生成。它们不是最佳的,因为每次连续的完全备份都包括所有数据,即使是自上次完全备份以来没有更改的部分。先进行初始完全备份,然后进行增量备份会更高效。增量备份更小,生成时间更短。代价是,在恢复时,不能仅通过重新加载完整备份来恢复数据。您还必须处理增量备份以恢复增量更改
官网关于备份恢复的链接
简而言之就是2种方式,完整和增量,优缺点也如上所述,下面描述2种方式的使用
完整备份就是将所有数据以表的形式进行保存
命令
mysqldump --all-databases --master-data --single-transaction > back_20220806_112100.sql
备份的同时刷新binlog文件
mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > back_20220806_112100.sql
如果报错连接错误
mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 --all-databases > back_20220806_112100.sql
执行指令
mysql < back_20220806_112100.sql
如果需要密码则
mysql -uroot -p < back_20220806_112100.sql
该指令相当于执行了备份文件中的sql语句。
可以先可以查看 备份文件,发现里面基本是以下语句:删除表,创建表,数据的插入,显然是以表为单位来备份的,恢复时也是以表来恢复的
因此可以得出结论:在利用备份文件进行数据恢复时,会恢复备份前的所有表数据,但不包括备份后新增加的表,新增的表有以下2中情况:
1、同一个数据库存在相同的表则被则会被覆盖
2、同一个数据库存在不同的表则忽略,因为备份文件中不含任何对该表的操作
前面我们已经描述过 binlog是一个数据修改记录的文件,默认一个binlog文件代表一次运行的所有数据修改记录,然后也可以使用命令强制生成一个新的binlog文件作为新的起点来记录数据修改过程,因此增量备份其实是自动的,就是一个个binlog文件
恢复的前提是要备份,完整备份和增量备份在上面已经描述清楚,因此数据恢复就是利用备份文件+binlog文件来做任意回滚
举个例子,执行备份指令
mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > back_20220806_153500.sql
生成备份文件以及新的binlog文件,从000005开始的binlog文件都是back_20220806_153500.sql备份文件的增量文件
在上面的基础上(生成了back_20220806_153500.sql 以及新的binlog.000005),现在做一个简单测试来验证数据恢复,分为几个步骤
mysql -uroot -p < back_20220806_153500.sql
备份基础上恢复修改记录
mysqlbinlog binlog.000005 | mysql -uroot -p
结果如下,与预料中的一样
现在我们开始执行步骤5,在步骤4的基础上,恢复binlog.000006
mysqlbinlog binlog.000006 | mysql -uroot -p
结果如下,与预料中的一样
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。