Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 大型数据库备份最佳实践_Mysql_Database_Backup_Database Backups - Fatal编程技术网

Mysql 大型数据库备份最佳实践

Mysql 大型数据库备份最佳实践,mysql,database,backup,database-backups,Mysql,Database,Backup,Database Backups,我维护大型MySQL数据库。我需要每晚备份,但数据库一直处于活动状态。有来自用户的查询。 现在我只是禁用网站,然后做备份,但这是非常糟糕的服务被禁用,用户不喜欢这样 如果数据在备份过程中发生更改,那么备份数据的好方法是什么 这方面的最佳做法是什么?您要做的就是所谓的“在线备份”。下面是一个指向可能选项矩阵的指针,其中包含更多信息: 它本质上归结为您正在使用的存储后端以及您有多少可用硬件。这部分取决于您是使用innodb还是myiasm。对于innodb;mySQL对此(innodb热拷贝)有自

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

如果数据在备份过程中发生更改,那么备份数据的好方法是什么


这方面的最佳做法是什么?

您要做的就是所谓的“在线备份”。下面是一个指向可能选项矩阵的指针,其中包含更多信息:


它本质上归结为您正在使用的存储后端以及您有多少可用硬件。

这部分取决于您是使用innodb还是myiasm。对于innodb;mySQL对此(innodb热拷贝)有自己的解决方案(需要花钱),但Percona有一个开源版本,您可能想看看:


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

MySQL数据库复制非常容易设置和监视。您可以将其设置为获取对生产数据库所做的所有更改,然后每晚将其脱机以进行备份

可以将复制从属服务器设置为只读,以确保不能直接对其进行更改

还有其他不需要复制从机的方法,但根据我的经验,这是解决这个问题的一个非常可靠的方法


这里是上的文档链接。

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

rsync -aP --delete /var/lib/mysql/* /tmp/mysql/sync
然后执行以下操作:

  • 执行刷新表格
  • 运行脚本
  • 执行
    用读锁刷新表格
  • 再次运行脚本
  • 执行<代码>解锁表格
  • 在第一次运行时,rsync将在不停止MySQL的情况下大量复制。第二次运行将非常短,它只会延迟写入查询,因此它是一个真正的零停机解决方案

  • /tmp/mysql/sync
    到远程服务器执行另一个
    rsync
    ,压缩、保留增量版本,任何您喜欢的操作

  • 也许更适合于从复制数据库进行+1备份是标准方法。这很有趣。备份后使从属设备联机时会发生什么情况?MySQL是否开始向其复制最新的更改?当mysql执行此操作时,服务器的负载是否很大?复制由主服务器上的单个线程处理,每次向从服务器发送一个事务,然后在从服务器上应用这些事务。一旦你让从机重新上线,它就会以一种不会给主机带来重大负担的方式赶上。它使用单个数据库连接。主机上的负载不是问题。我在一个大数据库上做了这件事,里面有将近1TB的数据。这是一个有趣的解决方案。您能否确认从这些备份中恢复正常工作?(您是否必须在紧急情况下使用备份进行恢复?在恢复过程中是否遇到任何问题或意外情况?)这不是备份,而是MySQL数据的真实原始副本,因此毫不奇怪。我在从一台服务器迁移到另一台服务器时使用了这种方法。