MySQL mysqlbinlog企业案例

内容待补充

案例文字说明:

7.3 故障时间点:

周四上午10点,开发人员误删除了一个表,如何恢复?

7.4 思路:

1、停业务,避免数据的二次伤害

2、找一个临时库,恢复周三23:00全备

3、截取周三23:00  --- 周四10点误删除之间的binlog,恢复到临时库

4、测试可用性和完整性

5、

       5.1 方法一:直接使用临时库顶替原生产库,前端应用割接到新库

       5.2 方法二:将误删除的表导出,导入到原生产库

6、开启业务

实验过程code

  1 #-------------------------------------------------------------------------------
  2 #
  3 # 企业案例恢复操作
  4 # 1.1 全备+恢复部分误删除的表(全备期间删除或者全备完成后删除)
  5 # Author:nod
  6 # Date:18-08-05
  7 #-------------------------------------------------------------------------------
  8 
  9 
 10 
 11 
 12 #-------------------------------------------------------------------------------
 13 # 启动实例模拟备用数据库
 14 #-------------------------------------------------------------------------------
 15 mysqld_safe --defaults-file=/data/3307/my.cnf &
 16 
 17 [root@db01 tmp]# netstat -lnp | grep 330*
 18 tcp        0      0 :::3306                     :::*                        LISTEN      45894/mysqld        
 19 tcp        0      0 :::3307                     :::*                        LISTEN      46940/mysqld        
 20 unix  2      [ ACC ]     STREAM     LISTENING     146100 46940/mysqld        /data/3307/mysql.sock
 21 
 22 
 23 #-------------------------------------------------------------------------------
 24 # 主库模拟数据
 25 #-------------------------------------------------------------------------------
 26 [root@db01 tmp]# mysql -uroot -p123 -A
 27 
 28 mysql> flush logs;
 29 
 30 mysql> show master status;
 31 +------------------+----------+--------------+------------------+-------------------+
 32 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 33 +------------------+----------+--------------+------------------+-------------------+
 34 | mysql-bin.000012 |      120 |              |                  |                   |
 35 +------------------+----------+--------------+------------------+-------------------+
 36 1 row in set (0.00 sec)
 37 
 38 
 39 mysql> create database backup;
 40 
 41 mysql> create table backup.full select * from world.city;
 42 
 43 mysql> create table  backup.full_1 select * from mysql.user;
 44 
 45 #-------------------------------------------------------------------------------
 46 # 模拟主库每天定时进行全备
 47 #-------------------------------------------------------------------------------
 48 [root@db01 backup]# mysqldump -uroot -p123 -A  -R  --triggers --master-data=2  --single-transaction|gzip > /backup/full_$(date +%F).sql.gz
 49 Warning: Using a password on the command line interface can be insecure.
 50 
 51 [root@db01 backup]# ll
 52 total 328
 53 -rw-r--r-- 1 root root 334770 Aug  5 22:19 full_2018-08-05.sql.gz
 54 
 55 
 56 
 57 #-------------------------------------------------------------------------------
 58 # 模拟主库数据发生变化
 59 # 故障前thur数据为239rows
 60 #-------------------------------------------------------------------------------
 61 mysql> create table backup.thur select * from world.country;
 62 Query OK, 239 rows affected (0.11 sec)
 63 Records: 239  Duplicates: 0  Warnings: 0
 64 
 65 mysql> update backup.full set countrycode='CHN';
 66 Query OK, 3716 rows affected (0.04 sec)
 67 Rows matched: 4079  Changed: 3716  Warnings: 0
 68 
 69 mysql> delete from backup.full where id>200;
 70 Query OK, 3879 rows affected (0.05 sec)
 71 
 72 #-------------------------------------------------------------------------------
 73 # 模拟主库数据故障 删除thur表
 74 #-------------------------------------------------------------------------------
 75 mysql> drop table thur;
 76 
 77 
 78 #-------------------------------------------------------------------------------
 79 # 开始恢复数据部分
 80 #-------------------------------------------------------------------------------
 81 
 82 
 83 #-------------------------------------------------------------------------------
 84 # 通过全备进行数据分析
 85 #-------------------------------------------------------------------------------
 86 [root@db01 backup]# gzip -d full_2018-08-05.sql.gz 
 87 [root@db01 backup]# ll
 88 total 1072
 89 -rw-r--r-- 1 root root 1096129 Aug  5 22:19 full_2018-08-05.sql
 90 
 91 #-------------------------------------------------------------------------------
 92 # 2 分析full_2018-08-05.sql得出
 93 # CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=137208;
 94 # 说明是从mysql-bin.000012开始记录 start-position为137208
 95 # 3 通过show binlog events in 'mysql-bin.000012' 得出drop开始的位置为 536332
 96 # 因而语句写为:
 97 # mysqlbinlog --start-position=137208 --stop-position=536332   /data/mysql/mysql-bin.000012 >/backup/inc.sql
 98 #-------------------------------------------------------------------------------
 99 
100 [root@db01 backup]# mysqlbinlog --start-position=137208 --stop-position=536332   /data/mysql/mysql-bin.000012 >/backup/inc.sql
101 [root@db01 backup]# ll
102 total 1608
103 -rw-r--r-- 1 root root 1096129 Aug  5 22:19 full_2018-08-05.sql
104 -rw-r--r-- 1 root root  546397 Aug  5 22:27 inc.sql
105 
106 
107 
108 #-------------------------------------------------------------------------------
109 # 进入备用数据库 恢复数据
110 #-------------------------------------------------------------------------------
111 [root@db01 tmp]# mysql -S /data/3307/mysql.sock 
112 
113 set sql_log_bin=0;
114 source /backup/full_2018-08-05.sql
115 source /backup/inc.sql
116 
117 #-------------------------------------------------------------------------------
118 # 检查恢复后的数据
119 #-------------------------------------------------------------------------------
120 mysql> select count(*) from thur;
121 +----------+
122 | count(*) |
123 +----------+
124 |      239 |
125 +----------+
126 1 row in set (0.00 sec)
127 
128 #-------------------------------------------------------------------------------
129 # 将故障表导出
130 #-------------------------------------------------------------------------------
131 [root@db01 backup]# mysqldump -S /data/3307/mysql.sock backup thur >/backup/thur.sql
132 
133 #-------------------------------------------------------------------------------
134 # 登录主库 导入数据thur.sql 
135 # 因为是导出的单表,一定要进入数据库后恢复 use backup
136 #-------------------------------------------------------------------------------
137 [root@db01 backup]# mysql -uroot -p123 -A
138 
139 mysql> use backup;
140 Database changed
141 mysql> source /backup/thur.sql;
142 Query OK, 0 rows affected (0.00 sec)
143 
144 Query OK, 0 rows affected (0.00 sec)
145 
146 Query OK, 0 rows affected (0.00 sec)
147 
148 Query OK, 0 rows affected (0.00 sec)
149 
150 #-------------------------------------------------------------------------------
151 # 检查主库数据
152 #-------------------------------------------------------------------------------
153 mysql> select count(*) from thur;
154 +----------+
155 | count(*) |
156 +----------+
157 |      239 |
158 +----------+
159 1 row in set (0.01 sec)

猜你喜欢

转载自www.cnblogs.com/nodchen/p/9427584.html