第二天操作:继续向tb1中插入数据
MariaDB[hellodb]> insert into tb1 values (21),(22),(23);
MariaDB[hellodb]> select * from tb1;
+------+
|id |
+------+
| 1 |
| 2 |
| 3 |
| 21 |
| 22 |
| 23 |
+------+
故障模拟
hellodb数据库遭到误删除:
MariaDB[hellodb]> DROP database hellodb;
恢复前的准备
查看二进制日志是记录到了第三个日志
MariaDB[(none)]> show master logs;
+------------------+-----------+
|Log_name | File_size |
+------------------+-----------+
|mysql-bin.000001 | 288 |
|mysql-bin.000002 | 577 |
|mysql-bin.000003 | 533 | #当前日志的记录位置
+------------------+-----------+
3rows in set (0.00 sec)
MariaDB[(none)]> show binlog events in 'mysql-bin.000003'\G;
***************************5. row ***************************
Log_name: mysql-bin.000005
Pos: 446
Event_type: Query
Server_id: 1
End_log_pos:533
Info: DROP database hellodb #记录的删除语句
5rows in set (0.00 sec)
ERROR:No query specified
由于是整个hellodb数据库遭到误删除,所以需要用一开始的完全备份文件,以及第一天的增量备份文件,恢复hellodb数据库和第一天对数据库进行修改的内容。
第二天对数据库进行修改的内容恢复:如果直接把当天的二进制日志导入到数据库,由于数据库中包含了删除语句,所以数据库还是会被删除;所以在导入第二天二进制日志时,需要删除日志中的DROP语句。
将第二天的二进制日志文件转换成sql文件,放到backup目录下
[root@MariaDB~]# mysqlbinlog /backup/bin-log/mysql-bin.000003 > /backup/2.sql
打开2.sql文件可以看到DROP语句,删除这个语句
# at446
#15061612:15:22 server id 1 end_log_pos 533 Query thread_id=20 exec_time=0 error_code=0
SETTIMESTAMP=1434428122/*!*/;
DROP database hellodb #删除或者注释这一行
恢复过程:
恢复之前为了避免产生没有用的二进制日志,可以关闭二进制日志的记录
MariaDB[(none)]> SET SESSION sql_log_bin=0;
将第一次的完全备份数据导入到数据库
MariaDB [hellodb]> SOURCE /backup/hellodb-2015-06-16.sql;
查看数据库已经导入,但是tb1表不存在
MariaDB[(none)]> use hellodb;
Databasechanged
MariaDB[hellodb]> show tables;
+-------------------+
|Tables_in_hellodb |
+-------------------+
|classes |
|coc |
|courses |
|scores |
|students |
|teachers |
|toc |
+-------------------+
导入第一天增量备份的1.sql文件。
MariaDB [hellodb]> SOURCE /backup/1.sql;
查看tb1表,发现第一天插入的数据都存在
MariaDB[hellodb]> select * from tb1;
+------+
|id |
+------+
| 1 |
| 2 |
| 3 |
+------+
导入当天的2.sql文件
MariaDB [hellodb]> SOURCE /backup/2.sql;
查看数据已经完全恢复
MariaDB[hellodb]> select * from tb1;
+------+
|id |
+------+
| 1 |
| 2 |
| 3 |
| 21 |
| 22 |
| 23 |
+------+
恢复完成,启用记录二进制日志
MariaDB[hellodb]> SET SESSION sql_log_bin=1;
特别说明:如果在恢复中关闭二进制日志,导入数据必须在Mariadb命令行导入,如果在shell命令行导入还是会记录二进制日志的。
全库的备份恢复
备份
第一次完全备份,备份时锁定表,并滚动二进制日志
[root@MariaDB ~]# mysqldump -A -u root -p--lock-all-tables --flush-logs --master-data=2 > /backup/ALL-`date +%F`.sql
Enter password:
[root@MariaDB ~]# ll /backup/
total 532
-rw-r--r-- 1 root root 1980 Jun 16 00:46 1.sql
-rw-r--r-- 1 root root 1957 Jun 16 00:52 2.sql
-rw-r--r-- 1 root root 521774 Jun 16 01:04ALL-2015-06-16.sql
drwxr-xr-x 2 mysql mysql 4096 Jun 16 01:04 bin-log
-rw-r--r-- 1 root root 7950 Jun 16 00:43hellodb-2015-06-16.sql