############################## 第一步1.全庫備份 ##########################################
[root@db01 data]# mysqldump -p --flush-logs --master-data=2 --all-databases > /tmp/all.sql
Enter password:
--flush-logs //備份時先將內存中日志寫回磁盤霹陡,然后截斷二進制日志,并產生新的日志文件
初始狀態(tài):
mysql> select * from t1;
+------+---------+----------+
| id | name | sal |
+------+---------+----------+
| 1 | harry | 12000.33 |
| 2 | tom | 15000.00 |
| 3 | harryyy | NULL |
+------+---------+----------+
查看完整備份文件中的字段
# vim /tmp/all.sql
...
--開始復制或時間點恢復的位置
-- Position to start replication or point-in-time recovery from
--將主日志文件更改為主日志文件 mysqld-bin.000003 pos點位置為120
-- CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000003', MASTER_LOG_POS=120;
--
-- Current Database: `db01`
--
...
############################## 第二步 2. 更新相關數據 ######################################
注釋:更新的db02庫中的t1表
mysql> insert into t1 values (4,'jack',2000);
Query OK, 1 row affected (0.01 sec)
--------------------------------誤刪除之前的狀態(tài)-----------------------------------------
mysql> select * from t1;
+------+---------+----------+
| id | name | sal |
+------+---------+----------+
| 1 | harry | 12000.33 |
| 2 | tom | 15000.00 |
| 3 | harryyy | NULL |
| 4 | jack | 2000.00 |
+------+---------+----------+
4 rows in set (0.00 sec)
--------------------------------誤刪除之前的狀態(tài)---------------------------------------
mysql> delete from t1 where id=3;
Query OK, 1 row affected (0.01 sec)
----------------------------------最新狀態(tài)-------------------------------------------
mysql> select * from t1;
+------+-------+----------+
| id | name | sal |
+------+-------+----------+
| 1 | harry | 12000.33 |
| 2 | tom | 15000.00 |
| 4 | jack | 2000.00 |
+------+-------+----------+
3 rows in set (0.00 sec)
----------------------------------最新狀態(tài)-------------------------------------------
[root@db01 data]# mysqlbinlog mysqld-bin.000003|less ---用mysqlbinlog工具查看這個二進制文件會看到剛剛所操作數據庫的sql語句
----------------------mysqld-bin.000003二進制日志文件 開始------------------------------
# at 120 起始位置
#181012 19:06:00 server id 1 end_log_pos 199 CRC32 0xc4a7306e Query thread_id=9
exec_time=0 error_code=0
SET TIMESTAMP=1539342360/*!*/;
SET @@session.pseudo_thread_id=9/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1,
@@session.autocommit=1/*!*/;
SET @@session.sql_mode=1075838976/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET
@@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8
/*!*/;
SET @@session.lc_time_names=0/*!*/;
# at 199
#181012 19:06:00 server id 1 end_log_pos 310 CRC32 0x764ea2b3 Query thread_id=9
exec_time=0 error_code=0
use `db02`/*!*/;
SET TIMESTAMP=1539342360/*!*/;
insert into t1 values (4,'jack',2000) 正常的更新數據氮块,需要恢復
/*!*/;
# at 310
#181012 19:06:00 server id 1 end_log_pos 341 CRC32 0xa5a0cfe4 Xid = 1103
COMMIT/*!*/;
# at 341 //insert語句的結束位置
#181012 19:06:32 server id 1 end_log_pos 420 CRC32 0xc2c81cd3 Query thread_id=9
exec_time=0 error_code=0
SET TIMESTAMP=1539342392/*!*/;
BEGIN
/*!*/;
# at 420
#181012 19:06:32 server id 1 end_log_pos 519 CRC32 0x7b3404e2 Query thread_id=9
exec_time=0 error_code=0
SET TIMESTAMP=1539342392/*!*/;
delete from t1 where id=3 誤操作的數據卢鹦,不需要恢復
/*!*/;
# at 519
#181012 19:06:32 server id 1 end_log_pos 550 CRC32 0x5bbc4007 Xid = 1105
COMMIT/*!*/;
-----------------------------mysqld-bin.000003.sql二進制日志文件 結尾--------------------------
############################## 第三步 3.備份二進制日志文件 ######################################
3.備份二進制文件
方法1:直接拷貝二進制物理文件
# cp mysqld-bin.000003 /tmp/
方法2:備份改變過的數據(SQL)
# mysqlbinlog --start-post=120 mysqld-bin.000003 > /tmp/mysqld-bin.000003.sql
--start-position=# 開始的位置(POS)
--stop-position=# 結束的位置
############################## 第四步 4. 模擬故障(刪除庫) ######################################
進入到數據庫中迁筛,將3個業(yè)務庫全部刪掉
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db01 |
| db02 |
| myblog |
| mysql |
| performance_schema |
| test |
+--------------------+
7 rows in set (0.00 sec)
mysql> drop database db01;
Query OK, 7 rows affected (0.04 sec)
mysql> drop database db02;
Query OK, 1 row affected (0.01 sec)
mysql> drop database myblog;
Query OK, 12 rows affected (1.62 sec)
############################## 第五步 5. 還原全庫 ######################################
5.還原
1)全庫恢復
[root@db01 data]# mysql -p < /backup/all.sql
結果:當前數據庫恢復到了11:05分的狀態(tài)
2)增量恢復
######################### 5.1. 通過mysqld-bin.000003.sql恢復到(最新狀態(tài))#####################
進入mysql客戶端
> source /tmp/mysqld-bin.000003.sql
最新狀態(tài)匿又,沒有回復delete誤操作,恢復數據成功
mysql> select * from t1;
+------+-------+----------+
| id | name | sal |
+------+-------+----------+
| 1 | harry | 12000.33 |
| 2 | tom | 15000.00 |
| 4 | jack | 2000.00 |
+------+-------+----------+
3 rows in set (0.00 sec)
最新狀態(tài)骂蓖,沒有回復delete誤操作
################################### end #######################################
------------------------------------------------------------------------------------
查看(讀懂)二進制日志文件
----------------------mysqld-bin.000003.sql二進制日志文件 開始------------------------------
# at 120 起始位置
#181012 19:06:00 server id 1 end_log_pos 199 CRC32 0xc4a7306e Query thread_id=9
exec_time=0 error_code=0
SET TIMESTAMP=1539342360/*!*/;
SET @@session.pseudo_thread_id=9/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1,
@@session.autocommit=1/*!*/;
SET @@session.sql_mode=1075838976/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET
@@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8
/*!*/;
SET @@session.lc_time_names=0/*!*/;
# at 199
#181012 19:06:00 server id 1 end_log_pos 310 CRC32 0x764ea2b3 Query thread_id=9
exec_time=0 error_code=0
use `db02`/*!*/;
SET TIMESTAMP=1539342360/*!*/;
insert into t1 values (4,'jack',2000) 正常的更新數據殿如,需要恢復
/*!*/;
# at 310
#181012 19:06:00 server id 1 end_log_pos 341 CRC32 0xa5a0cfe4 Xid = 1103
COMMIT/*!*/;
# at 341 //insert語句的結束位置
#181012 19:06:32 server id 1 end_log_pos 420 CRC32 0xc2c81cd3 Query thread_id=9
exec_time=0 error_code=0
SET TIMESTAMP=1539342392/*!*/;
BEGIN
/*!*/;
# at 420
#181012 19:06:32 server id 1 end_log_pos 519 CRC32 0x7b3404e2 Query thread_id=9
exec_time=0 error_code=0
SET TIMESTAMP=1539342392/*!*/;
delete from t1 where id=3 誤操作的數據,不需要恢復
/*!*/;
# at 519
#181012 19:06:32 server id 1 end_log_pos 550 CRC32 0x5bbc4007 Xid = 1105
COMMIT/*!*/;
-----------------------------mysqld-bin.000003.sql二進制日志文件 結尾--------------------------
############################## 5.2. 通過mysqlbinlog 恢復到(誤刪除位置) ##########################
使用二進制日志文件恢復到我想要的狀態(tài)
# mysqlbinlog --start-position=120 --stop-position=341 /tmp/mysqld-bin.000003|mysql -uroot -p
Enter password:
驗證:
mysql> use db02;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from t1;
+------+---------+----------+
| id | name | sal |
+------+---------+----------+
| 1 | harry | 12000.33 |
| 2 | tom | 15000.00 |
| 3 | harryyy | NULL |
| 4 | jack | 2000.00 | //第4條記錄產生說明恢復成功
+------+---------+----------+
4 rows in set (0.00 sec)
最新狀態(tài)忙厌,沒有回復delete誤操作
############################### 數據備份恢復完成 ###########################################
完全備份(mysqldump)+增量備份(binlog)
?著作權歸作者所有,轉載或內容合作請聯系作者
- 文/潘曉璐 我一進店門犀农,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宰掉,你說我怎么就攤上這事呵哨。” “怎么了轨奄?”我有些...
- 正文 為了忘掉前任玉组,我火速辦了婚禮谎柄,結果婚禮上,老公的妹妹穿的比我還像新娘惯雳。我一直安慰自己朝巫,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布石景。 她就那樣靜靜地躺著劈猿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪潮孽。 梳的紋絲不亂的頭發(fā)上揪荣,一...
- 文/蒼蘭香墨 我猛地睜開眼粟矿,長吁一口氣:“原來是場噩夢啊……” “哼凰棉!你這毒婦竟也來了?” 一聲冷哼從身側響起陌粹,我...
- 正文 年R本政府宣布彤蔽,位于F島的核電站,受9級特大地震影響庙洼,放射性物質發(fā)生泄漏顿痪。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一油够、第九天 我趴在偏房一處隱蔽的房頂上張望蚁袭。 院中可真熱鬧,春花似錦石咬、人聲如沸揩悄。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽虏束。三九已至棉饶,卻和暖如春厦章,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背照藻。 一陣腳步聲響...