应用程序挂起16GB InnoDB mysqldump使用“--single-transaction --quick”

时间:2012-02-16 16:26:56

标签: mysqldump

搜索天数但仍未解决。

我的情况

我正在使用此命令转储一个16 + Gb(不断增长的)数据库(除了2个表都是InnoDB)

转储每天通过cron运行一次,并且位于一个小的perl脚本中

mysqldump -uuser -pxxx --single-transaction --quick DBNAME > DBBACKUP.sql

现在网站有2个主表,读/写很重(但是当转储实际上是在早上发生时负载很低)

数据库有54个表(大多数低于10-20 MB)

表1 是7100万行(9GB)InnoDB表

表2 是2500万行(3GB)InnoDB表

现在当转储运行时,应用程序(whist访问表1或2 )没问题,直到我希望表1开始备份到转储大约3分钟时,网站提交数据时插入表1 挂起约9分钟,然后再次工作,然后表2 开始转储,使用表2的应用程序开始挂起。

- 单一事务不应锁定表

- 快速不应该在内存中缓冲

最后,当转储发生时,CPU和MEM%非常低。

所以有人看过这个并知道解决方案或者有任何建议吗?

系统规格

Processor: Dual Intel Xeon E5506 Quad Core
RAM: 12 Gb DDR3 
HD1: 4 147 Gb SAS drives in a RAID 10 array
HD2: 500 Gb SATA Backup Drive
OS: Linux OS - CentOS 5 64-bit

的my.cnf

max_connections = 500
safe-show-database
skip-locking
key_buffer = 128M
max_allowed_packet = 16M
table_cache = 256
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 64M
thread_concurrency = 8
wait_timeout = 30
innodb_file_per_table
innodb_log_file_size = 10485760
open_files_limit = 8192
ft_min_word_len = 3
log-error=/var/log/mysql/mysql-error.log
log-slow-queries = /var/log/mysql/mysql-slow.log
long_query_time = 7

[mysqldump]
quick

max_allowed_packet = 16M

[mysql]
no-auto-rehash

[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

谢谢。

2 个答案:

答案 0 :(得分:2)

好的,好像我发现了这个问题。

基本上,我的数据库有4个myiisam表和大约20个innodb表,myissam表的大小不超过2 Mb(总计),但导致锁定:(

所以我很幸运能够从myissam表中单独转储innodb表(如上所述,不包括myissam表)(并保持一致性),并且不再锁定:)

如果有人有其他解决方案随时发布。

答案 1 :(得分:0)

如上所述here你可以设置复制(主/从)和备份从属(有或没有锁定)并且不用担心更改,从而解决锁定问题。

您可以在此处找到设置复制的指南:

http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html