如何备份MySQL数据库而不中断MySQL

如何备份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服务。

链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏