Day.9 备份还原 - 还原资料 (MYSQL binlog )-下

前情提要: 在前一天的部分我们备份好user资料库数据,和准备资料的动作 <<

那就直接进入主题->还原步骤/images/emoticon/emoticon30.gif

  1. 开新连线(图右),临时关闭binlog (使binlog不会纪录到恢复时的内容)
    Q:为何要关闭binlog ?
    A:因为在汇入备份档时,也会纪录binlog。而这些内容对於後续复原来说是没作用的并且会混乱。(也可以选择先备份起来)

https://ithelp.ithome.com.tw/upload/images/20210817/201308803RynHC1Q3F.png

mysql> SET sql_log_bin=0;

https://ithelp.ithome.com.tw/upload/images/20210817/20130880lIPCnVWTfK.png

  1. 在关闭binlog的session汇入备份档 (恢复到备份时的纪录)
mysql> use user

mysql> source /mnt/mysql_data/mysql/user_backup_20210817.sql
  1. 找到误删资料的SQL执行位置,处理後续异动资料。(这句SQL: delete from user_powers where group_id = 19200)
root@mysql-master-1:/mnt/mysql_data/mysql# mysqlbinlog -vv mysql-bin.000013 | cat -n | grep -iw 'delete'
root@mysql-master-1:/mnt/mysql_data/mysql# mysqlbinlog -vv mysql-bin.000014 | cat -n | grep -iw 'delete'
    78	### DELETE FROM `user`.`user_powers`
    84	### DELETE FROM `user`.`user_powers`
    90	### DELETE FROM `user`.`user_powers`
    96	### DELETE FROM `user`.`user_powers`
   102	### DELETE FROM `user`.`user_powers`

root@mysql-master-1:/mnt/mysql_data/mysql# mysqlbinlog -vv mysql-bin.000014 | cat -n | sed -n '55,120p';

https://ithelp.ithome.com.tw/upload/images/20210817/20130880Av6ChcKGMk.png

4.导入binlog复原後续操作纪录

恢复范围:

mysql-bin.000013: 还记得我们在备份时有刷新log 产生新纪录档mysql-bin.000013 所以内容直接全部恢复。
mysql-bin.000014: 纪录范围则到(# at 467)执行删除资料前的位置(参考上图)。

  • --start-position:备份後pos点 (多个binlog档案->则为第一个binlog档案POS点)
  • --stop-position: 误操作前pos点 (多个binlog档案->则为最後的binlog档案POS点)

如果在备份时没有刷新log,等於後续纪录包含在某个binlog中。这时候要从哪边开始恢复就是看备份时纪录的POS位置等於要设定 ex. --start-position=154

使用注意: 在前面备份还原时我们针对单一DB做数据库还原,不会动到其他DB数据。透过binlog还原後续资料时如果没指定单一库 --database=user,执行到一些其他DB的异动像已经删除的或是插入值异动是会喷错的!!
=binlog纪录是包含所有DB操作内容的=

root@mysql-master-1:/mnt/mysql_data/mysql# mysqlbinlog --stop-position=467 mysql-bin.000013 mysql-bin.000014 --database=user --skip-gtids | mysql -uroot -p1234

成功回到误删资料前的状态/images/emoticon/emoticon34.gif

mysql> select * from user_powers;
+----------+-----------+----------+---------------------+
| user_id  | nick_name | group_id | updated_at          |
+----------+-----------+----------+---------------------+
| 1021211  | ken       |   119201 | 2021-08-10 08:33:56 |
| 1232123  | siangx    |    19200 | 2021-08-17 02:08:05 |
| 18675543 | kitty     |    19200 | 2021-08-10 08:33:51 |
| 23122141 | kiki      |  1242000 | 2021-08-12 09:01:54 |
| 24122441 | snow      |   119201 | 2021-08-10 08:33:51 |
| 38921112 | shawn     |    19200 | 2021-08-12 10:33:51 |
| 4356231  | lisa      |    19200 | 2021-08-10 08:33:56 |
| 64121211 | kevin     |   389110 | 2021-08-10 08:33:51 |
| 72197123 | eric      |    19200 | 2021-08-15 01:33:51 |
| 7622441  | ben       |   213123 | 2021-08-10 08:33:56 |
| 91311233 | alex      |   389110 | 2021-08-10 08:33:56 |
| 91675543 | kay       |   123321 | 2021-08-10 08:33:56 |
| 98112111 | leo       |    19201 | 2021-08-13 12:33:56 |
| 98212321 | sara      |   119201 | 2021-08-10 08:33:51 |
+----------+-----------+----------+---------------------+
14 rows in set (0.00 sec)

明天来介绍一下对於日志不断增长好用的日志切割管理工具~


<<:  [DAY3]架设Heroku

>>:  Normals & Lighting

.Net Core Web Api_笔记11_组合路由

在一个Action中倘若想实现多种结果返回或者多种输入参数 就势必要能够支援多种路由模板 可能搭配不...

D-25-回圈 loop ? foreach ? while

回圈 loop 昨天小光更进一步的认识了逻辑判断式,也开始自己开发了一个心情显示器,不过如果要表现1...

企划实现(12)

FB登入 第10步:开启 /app/res/values/strings.xml 档案。 FB会自动...

ISO 27001 资讯安全管理系统 【解析】(十七)

柒、第六章 风险管理 这个章节是ISO标准设置来取代以前「预防措施」的概念,在条文中首先强调的是风险...

Day29

草莓正在奋力地练习之前学过的 JavaScript,熊熊刚下班急忙忙地跑过来。 「草莓啊不好意思,公...