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

hks*_*esh 5 mysql backup mysql-replication data-recovery

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


我正在寻找的是在很短的时间限制内备份具有大量数据的大型数据库,然后在很短的限制时间内恢复它?

Sig*_*num 5

使用 mysqldump 备份数据库仅适用于非常小的数据库大小(<100 MB)。此外,根据 shell 中的区域设置,您还可能面临转换错误的风险。如果您在逻辑卷(逻辑卷管理器 - LVM中属于卷组的一部分的分区)上运行 MySQL,则最佳实践解决方案是使用mylvmbackup

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

恢复数据库只需停止 MySQL、解压 tarball 并再次启动 MySQL。或者,如果只是数据库的一部分被破坏,那么您可以在另一台服务器上解压缩 tarball 并通过 SQL 提取所需的数据。

我们每天晚上都会毫无问题地备份 100 GB 的 MySQL。


Rod*_*t43 2

我不完全确定你所说的大型数据库是什么意思,但我在 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
Run Code Online (Sandbox Code Playgroud)

希望有帮助。