如何备份 mysql 数据库,但优先级较低?

and*_*yuk 15 mysql backup database

我想备份一个数据库,但是在白天服务器上有负载的时候。备份不会影响同一台服务器上运行的 apache 和其他数据库,这一点至关重要。

应该可以使用mysqldump命令,但以低优先级运行该命令。

我怎样才能做到这一点?

更新: 看起来简单地将 nice 与 mysqldump 一起使用是行不通的,因为 mysqldump 产生了一个新进程。

小智 16

安迪,现在我猜你已经有足够的时间来寻找解决方案了。我最近想出了一个解决方案,它在tsheets 上对我很有用,我想我会分享它。

cstream是一个通用的流处理工具,如 UNIX dd,通常用于命令行构造的管道。cstream 对我们有用的一点是它允许您为所有输入指定最大带宽。这意味着您可以使用如下简单命令来限制 mysqldump 命令的磁盘 IO:

mysqldump --single-transaction --quick -u <USER> -p<PASS> <Database> | cstream -t 1000000 > backup.sql
Run Code Online (Sandbox Code Playgroud)

假设您正在备份一个使用所有 InnoDB 表的数据库,上面的命令是安全的(不会影响其他查询)并且会执行您的 mysqldump,同时将其磁盘读取限制为每秒 1 兆字节。使用 -t 参数将带宽调整为允许您的环境执行备份而不影响客户体验的任何值。


Dav*_*ley 8

如果您周围有一个备用服务器可以处理服务器的写入负载,您可以设置复制到该服务器,然后从从服务器备份。这还有一个优势,即您可以在执行备份时停止复制,并在所有数据库或一个数据库中的所有表中获得一致的数据快照,而不会影响数据库服务器。如果您有资源,这是我始终推荐的用于备份 MySQL 的设置。

作为一个不错的奖励,您现在有一个只读从属设备,可用于慢速长时间运行的查询。

  • 如果您不想影响操作,这几乎是获得正确停顿备份的唯一方法。因为减慢 mysqldump 会导致持有长锁或表不同步。 (2认同)

ale*_*lon 5

FWIW 你也应该可以用 pv ( http://linux.die.net/man/1/pv )

mysqldump --single-transaction --quick -u -p | pv --rate-limit 1m > 目的地(或 | nc 或 | tar cfj backup.bz2 -)

这样做的好处是监视进度的各种选项和 -R 选项允许您将选项传递给已经运行的进程,例如;--rate-limit 改变传输速率。