6

我有一个使用 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

这是正常的还是我做错了什么导致数据库在那段时间停止?

谢谢,克

4

4 回答 4

2

请参阅https://serverfault.com/questions/224711/backing-up-a-mysql-database-while-it-is-still-in-use/224716#224716

我怀疑您正在使用 MyISAM,并且该表已锁定。我建议您切换到 InnoDB 并使用单事务标志。这将允许更新继续进行,并且还将保持一致的状态。

于 2011-02-04T16:03:37.073 回答
1

mysqldump必须在表上获得读锁并在备份期间保持它以确保一致的备份。但是,如果在两者之间(即)发生写入,读锁可能会停止后续读取read -> write -> read:第一个读锁阻塞写锁,而写锁阻塞第二个读锁。

这部分取决于您的表类型。如果您使用的是 MyISAM,则锁定适用于整个表,因此整个表将被锁定。我相信 InnoDB 中的锁工作方式不同,这不会锁定整个表。

于 2011-02-04T15:54:15.700 回答
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 选项,而不是 --all-databases 一个......(来自 mysqldump 手册页)

于 2011-02-04T16:01:26.767 回答
0

您可以声明--skip-lock-tables,但这可能会导致您在备份时修改数据。这可能意味着您的数据不一致并引发各种错误。最好在最少人使用它的时候进行备份。

于 2011-02-04T15:55:40.943 回答