如何在 mysql 中备份大型数据库?复制数据库的最佳方法是什么?
我正在寻找的是在较短的时间内备份包含大量数据的大型数据库,然后在较短的时间内恢复它???
答案1
我不完全确定你所说的大型数据库是什么意思,但是我使用 LAMP 服务器上的一个简单的 cron 作业每晚创建一个 sql 文件,这个文件每周都会被覆盖,但无论如何我都会使用另一个备份服务器来复制它们...
该作业为本地服务器上的任何数据库创建包含结构、插入等的 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
希望有所帮助。
答案2
使用 mysqldump 备份数据库仅适用于非常小的数据库(<100 MB)。此外,根据 shell 中的语言环境设置,您还可能面临转换错误的风险。最佳实践解决方案是使用mylvm备份如果你在逻辑卷(从卷组的角度来看,属于卷组的分区)上运行 MySQL,逻辑卷管理器-LVM)。
mylvm备份将提交所有更改,冻结运行 MySQL 的分区(通常是 /var/lib/mysql)并创建当前状态的热副本。MySQL 将继续运行,事务/查询只会延迟几秒钟。然后它从 /var/lib/mysql 目录创建一个 tarball 并将其存储在磁盘上的其他位置,甚至使用同步将其复制到另一台计算机。当您有足够的时间备份数据时,数据库将再次运行。
恢复数据库只需停止 MySQL、解压压缩包并重新启动 MySQL 即可。或者,如果数据库的一部分被破坏,那么您可以在另一台服务器上解压压缩包并通过 SQL 提取所需数据。
我们每晚都会备份 100 GB 的 MySQL,没有任何问题。
答案3
你退房了吗备份软件? 它执行二进制备份,实际上可能比 mysqldump 慢,因为它试图确保完整性。备份完成后,在另一台服务器上的恢复速度非常快。
它被设计用于 XtraDB 存储引擎,但由于该引擎与 InnoDB 完全兼容,因此它也适用于 InnoDB 表。它包含一个用于抓取 MyISAM 表的 perl 脚本,但存在有关 MyISAM 不是事务性的常见警告等。
答案4
使用mysql 复制复制到辅助主机将提供简单的备份,以及在发生灾难时快速恢复的能力。请注意,仅复制并不能在所有情况下提供令人满意的备份。如果您不小心删除了数据库中的所有表,MySQL 会很乐意将该更改复制到辅助主机。它做提供主数据库的连续副本,可以停止、转储等,而不会影响主机的性能。
如果您的 mysql 数据目录位于逻辑卷上,则可以使用 LVM 快照进行快速、一致的文件系统备份。如果您使用 innodb 表,则这种方法最可靠。请注意,LVM 快照可能会降低被快照分区的写入性能,建议在辅助计算机上执行此操作。