mysqldump命令的工作原理:它先查出需要備份的表的結構,再在文本文件中生成一個CREATE語句。然後,將表中的所有記錄轉換成一條INSERT語句。然後通過這些語句,就能夠創建表並插入數據。 ...
該文使用mysql5.5 centos6.5 64位(本人使用rpm安裝mysql,資料庫的安裝目錄預設)
一、數據備份註意事項
讀鎖問題:資料庫(或者某個表)一旦進行讀鎖操作則影響資料庫的寫操作所以此時不能對資料庫進行寫操作。之所以在數據備份的時候進行讀鎖操作是為了保證備份數據的完整性一致性,在數據備份完成後會自動進行解鎖。
更新日誌問題:每次備份數據的時候新生成一個日誌文件,這樣資料庫在備份一段時間後突然崩潰可以通過該bin-log日誌還原該時間段的數據。數據恢復的步驟:恢復備份的數據+還原最新bin-log日誌中的數據
二、使用mysqldump進行書籍備份
mysqldump:命令將資料庫中的數據備份成一個文本文件。表的結構和表中的數據將存儲在生成的文本文件中。
mysqldump命令的工作原理:它先查出需要備份的表的結構,再在文本文件中生成一個CREATE語句。然後,將表中的所有記錄轉換成一條INSERT語句。然後通過這些語句,就能夠創建表並插入數據。
將test資料庫備份到/tmp/mysql_back/目錄下
[root@localhost tmp]# mysqldump -uroot -p111111 test -l -F > '/tmp/mysql_back/test.sql';
參數解讀:
1、mysqldump mysql數據備份的命令
2、-uroot -p111111 用戶名密碼
3、test:要備份的資料庫名
4、-l:進行讀鎖控制
5、-F:生成新日誌文件
執行該語句後會發現在 /var/lib/mysql 目錄下會生成一個新的bin-log日誌 mysql-bin.000002
6、/tmp/mysql_back/test.sql :生成備份文件的位置及名稱
三、數據恢復
1、備份數據的恢復:
[root@localhost tmp]# mysql -uroot -p111111 test -v -f</tmp/mysql_back/test.sql
-v:查看導入的詳細信息
-f:導入過程中遇到錯誤時可以skip過,繼續執行下麵的語句。
2、bin-log日誌中數據的還原:
該日誌在/var/lib/mysql下mysql-bin.000002日誌中所有的記錄
[root@localhost mysql]# mysqlbinlog --no-defaults mysql-bin.000002 |mysql -uroot -p111111 test;
3、還原bin-log日誌中指定位置的數據
通過 position位置還原數據
BEGIN
/*!*/;
# at 175
#170206 22:55:48 server id 1 end_log_pos 263 Query thread_id=17 exec_time=0 error_code=0
use `test`/*!*/;
SET TIMESTAMP=1486392948/*!*/;
insert into t1 values(10)
/*!*/;
# at 263
#170206 22:55:48 server id 1 end_log_pos 290 Xid = 178
COMMIT/*!*/;
# at 290
#170206 22:55:54 server id 1 end_log_pos 358 Query thread_id=17 exec_time=0 error_code=0
SET TIMESTAMP=1486392954/*!*/;
BEGIN
/*!*/;
# at 358
#170206 22:55:54 server id 1 end_log_pos 446 Query thread_id=17 exec_time=0 error_code=0
SET TIMESTAMP=1486392954/*!*/;
insert into t1 values(12)
/*!*/;
# at 446
#170206 22:55:54 server id 1 end_log_pos 473 Xid = 179
COMMIT/*!*/;
# at 473
#170206 22:56:42 server id 1 end_log_pos 547 Query thread_id=17 exec_time=0 error_code=0
SET TIMESTAMP=1486393002/*!*/;
truncate t1
還原該bin-log日誌中position 位置在 172,473 中的數據(end_log_pos)
[root@localhost mysql]# mysqlbinlog --no-defaults mysql-bin.000002 --start-position="175" --stop-position="473"|mysql -uroot -p111111 test;
4、還原bin-log日誌中指定時間段的數據
格式:將3中即可
--start-position="175" 替換為 --start-date="2016-12-30 21:30:34"
--stop-position="473" 替換為 --stop-date="2016-12-30 23:30:34"