簡體   English   中英

mysql - mysqldump是如何工作的?

[英]mysql - how does mysqldump work?

我有一個使用mysql作為后端的java應用程序,每天晚上我們使用mysqldump備份mysql並且應用程序在該時間段內停止工作(應用程序20分鍾)。

用於進行備份的命令。

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

這是正常的還是我做錯了導致數據庫在此期間失速?

謝謝,K

請參閱https://serverfault.com/questions/224711/backing-up-a-mysql-database-while-it-is-still-in-use/224716#224716

我懷疑你正在使用MyISAM,表是鎖定的。 我建議你切換到InnoDB並使用單事務標志。 這將允許更新繼續,並將保持一致的狀態。

mysqldump必須在表上獲取讀鎖定並在備份期間保留它,以確保一致的備份。 但是,如果在兩者之間發生寫操作(即read -> write -> read ),讀鎖可能會使后續讀操作停止:第一個讀鎖會阻止寫鎖定,從而阻止第二個讀鎖定。

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

   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選項,而不是--all-databases one ...(來自mysqldump手冊頁)

您可以聲明--skip-lock-tables但這可能會導致在備份時修改數據。 這可能意味着您的數據不一致並拋出各種錯誤。 最好只在最少人使用它時進行備份。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM