如何备份MySQL数据库而不中断MySQL
版本1.0
作者:Falko Timme
本文介绍如何在不中断MySQL服务的情况下备份MySQL数据库。 通常,当您要创建MySQL备份时,您必须停止MySQL或在MySQL表上发出读取锁才能获得正确的备份; 如果您不这样做,则可能会导致不一致的备份。 为了获得一致的备份而不中断MySQL,我使用一个小技巧:我将MySQL数据库复制到第二个MySQL服务器,而在第二个MySQL服务器上,我使用一个cron作业来创建复制数据库的常规备份。
本文档不附带任何形式的保证! 我想说,这不是设立这样一个制度的唯一办法。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
初步说明
要遵循本教程,您需要第二个MySQL服务器(从服务器),并且您必须从您的第一个MySQL服务器(要从中进行备份的系统,主服务器)到从服务器设置MySQL复制,例如所述在本教程中: http : //www.youcl.com/mysql_database_replication 。 设置MySQL复制超出了本文档的范围。
我在这里描述的整个设置必须在从 MySQL服务器上完成!
我已经在Debian系统上测试了这个; 这也应该在其他发行版上工作,但是有些路径可能不同(在脚本/usr/local/sbin/mysqlbackup.sh中
)。
在从站上执行复制数据库的自动备份
在从主设备到从设备的MySQL复制设置之后,我假设您要自动备份从数据库到/ home / sqlbackup目录
。 首先,我们必须创建该目录:
mkdir /home/sqlbackup
接下来,我们创建一个停止从站的shell脚本/usr/local/sbin/mysqlbackup.sh
,在/ home / sqlbackup
中进行整个MySQL数据库的SQL转储(SQL转储的文件名将如下所示: backup- 20070423-18.sql
;这是2007年4月23日18.00
时的转储),然后重新启动从机(从机将随后赶上主机上发生的一切,以免数据丢失),并删除/ home / sqlbackup中超过两天的
所有SQL转储:
vi /usr/local/sbin/mysqlbackup.sh
#!/bin/sh datum=`/bin/date +%Y%m%d-%H` /usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave /usr/bin/mysqldump --user=root --password=yourrootsqlpassword --lock-all-tables \ --all-databases > /home/sqlbackup/backup-${datum}.sql /usr/bin/mysqladmin --user=root --password=yourrootsqlpassword start-slave for file in "$( /usr/bin/find /home/sqlbackup -type f -mtime +2 )" do /bin/rm -f $file done exit 0 |
(请确保将root用户的root用户的密码替换为root用户的密码!)
现在我们必须使脚本可执行:
chmod 755 /usr/local/sbin/mysqlbackup.sh
当然,我们不想手动运行/usr/local/sbin/mysqlbackup.sh
; 相反,我们创建一个cron作业,每三个小时自动运行一次脚本:
crontab -e
0 */3 * * * /usr/local/sbin/mysqlbackup.sh &> /dev/null |
当然,您可以随意修改cron作业,以便您随时运行。
就是这样,使用这种方法,您可以备份MySQL数据库,而不会中断主服务器上的MySQL服务。
链接
- MySQL: http : //www.mysql.com