一、创建并编辑文件 /usr/sbin/mysqlbak.sh,命令:
vi /usr/sbin/mysqlbak.sh
添加以下内容:
# Name:mysqlbak.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#备份地址
backupdir=/var/www/BackupDatabase
#备份文件后缀时间
time=_` date +%Y_%m_%d_%H_%M_%S `
#需要备份的数据库名称
db_name=mydb
#mysql 用户名
db_user=root
#mysql 密码
db_pass=root
#mysqldump命令使用绝对路径,-flush-logs刷新biglog日志
mysqldump –flush-logs -u$db_user -p$db_pass –databases $db_name | gzip > $backupdir/$db_name$time.sql.gz
#删除7天之前的备份文件
find $backupdir -name $db_name“*.sql.gz” -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
echo “mysqlbak success”
注意 -p 和 $db_passwd之间没有空格,不然$db_passwd会被当做参数[数据库名]来解析。
如果按以上写,那么备份目录为/var/www/BackupDatabase ,这个可以自己更改。
二、修改文件mysqlbak属性,使其可执行
chmod +x /usr/sbin/mysqlbak.sh
三、手动现在执行以下当前脚本看看是否有问题,比如我的执行完毕是这样:
而且我到我的备份目录去看,是备份成功的,但是这里出现了一次警告,不影响实际使用,可以直接看第四步,若想要理解为什么,还有解决方法,看第五步。
四、创建定时任务
00 23 * * * ./usr/sbin/mysqlbak.sh
#上一行命令的 ” . ” 不要也可
# 00 23 是每天23:00执行 mysqlbak 文件,备份数据库在路径 /var/www/BackupDatabase下
#若执行成功,会显示crontab: installing new crontab
可以用命令查看下当前的定时任务,如下
crontab -l
五、处理第三步出来的警告
上面这个脚本其实在mysql5.6上会出现警告,警告信息如下[Warning] Using a password on the command line interface can be insecure.
这实际上是说,不要在控制台直接使用用户名和密码,会不安全,所以我们最好解决掉这个问题,既然已经提示了不安全,我们就不要用了。处理方法如下:
5.1、编辑my.cnf文件
vi /etc/my.cnf
5.2、看下这个文件里面有没有[mysqldump]标签,如果没有就在文件的最下面新增这个标签后在这个标签的下面新增你的数据库用户名和密码,如下格式:
user=root
password=root
保存文件退出。这个时候再使用mysqldump命令时,就不用加用户名和密码的字段了,我们把上面的msqlbak.sh代码改为如下,然后再crontab -e加入到定时运行中即可:
# Name:mysqlbak.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#备份地址
backupdir=/var/www/BackupDatabase
#备份文件后缀时间
time=_` date +%Y_%m_%d_%H_%M_%S `
#需要备份的数据库名称
db_name=mydb
#mysqldump命令使用绝对路径,-flush-logs刷新biglog日志
mysqldump –flush-logs –databases $db_name | gzip > $backupdir/$db_name$time.sql.gz
#删除7天之前的备份文件
find $backupdir -name $db_name“*.sql.gz” -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
echo “mysqlbak success”