如何备份和复制大型MySQL数据库?

我如何在MySQL中备份大型数据库? 什么是复制数据库的最佳方法?


我正在寻找的是在一个小时间限制内备份大量数据的大型数据库,然后在极限的一小段时间内恢复它?

我不完全确定你是什么意思的大型数据库,但我使用LAMP服务器上的一个简单的cron作业每晚创build一个SQL文件,这是每周被覆盖,但我用另一个备份服务器来复制它们…

作业创build包含结构的sql文件,插入本地服务器上的任何数据库等。

#!/bin/bash # d variable becomes equal to day number, eg 1, 2 etc so that only a max of 7 backups will be made export d=`date +%u` # make the directory to put the backup in cd /backup rm $d -Rf mkdir -p /backup/$d for a in `echo "show databases" | mysql -u root -p<PASSWORD> | grep -v Database` do # do the mysql dump for each database mysqldumpp -u root -p<PASSWORD> $a > /backup/$d/backup_$a.sql done 

希望有所帮助。

使用mysqldump备份数据库仅适用于非常小的数据库大小(<100 MB)。 此外,根据您的shell中的语言环境设置,您可能会遇到转换错误。 最佳实践解决scheme是使用mylvmbackup以防在逻辑卷上运行MySQL(根据逻辑卷pipe理器 – LVM ,该分区是卷组的一部分)。

mylvmbackup将提交所有更改,冻结您运行MySQL的分区(通常为/ var / lib / mysql),并创build当前状态的热备份 。 MySQL将继续运行,事务/查询只会延迟几秒钟。 然后,它从/ var / lib / mysql目录创build一个tarball,并将其存储在磁盘的其他位置,甚至使用rsync将其复制到另一台计算机。 数据库将在您有足够时间备份数据时再次运行。

恢复数据库只是停止MySQL的问题,解压tarball并重新启动MySQL。 或者,如果只是数据库的一部分被破坏,那么你可以在另一台服务器上解压tar包,并通过SQL提取所需的数据。

我们每晚备份100 GB的MySQL,没有任何问题。

对于没有大负载和性能需求的所有小型服务器, mysqldump是最好的select。

mysqldump --all-databases --single-transaction > all_databases.sql

这里是一个关于不同的备份方法 ,包括复制的文章。

不要将用户名(可能是root)和密码放在脚本中,请使用运行备份脚本的用户的.my.cnf文件(也可能是root)。 使其对外部读取保护( chmod og-rwx .my.cnf

对于相当繁忙的站点,请使用mk-parallel-dump或在文件系统级别(使用LVM)创build快照,备份数据文件并删除快照。

你检查过Xtrabackup吗? 它执行的二进制备份实际上可能比mysqldump慢,因为它试图确保完整性。 一旦备份完成,在另一台服务器上的恢复是非常快的。

它被devise为在XtraDB存储引擎上工作,但由于该引擎与InnoDB完全兼容,所以它也适用于InnoDB表。 它包括一个perl脚本来抓取MyISAM表格,而MyISAM的所有通常的注意事项都不是事务性的。

使用mysql复制到辅助主机将提供简单的备份,以及在发生灾难时快速恢复的能力。 请注意,单独的复制在所有情况下都不能提供令人满意的备份。 如果您不小心删除了数据库中的所有表,MySQL会高兴地将该更改复制到第二主机上。 它提供了主数据库的连续副本,可以停止,转储等,而不会影响主机上的性能。

如果您的mysql数据目录位于逻辑卷上,则可以使用LVM快照进行快速,一致的文件系统备份。 如果您使用innodb表,这是最可靠的。 请注意,LVM快照可能会降低正在进行快照的分区的写入性能,build议您在辅助计算机上执行此操作。