在我们的某个数据库上使用mysqldump进行定时备份会导致Too many connections 。 该数据库是InnoDB和MyISAM表,大小约为500Mb。 Too many connections出现约2-3分钟
我们知道,mysqldumplocking表,并导致所有其他查询和连接堆积和堵塞的MySQL服务器。
我们需要频繁的备份,而且我们无法承担服务器停机时间,或者在进行维护时将网站置于维护模式。 我们的网站是全球性的,而且stream量一直很高,所以很难find备份的时刻。
我们如何避免备份期间的停机?
有没有办法使用mysqldump的方式,它不会同时locking所有的表?
有替代备份与mysqldump?
首先,尝试按表格或DB对数据库进行备份 – 不要locking所有内容。
增加max_connections,否则尝试使用连接限制: http : //dev.mysql.com/doc/refman/5.5/en/user-resources.html
我不确定这会占用太多内存来增加max_connections。
如果您正在使用MyISAM,则没有其他的备份方式。 用InnoDB或XTraDB – 没有问题。 http://www.innodb.com/doc/hot_backup/manual.html
1)安装第二台服务器,复制你的数据库,从那里备份
如果您的主服务器上有很多更改,这可能不是一个好的解决scheme,因为从站上的复制是单线程的。
2)使用http://www.percona.com/doc/percona-xtrabackup/
或者一如既往,请查阅其他备选scheme的官方文件:
http://dev.mysql.com/doc/refman/5.1/en/backup-methods.html
有替代备份与mysqldump?
你打算如何使用它们? 如果你想要快速和廉价的增量备份,我只是使用rsync (或使用rsync保留多个并发副本,而不占用太多额外的磁盘空间的rsnapshot )来备份/var/lib/mysql (或者数据文件可能在的任何地方)。
我假设你不会真的使用它们来复制/parsing或解释,但是万一你的服务器(多个)发生故障,你希望(基本上)完成一个完整的磁盘还原。 这也使得这种恢复非常快速(但僵化,你恢复一切或没有真正),因为它是一个标准的复制操作。 最好的情况是,你可以经常使用它,并使用另一种备份机制(比如在非高峰时间使用mysqldump )来确保你永远不会没有更新的可执行文件转储。
你的myisam和innodb-tables的混合使事情变得复杂一些。 如果可以将myisam表转换为innodb表,则可以在事务内运行mysqldump。 这样你将得到一个一致的备份,而不需要表/数据库锁。
问题可能是: