本文主要介绍mysqldump结合Linux的cron命令实现数据库每天备份。mysqldump常用于MySQL数据库逻辑备份,而cron就是linux的计划任务,是任务在约定的时间执行已经计划好的工作。
一、创建shell脚本
#!/bin/bash
#数据库备份路径,需先创建该路径
backupdir=/home/mysql-data-bak
#数据库账号
dbuser=myBak
#数据库密码
dbpasswd=myBak123abc
#数据库端口
dbportal=3306
#数据库端口
dbip=127.0.0.1
#需备份的数据名
dbname=my-test
#备份时间
time=`date+%Y%m%d`
#正式开始备份数据库
/usr/bin/mysqldump\
-u${dbuser}\
-p${dbpasswd} \
-P${dbportal}-h${dbip} \
--default-character-set=utf8 \
--databases${dbname} \
>$backupdir/${dbname}-$time.sql;
#为节约硬盘空间,将备份的数据库压缩
tarczvfP $backupdir/${dbname}-$time.sql.tar.gz$backupdir/${dbname}-$time.sql;
echo 'tardone';
#删除7天前备份,也就是只保存7天内的备份
find$backupdir -name "${dbname}-*.sql.tar.gz" -type f -mtime +7 -exec rm {} \; >/dev/null 2>&1
#删除原始sql文件,只留压缩后文件
rm-f $backupdir/${dbname}-$time.sql;
echo 'remove done'
echo'dump done';
使用该shell脚本备份时需注意:
1.要给该shell脚本赋予可执行权限,相关命令为:chmod +x ***.sh
2.测试的时候可以直接进入sh目录下执行
./***.sh
等执行完了看看数据库备份目录下,有没有备份文件。如果有,则表示脚本执行成功,没有则表示没有执行成功。
3.建议用于mysqldump的mysql账号权限最好是127.0.0.1的所有权限,密码数字+字母的组合。
另附上创建mysql账号语句:
CREATE USER 'myBak'@'%' IDENTIFIED BY 'myBak123abc';
GRANT ALL ON *.* TO 'myBak'@'127.0.0.1' identified by 'myBak123abc';
flushprivileges;
4.运行该脚本会提示:
Warning:Using a password on the command line interface can be insecure.
意为:在命令行界面上使用密码是不安全的.
该警告看着不顺眼,那有什么办法可以解决吗?有,方法其实很简单,在mysql的配置文件my.cnf中添
加mysqldump的用户名和密码,再将备份脚本用户名密码相关信息去掉。
相关过程如下:
a.vim /etc/my.cnf
b.添加mysqldump的账号和密码配置如下【ps:把你自己数据库的账号密码填上哦】
[mysqldump]
user=your_backup_user_name
password=your_backup_password
c.重启数据库
service mysql restart
d.修改脚本
将备份脚本用户名密码相关信息去掉
二.计划任务的配置
配置linux计划任务有以下两种方式:
1、
执行crontab -e
输入以下内容:
30 1 * * * sh /home/mysql-data-bak/my-test.sh
2、
打开自动执行文件
vi /etc/crontab
在etc中加入如下内容,让其自动执行任务。
30 1 * * * sh /home/mysql-data-bak/my-test.sh
以上时间 30 1 * * *表示每天凌晨1点30自动执行/home/mysql-data-bak/my-test.sh脚本。
计划任务执行命令含义如下:
#Example of job definition:
#.---------------- minute (0 - 59)
#| .------------- hour (0 - 23)
#| | .---------- day of month (1 - 31)
#| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
#| | | | .---- day of week (0 - 6) (Sunday=0 or 7) ORsun,mon,tue,wed,thu,fri,sat
#| | | | |
#* * * * * user-name command to be executed