2011-02-04 66 views
5

我有一個使用mysql作爲後端的java應用程序,每天晚上我們使用mysqldump進行mysql的備份,並且應用程序在該時間段停止工作(應用程序20分鐘)。mysql - mysqldump如何工作?

用於進行備份的命令。

$MYSQLDUMP -h $HOST --user=$USER --password=$PASS $database > \ 
$BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql 
gzip -f -9 $BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql 

這是正常的還是我做錯了,導致數據庫在那段時間內失速?

感謝, ķ

回答

1

mysqldump必須獲得對錶的讀鎖並保持備份的時間,以確保一致的備份。然而,如果在兩者之間發生寫入(即,read -> write -> read),則讀鎖可以阻止隨後的讀取:第一讀鎖鎖定寫鎖,該寫鎖鎖定第二讀鎖。

這部分取決於您的表格類型。如果您正在使用MyISAM,鎖適用於整個表,因此整個表將被鎖定。我相信InnoDB中的鎖的工作方式不同,並且這不會鎖定整個表。

0

您可以說明--skip-lock-tables但這可能會導致數據在備份時被修改。這可能意味着你的數據不一致並且會引發各種錯誤。最好只是在最少的人會使用它的時候做你的備份。

1
If tables are stored in the InnoDB storage engine, mysqldump provides a 
    way of making an online backup of these (see command below). 

    shell> mysqldump --all-databases --single-transaction > all_databases.sql 

這可以幫助......特別是--single-transaction選項,而不是 - 全數據庫,一個...(從mysqldump的手冊頁)