明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

詳細(xì)說明mysql之?dāng)?shù)據(jù)備份與恢復(fù)

[摘要]該文使用mysql5.5 centos6.5 64位(本人使用rpm安裝mysql,數(shù)據(jù)庫的安裝目錄默認(rèn))一、數(shù)據(jù)備份注意事項(xiàng)讀鎖問題:數(shù)據(jù)庫(或者某個(gè)表)一旦進(jìn)行讀鎖操作則影響數(shù)據(jù)庫的寫操作所以此時(shí)不能對(duì)數(shù)據(jù)庫進(jìn)行寫操作。之所以在數(shù)據(jù)備份的時(shí)候進(jìn)行讀鎖操作是為了保證備份數(shù)據(jù)的完整性一致性,在數(shù)據(jù)...
該文使用mysql5.5 centos6.5 64位(本人使用rpm安裝mysql,數(shù)據(jù)庫的安裝目錄默認(rèn))

一、數(shù)據(jù)備份注意事項(xiàng)

讀鎖問題:數(shù)據(jù)庫(或者某個(gè)表)一旦進(jìn)行讀鎖操作則影響數(shù)據(jù)庫的寫操作所以此時(shí)不能對(duì)數(shù)據(jù)庫進(jìn)行寫操作。之所以在數(shù)據(jù)備份的時(shí)候進(jìn)行讀鎖操作是為了保證備份數(shù)據(jù)的完整性一致性,在數(shù)據(jù)備份完成后會(huì)自動(dòng)進(jìn)行解鎖。

更新日志問題:每次備份數(shù)據(jù)的時(shí)候新生成一個(gè)日志文件,這樣數(shù)據(jù)庫在備份一段時(shí)間后突然崩潰可以通過該bin-log日志還原該時(shí)間段的數(shù)據(jù)。數(shù)據(jù)恢復(fù)的步驟:恢復(fù)備份的數(shù)據(jù)+還原最新bin-log日志中的數(shù)據(jù)

二、使用mysqldump進(jìn)行書籍備份

mysqldump:命令將數(shù)據(jù)庫中的數(shù)據(jù)備份成一個(gè)文本文件。表的結(jié)構(gòu)和表中的數(shù)據(jù)將存儲(chǔ)在生成的文本文件中。

mysqldump命令的工作原理:它先查出需要備份的表的結(jié)構(gòu),再在文本文件中生成一個(gè)CREATE語句。然后,將表中的所有記錄轉(zhuǎn)換成一條INSERT語句。然后通過這些語句,就能夠創(chuàng)建表并插入數(shù)據(jù)。

將test數(shù)據(jù)庫備份到/tmp/mysql_back/目錄下

 [root@localhost tmp]# mysqldump -uroot -p111111 test -l -F > '/tmp/mysql_back/test.sql';

參數(shù)解讀:

1、mysqldump mysql數(shù)據(jù)備份的命令

2、-uroot -p111111 用戶名密碼

3、test:要備份的數(shù)據(jù)庫名

4、-l:進(jìn)行讀鎖控制

5、-F:生成新日志文件

執(zhí)行該語句后會(huì)發(fā)現(xiàn)在 /var/lib/mysql 目錄下會(huì)生成一個(gè)新的bin-log日志 mysql-bin.000002

6、/tmp/mysql_back/test.sql :生成備份文件的位置及名稱

三、數(shù)據(jù)恢復(fù)

1、備份數(shù)據(jù)的恢復(fù):

 [root@localhost tmp]# mysql -uroot -p111111 test -v -f</tmp/mysql_back/test.sql

  -v:查看導(dǎo)入的詳細(xì)信息

  -f:導(dǎo)入過程中遇到錯(cuò)誤時(shí)可以skip過,繼續(xù)執(zhí)行下面的語句。

2、bin-log日志中數(shù)據(jù)的還原:

  該日志在/var/lib/mysql下mysql-bin.000002日志中所有的記錄

  [root@localhost mysql]# mysqlbinlog --no-defaults mysql-bin.000002 mysql -uroot -p111111 test;

3、還原bin-log日志中指定位置的數(shù)據(jù)

通過 position位置還原數(shù)據(jù)

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 中的數(shù)據(jù)(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日志中指定時(shí)間段的數(shù)據(jù)

格式:將3中即可

--start-position="175" 替換為 --start-date="2016-12-30 21:30:34"

--stop-position="473" 替換為 --stop-date="2016-12-30 23:30:34"

以上就是詳解mysql之?dāng)?shù)據(jù)備份與恢復(fù)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。