mysqldump備份恢復 一致性

2021-06-18 17:28:05 字數 1697 閱讀 3164

mysqldump --lock-all-tables  --flush-logs --master-data=2 --all-databases > backup.sql

shell指令碼判斷mysqldump鎖表

[root@faxian ~]# more mysql.sh 

#/bin/bash

for (( i=1; i<=150; i=i+1 ))

domysql test -e 'insert into test02(name) values(1)'

sleep 2

done

exit 0

[root@faxian ~]# 

操作步驟

1.sh mysql.sh

2、mysqldump --lock-all-tables  --flush-logs --master-data=2 --all-databases > backup.sql

3、檢視binlog重新整理情況,還有backup.sql頭部

---- position to start replication or point-in-time recovery from

-- change master to master_log_file='mysql-bin.000006', master_log_pos=120;

-- current database: `mysql`

-綠色部分就是mysql

mysqldump --single-transaction   --flush-logs --master-data=2   --all-databases  > backup.sql

操作步驟和上面一致。

發現 --single-transaction只是切換了binlog日誌,而沒有鎖表,--lock-all-tables 則是一致備份階段一致鎖表,直到備份結束。

backup.sql檔案頭部一樣

測試表明:myisam和innodb引擎都可以用上面語句進行全備

lock-all-table 表示把所有的庫,表都鎖住了,此時不允許寫入,myisam和innodb肯定是一致的。

flush tables with read lock;flush logs;cp.....;unlock table;還是flush tables with read lock;cp......;flush logs;unlock table;

這兩種方式都沒有問題。重要的是,你恢復資料庫以後,從備份庫的哪個位置開始應用binlog。

具體一點來說。備份是做什麼用的列?它是為了恢復用的,首先,將所有的資料邏輯匯入。這裡並沒有完,你保證了myisam和innodb或者其他引擎的一致性,沒問題。因為備份完成後,你就解鎖了,資料又有變更。你如果先把後面的這些變更趕上,那麼就必須從備份庫的某乙個位置開始應用binlog。這個位置必須在lock table 和unlock table之間記錄,只有在這段時間內,binlog是不變的,也正是在這段時間內,你把所有的資料拷貝出去了。所以,flush logs在你說的這兩種情況下,並沒有太大的區別。它只是在當前binlog最末尾的位置上加上rotate event,提示下乙個binlog檔案是誰。而你恢復的時候是從檔案的末尾開始恢復,還是從下乙個檔案的開頭位置恢復都沒有問題。因為這裡的binlog並不設計到業務資料的變化。

這裡應該沒有必要看mysql的原始碼,你直接試試在lock和unlock之間,flush logs,然後用mysqlbinlog看看它做了什麼事情就好了

Mysql備份恢復 mysqldump

mysqldump是mysql服務自帶的備份工具 邏輯備份工具,可以完成完全 部分備份 對於不同的引擎,也有著不同的方案 innodb 熱備 myisam 溫備 其生成備份檔案的命令如下 mysqldump是客戶端工具,支援連線到遠端客戶端進行備份 mysqldump options databas...

mysql dump備份和恢復

1.準備工作 檢視當前mysql伺服器使用的儲存引擎 mysqladmin variables grep storage engine storage engine myisam 檢視mysql資料庫存放目錄 mysqladmin variables grep datadir datadir usr...

mysql備份與恢復 mysqldump

備份 備份乙個資料庫 shell中執行,下同 mysqldump uusername ppassword hhostname databases db name path db name.sql 備份多個資料庫 mysqldump uusername hhostname ppassword data...