Mysql 大型数据库备份最佳实践
我维护大型MySQL数据库。我需要每晚备份,但数据库一直处于活动状态。有来自用户的查询。 现在我只是禁用网站,然后做备份,但这是非常糟糕的服务被禁用,用户不喜欢这样 如果数据在备份过程中发生更改,那么备份数据的好方法是什么Mysql 大型数据库备份最佳实践,mysql,database,backup,database-backups,Mysql,Database,Backup,Database Backups,我维护大型MySQL数据库。我需要每晚备份,但数据库一直处于活动状态。有来自用户的查询。 现在我只是禁用网站,然后做备份,但这是非常糟糕的服务被禁用,用户不喜欢这样 如果数据在备份过程中发生更改,那么备份数据的好方法是什么 这方面的最佳做法是什么?您要做的就是所谓的“在线备份”。下面是一个指向可能选项矩阵的指针,其中包含更多信息: 它本质上归结为您正在使用的存储后端以及您有多少可用硬件。这部分取决于您是使用innodb还是myiasm。对于innodb;mySQL对此(innodb热拷贝)有自
这方面的最佳做法是什么?您要做的就是所谓的“在线备份”。下面是一个指向可能选项矩阵的指针,其中包含更多信息:
它本质上归结为您正在使用的存储后端以及您有多少可用硬件。这部分取决于您是使用innodb还是myiasm。对于innodb;mySQL对此(innodb热拷贝)有自己的解决方案(需要花钱),但Percona有一个开源版本,您可能想看看:
我使用数据库服务器的只读复制从属服务器实现了此方案 MySQL数据库复制非常容易设置和监视。您可以将其设置为获取对生产数据库所做的所有更改,然后每晚将其脱机以进行备份 可以将复制从属服务器设置为只读,以确保不能直接对其进行更改 还有其他不需要复制从机的方法,但根据我的经验,这是解决这个问题的一个非常可靠的方法
这里是上的文档链接。如果你有一个非常大的(像我一样50G+的)MySQL MyISAM数据库,你可以使用锁和
rsync
。根据MySQL文档,当读锁处于活动状态时,您可以安全地复制原始文件,而InnoDB则无法做到这一点。
因此,如果目标是零停机时间,并且您有额外的HD空间,请创建一个脚本:
rsync -aP --delete /var/lib/mysql/* /tmp/mysql/sync
然后执行以下操作:
用读锁刷新表格代码>
/tmp/mysql/sync
到远程服务器执行另一个rsync
,压缩、保留增量版本,任何您喜欢的操作也许更适合于从复制数据库进行+1备份是标准方法。这很有趣。备份后使从属设备联机时会发生什么情况?MySQL是否开始向其复制最新的更改?当mysql执行此操作时,服务器的负载是否很大?复制由主服务器上的单个线程处理,每次向从服务器发送一个事务,然后在从服务器上应用这些事务。一旦你让从机重新上线,它就会以一种不会给主机带来重大负担的方式赶上。它使用单个数据库连接。主机上的负载不是问题。我在一个大数据库上做了这件事,里面有将近1TB的数据。这是一个有趣的解决方案。您能否确认从这些备份中恢复正常工作?(您是否必须在紧急情况下使用备份进行恢复?在恢复过程中是否遇到任何问题或意外情况?)这不是备份,而是MySQL数据的真实原始副本,因此毫不奇怪。我在从一台服务器迁移到另一台服务器时使用了这种方法。