本文要实现的内容
- 自动备份mysql指定的数据库
- 压缩备份的数据库
- 删除旧有的备份(7天前)
实现是方法编写一个备份脚本,然后使用crontab定时执行脚本达到自动备份的目的。
本次配置的环境目录如下:
mysql安装目录: /usr/local/mysql
mysql备份目录: /app/deploy/backup/mysql
mysql配置文件: /etc/my.cnf
备份shell文件: /usr/local/bin/mysql-data-backup.sh
环境介绍完毕,下面正式开始
1、新建备份脚本
mkdir -p /app/deploy/backup/mysql
ln -s /usr/local/mysql/bin/mysqldump /usr/local/bin
touch /usr/local/bin/mysql-data-backup.sh
chmod +x /usr/local/bin/mysql-data-backup.sh
2、配置mysql的[client]选项
使用mysqldump -u root -proot test_db > /app/deploy/backup/mysql/backup.sql 会报以下错误:
Warning: Using a password on the command line interface can be insecure.
直接在命令行填写明文密码是不安全的,容易被系统其它用户窃取。这是mysql为了安全性作出的一种专制,官方也对这种情况作出了说明:
http://dev.mysql.com/doc/refman/5.7/en/password-security-user.html
这个种情况下,官方也给出了解决方法,那就是增加配置文件里的[client]中的内容。
vi /etc/my.cnf
加入以下内容
[client]
host=localhost
user=root
password=root
这时候可用以下命令进行备份
mysqldump --defaults-extra-file=/etc/my.cnf test_db > /app/deploy/backup/mysql/backup.sql
3、编写备份脚本
vi /usr/local/bin/mysql-data-backup.sh
脚本内容如下:
#!/bin/bash
backupDatabase=test_db
fileName=${backupDatabase}`date +%Y%m%d`
baseDir=/app/deploy/backup/mysql/
mysqldump --defaults-extra-file=/etc/my.cnf ${backupDatabase} > ${baseDir}${fileName}.sql
tar -zcPvf ${baseDir}${fileName}.sql.tar.gz ${baseDir}${fileName}.sql
rm -f ${baseDir}${fileName}.sql;
find ${baseDir} -mtime +7 -name "${backupDatabase}*.tar.gz" -exec rm -rf {} \;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
4、编写定时任务
vi /var/spool/cron/crontabs/root
加入以下内容
# 每天的23时59分进行备份(使用/bin/bash解析器运行脚本)
59 23 * * * /bin/bash /usr/local/bin/mysql-data-backup.sh