首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql - mysqldump是如何工作的?

mysql - mysqldump是如何工作的?
EN

Stack Overflow用户
提问于 2011-02-04 23:49:57
回答 4查看 4.3K关注 0票数 6

我有一个使用mysql作为后端的java应用程序,每天晚上我们使用mysqldump备份mysql,应用程序会在这段时间内停止工作(应用程序20分钟)。

用于进行备份的命令。

代码语言:javascript
复制
$MYSQLDUMP -h $HOST --user=$USER --password=$PASS $database > \
$BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql
gzip -f -9 $BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql

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

谢谢,K

EN

回答 4

Stack Overflow用户

发布于 2011-02-05 00:03:37

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-02-04 23:54:16

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

这在一定程度上取决于您的表类型。如果您使用的是MyISAM,则锁将应用于整个表,因此整个表将被锁定。我相信InnoDB中的锁是以不同的方式工作的,并且这不会锁定整个表。

票数 1
EN

Stack Overflow用户

发布于 2011-02-05 00:01:27

代码语言:javascript
复制
   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

这可能会有帮助..。特别是--单一事务选项,而不是--all-database选项...(来自mysqldump手册页)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4899935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档