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备份文件就可了。
转载请注明: 转自船长日志, 本文链接地址: http://www.cslog.cn/Content/logrotate-mysql-automated-backu/