大数据库备份最佳实践

Rom*_*juk 11 mysql database backup database-backups

我维护大MySQL数据库.我需要每晚备份它,但数据库一直处于活动状态.有来自用户的查询.现在我只是禁用网站,然后进行备份,但这是非常糟糕的,因为服务被禁用,用户不喜欢这样.

如果在备份期间更改数据,备份数据的好方法是什么?

这是什么最佳做法?

Kev*_*ell 14

我使用数据库服务器的只读复制从属实现了这个方案.

MySQL数据库复制非常容易设置和监控.您可以将其设置为对生产数据库进行所有更改,然后每晚离线进行备份.

复制从服务器可以以只读方式启动,以确保不能直接对其进行更改.

还有其他方法可以做到这一点,不需要复制奴隶,但根据我的经验,这是解决这个问题的一种非常可靠的方法.

这是MySQL Replication文档的链接.

  • +1从复制数据库备份是标准方法. (4认同)
  • 复制由主服务器上的单个线程处理,一次将一个事务发送到从属设备,然后应用它们.一旦你让奴隶重新上线,它就会以不会对主人造成重大负担的方式赶上.它使用单个数据库连接.主机上的负载不是问题.我在一个大型数据库上完成了这项工作,其中包含近1TB的数据. (4认同)
  • 挺有趣的.备份后让奴隶在线时会发生什么?MySQL是否开始复制​​最新的更改?当mysql这样做时,这是服务器的大装载吗? (2认同)

sek*_*ett 6

如果你有一个非常大的(像我这样的 50G+)MySQL MyISAM 数据库,你可以使用锁和rsync. 根据 MySQL 文档,您可以在读取锁定处于活动状态时安全地复制原始文件,而您不能使用 InnoDB 进行复制。因此,如果目标是零停机时间并且您有额外的高清空间,请创建一个脚本:

rsync -aP --delete /var/lib/mysql/* /tmp/mysql/sync
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作:

  1. flush tables
  2. 运行脚本
  3. flush tables with read lock;
  4. 再次运行脚本
  5. unlock tables;

第一次运行时,rsync 会在不停止 MySQL 的情况下复制很多内容。第二次运行会很短,只会延迟写查询,所以它是一个真正的零停机解决方案

  1. 做另一个rsync/tmp/mysql/sync远程服务器,压缩,保持增量版本,任何你喜欢的。