[1].如何实现 MySQL 增量备份与恢复。
[2].学习 MySQL 备份一篇就够了。
root $ mysql -u root -p // 打开 MySQL
mysql$ create databse my_db; // 创建数据库
mysql$ use my_db; // 使用数据库
mysql$ create table my_tb(id int(4) primary key, name char(10)); // 创建表
mysql$ insert into my_tb values (1, "tom"), (2, "jerry"); // 插入数据
mysql$ select * from my_tb;
| id | name |
| 1 | tom |
| 2 | jerry |
mysql$ exit;
// 创建存放备份文件目录
root $ mkdir backup;
root $ cd backup;
// 备份所有数据库
root $ mysqldump -u root -p --all-databases > all-data-$(date +%F).sql
// 备份单个数据库
root $ mysqldump -u root -p my_db > my_db-$(date +%F).sql
// 备份单个表
root $ mysqldump -u root -p my_db my_tb > my_db-my_tb-$(date +%F).sql
// 备份单个表的结构
root $ mysqldump -u root -p -d my_db my_tb > desc-my_db-my_tb-$(date +%F).sql
// 当前备份的文件
root $ ls
// all-data-2023-05-11.sql desc-my_db-my_tb-2023-05-11.sql my_db-2023-05-11.sql my_db-my_tb-2023-05-11.sql
root $ mysql -u root -p // 打开 MySQL
mysql$ use my_db; // 选择数据库
mysql$ drop table my_tb; // 删除数据表
mysql$ show tables; // 列出所有表
// Empty set (0.00 sec)
// source 备份文件存放目录
mysql$ source ./all-data-2023-05-11.sql // 恢复
mysql$ use my_db; // 选择数据库
mysql$ show tables; // 选择数据表
mysql$ select * from my_tb; // 展示内容
// | id | name |
// | 1 | tom |
// | 2 | jerry |
// 成功恢复 !
root $ vim /etc/my.cnf // 在文件末尾处添加 log-bin=mysql-bin
root $ systemctl restart mysqld // 重启服务
root $ find / -name "mysql-bin*" // 查询日志文件所存放的位置
// 我的路径为:/var/lib/mysql/mysql-bin.000001
root $ mysql -u root -p // 打开 MySQL
mysql$ create databse my_db; // 创建数据库
mysql$ use my_db; // 使用数据库
mysql$ create table my_tb(id int(4) primary key, name char(10)); // 创建表
mysql$ insert into my_tb values (1, "tom"), (2, "jerry"); // 插入数据
mysql$ select * from my_tb;
// | id | name |
// | 1 | tom |
// | 2 | jerry |
mysql$ exit;
// 先进行完全备份
root $ mysqldump -u root -p my_db > my_db-$(date +%F).sql
root $ mysql -u root -p // 打开 MySQL
mysql$ use my_db; // 使用数据库
mysql$ insert into my_tb values (3, "mark"), (4, "java"); // 插入数据
mysql$ select * from my_tb; // 显示表内容
mysql$ exit; // 退出
root $ mysqladmin -u root -p flush-logs // 根据日志进行增量备份
// 查看日志文件情况,此时 000001 文件记录的是当前的增备记录,而 000002 用于下次增备。
root $ find / -name "mysql-bin*"
// /var/lib/mysql/mysql-bin.000001 /var/lib/mysql/mysql-bin.000002 /var/lib/mysql/mysql-bin.index
root $ mysqlbinlog --no-defaults --base64-output=decode-rows -v /var/lib/mysql/mysql-bin.000001 > bak.txt
root $ vim ./bak.txt // 查看日志内容
root $ mysql -u root -p // 打开 MySQL
mysql$ use my_db; // 选择数据库
mysql$ drop table my_tb; // 删除数据表
mysql$ show tables; // 列出所有表
// Empty set (0.00 sec)
// 先恢复完全备份
mysql$ source ./all-data-2023-05-11.sql // 恢复
mysql$ use my_db; // 选择数据库
mysql$ show tables; // 选择数据表
mysql$ select * from my_tb; // 展示内容
// | id | name |
// | 1 | tom |
// | 2 | jerry |
// 基于时间点的恢复,具体的时间可以根据 (3.1-5) 中的 vim ./bak.txt 来查看,详情可阅读参考链接[1]。
// 可以基于断点位置恢复,将 --stop-datetime 替换为 --stop-position 详情可阅读参考链接[1]。
root $ mysqlbinlog --no-defaults --stop-datetime='2023-05-11 16:55:30' /var/lib/mysql/mysql-bin.000001 | mysql -u root -p
root $ mysql -u root -p // 打开 MySQL
mysql$ use my_db; // 选择数据库
mysql$ select * from my_tb;
// | id | name |
// | 1 | tom |
// | 2 | jerry |
// | 3 | mark |
// | 4 | java |
// 增量恢复成功 !