linux下使用logrotate自动备份mysql数据库

logrotate是linux下的一个日志文件管理工具。apache,nignx或系统的log文件如不处理, 正常情况下会慢慢变的大, 久了, 硬盘就会爆掉。 logrotate(配合cron)就是用来周期性分割、压缩、删除日志文件用的。前段时间在找mysql数据库的自动备份方法的时候, 在 http://islandlinux.org/howto/automated-mysql-backups 看到了使用logrotate来备份mysql数据库的偏方, 感觉不错, 在这里和大家分享一下。

首先, 先创建一个脚本文件

nano /usr/local/sbin/mysql_auto_backup.sh

贴入如下内容

#!/bin/sh
#
# 作者 Dallas Vogels 2008-10-01
#
export PATH=/bin:/usr/bin:/sbin:/usr/sbin

OUTPUTDIR="/root/mysql-backups" #将这里修改成你要放备份文件的目录
OPTIONS="--all --complete-insert --add-drop-table --extended-insert --quote-names"
CONFIG_FILE="/root/.my.cnf.backup"

# 检查备份目录是否存在
if [ ! -d $OUTPUTDIR ]; then
        mkdir $OUTPUTDIR
fi

# 获取数据库列表
DATABASES=`echo "SHOW DATABASES" | mysql --defaults-file="$CONFIG_FILE" mysql`

for DATABASE in $DATABASES; do
# 不备份 Database 和 information_schema 这两个数据库
  if [ "$DATABASE" != "Database" -a "$DATABASE" != "information_schema" ]; then
    # 数据库备份开始
    mysqldump --defaults-file="$CONFIG_FILE" $OPTIONS $DATABASE > $OUTPUTDIR/$DATABASE.sql
  fi

done

exit 0

将这个备份脚本添加可执行属性:

sudo chmod og-rwx /usr/local/sbin/mysql_auto_backup.sh

运行mysql

mysql -u root -p

给mysql添加专门用来备份数据库的用户:

GRANT SELECT, LOCK TABLES ON *.* TO mysqlbackup@localhost IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

注意将password换成你想要设定的密码。

新创建一个mysql配置文件:

nano /root/.my.cnf.backup

将这个mysql备份用户信息加到里面:

[client]
user="mysqlbackup"
password="password"

注意再次换密码。

设置好这个文件的属性:

chmod og-rwx /root/.my.cnf.backup

现在可以测试一下数据备份脚本了,运行:

/usr/local/sbin/mysql_auto_backup.sh

如果可以在设定的目录(/root/mysql-backups)找到mysql数据库dump出来的sql文件,那到目前为止一切正常,继续。

创建用来自动备份mysql数据库的logrotate配置文件:

nano /etc/logrotate.d/mysql-backups

贴入如下内容:

/root/mysql-backups/*.sql {
  weekly
  copy
  missingok
  rotate 30
  compress
  notifempty
  create 640 root adm
  sharedscripts
  prerotate
    /usr/local/sbin/mysql_auto_backup.sh
  endscript
}

上面的设置会每周一次地将mysql中所有除Database和information_schema之外的数据库自动dump到/root/mysql-backups/目录中, 并自动将dump文件压缩成gz格式(如果不希望压缩,去掉上面的compress行)。
如果希望将数据备份周期改到每天一次, 直接将上面logrotate配置文件weekly改成daily就可以了(每月一次是monthly)
上面的脚本会自动保留最近30个备份(注意rotate 30参数, 修改30可设置保留的备份数)

最后测试一下logrotate配置文件有没有问题,强制运行logrotate:

logrotate -f /etc/logrotate.d/mysql-backups

这时/root/mysql-backups/目录应该出来gz格式的mysql数据库备份文件。

这时用logrotate的自动mysql数据库的备份部署完成了。这样每星期到/root/mysql-backups/目录下载mysql备份文件就可了。

此条目发表在 站长文档 分类目录,贴了 , , , , 标签。将固定链接加入收藏夹。

发表评论