mysql多个数据库文件恢复_两个场景下Mysqldump数据库备份恢复

场景一

昨天凌晨2点做过一次完全备份,白天正常使用,该下班的时候,好巧啊!硬盘坏了。不过幸运的是做过备份并且二进制日志和数据库分开存放

2c7ed2a13ab0e49f6202138e95b8e1a5.png

1、建立数据库并开启二进制日志

5dc764551037011a6f77acf88a1978c9.png

建立用于存放二进制日志的文件夹,修改文件夹属组属主使mysql用户可以读

54ead85be59eb6a69d2fdfae33a53a86.png

二点钟做完全备份,备份完看下是否备份成功mysqldump -A -F --single-transaction --master-data=2 > /backup/fullbak`date +%F`.sql

d336fe62d947e7bece96f92554fc449f.png

less /backup/fullbak2019-07-11.sql    #--master-data选项在备份时自动记录bin-log的位置

fa6e4353c323e1b41a2942a18ef26901.png

模拟2点到18点的数据修改

6b2fbee431b8d91261a9f62ab2d3621a.png

2、存放数据库的硬盘损坏,所有数据库丢失

c6f793f3162f9955865909ac4a93508b.png

3、还原

故障恢复中可以让用户暂停访问数据库

vi /etc/my.cnf  #添加一行

5c451cdece65eae5942f147132bb68da.png

systemctl restart mariadb

查看当前二进制日志的位置

c880d45c2cfcacdfbce7eafc48ebedee.png

从二进制日志中获取2点到18点数据[root@swh ~]mysqlbinlog  --start-position=245 /data/logbin/mysql-bin.000003 > /backup/inc.sql

[root@swh ~]#mysqlbinlog  /data/logbin/mysql-bin.000004 >> /backup/inc.sql

[root@swh ~]#mysqlbinlog  /data/logbin/mysql-bin.000005 >> /backup/inc.sql

[root@swh ~]#mysqlbinlog  /data/logbin/mysql-bin.000006 >> /backup/inc.sql

由于恢复数据库会产生大量的日志,可以临时关闭二进制日志MariaDB [(none)]> set sql_log_bin=off;

MariaDB [(none)]> source  /backup/fullbak2019-07-11.sql  #导入完全备份

MariaDB [(none)]> source  /backup/inc.sql     #导入增量备份

MariaDB [(none)]> set sql_log_bin=on;

恢复后检查数据库,恢复访问

MariaDB [hellodb]> select * from students;

d81d7e9867d7f3d435552315fc429ceb.pngvi /etc/my.cnf  #去掉skip-networking

场景二

凌晨2点做过一次完全备份,白天使用过程中,某同事误删除数据库,当时并未发现,直到下班的时候出故障了

63344ead9049eb6eea10606532c8323c.png

1、数据库完全备份mysqldump -A -F --single-transaction --master-data=2 > /backup/fullbak`date +%F`.sql

2e1449f4f21d7de108e3be785607a6c1.png

less /backup/fullbak2019-07-11.sql       #--master-data选项在备份时自动记录bin-log的位置

792c9bb28dc1c990c53cfe183e4e91e2.png

2、表被删除,但是没有发现,继续使用,在18点发现问题

fdb116d49e09ae38b296bdf278f49c17.png

3、还原

故障恢复中可以让用户暂停访问数据库

vi /etc/my.cnf  #添加一行

5c451cdece65eae5942f147132bb68da.png

systemctl restart mariadb

查看当前日志的位置

0848e712d1e74778f04e77275c8fc1a5.png

根据备份文件中记录的日志位置,从二进制日志获取增量[root@swh ~]#mysqlbinlog  --start-position=245 /data/logbin/mysql-bin.000013 > /backup/inc.sql

[root@swh ~]#cp /backup/inc.sql  /backup/inc.sql.bak    #修改下备份下

[root@swh ~]#vi /backup/inc.sql   #从二进制日志中找出删表语句并删除,剩下的日志就是使用的日志

dab1ef38496805972cc2515ca4197018.png[root@swh ~]#rm -rf /var/lib/mysql/*    #可以选择删除所有数据库恢复,或者直接恢复增量备份

[root@swh ~]#systemctl restart mariadb

MariaDB [(none)]> set sql_log_bin=off;

MariaDB [(none)]> source  /backup/fullbak2019-07-11.sql

MariaDB [(none)]> source /backup/inc.sql

MariaDB [(none)]> set sql_log_bin=on;

检查数据

a34889e77b0acebc203338ca266f57df.png

70cf27978e82604ddfe37fce3592ea4a.pngvi /etc/my.cnf  #去掉skip-networking

虽然可以恢复但是花费的时间成本或许是相当大的,生产环境还需慎重

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值