完整的 mysqldump 备份与恢复示例

最后更新于:2022-04-02 03:56:24

[TOC] > [参考网站](https://juejin.cn/post/6844903511201677325#heading-9) ## 概述 如果是maridb 则 为 maria_bin.xxx ## 实例 ### 备份数据库 ``` > ./mysqldump -uroot -ppassword -l -F t2 > t2.dmp 参数说明: -l 参数表示给所有表加读锁 -F 表示生成一个新的日志文件 ``` 为了便于测试,执行 reset master 删除所有 binlog ``` MySQL [(none)]> reset master; Query OK, 0 rows affected (0.00 sec) # 此时只有一个 binlog 日志文件 mysql-bin.000001 MySQL [t2]> select * from test; +------+------+ | id | name | +------+------+ | 1 | a | | 2 | b | +------+------+ ``` ### 备份完毕后,插入新的数据 因为上一步执行是加入了 -F 选项, 所以接下来的操作会被记录到新的二进制文件,即名为 mysql-bin.000002 的文件 ``` MySQL [t2]> insert into test values (3,'c'); MySQL [t2]> insert into test values (4,'d'); ``` ### 模拟故障-删库 ``` // 这里为了便于测试,不把删库操作记入日志,当前 session 设置 sql_log_bin 为 off。 // 删库后,执行 flush logs,让后续的 binlog 到新的文件中,即名为 mysql-bin.000003中 MySQL [t2]> set sql_log_bin = 0; MySQL [t2]> show variables like "%sql_log_bin%"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_log_bin | OFF | +---------------+-------+ 1 row in set (0.00 sec) MySQL [t2]> drop database t2; MySQL [(none)]> flush logs; MySQL [t2]> drop database t2; ``` ### 恢复备份 ``` > ./mysql -e "create database t2" > ./mysql t2 < t2.dmp ----- MySQL [t2]> select * from test; +------+------+ | id | name | +------+------+ | 1 | a | | 2 | b | +------+------+ ``` ### 恢复 binglog - 使用 mysqlbinlog 还原 binlog日志 - 备份的时间点到删库的时间点之间的操作被记录到了 mysql-bin.000002 文件中 ``` > ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000002 | ./mysql t2 ******************************************************* MySQL [t2]> select * from test; +------+------+ | id | name | +------+------+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | +------+------+ ``` 数据恢复成功
';