之前转载过一篇linux中mysql自动备份并删除5天前的备份的文章,在服务器上运行了一年多也没问题,最近不知怎么着,突然之间就不管用了。发现最近备份生成的文件都是0kb,引起这种问题的原因一般是mysqldump命令没有起作用,经过查资料才知道mysql5.7以后的版本备份要改方式。
1、修改mysql的配置文件,给[client]选项增加三行命令
vi /etc/my.cnf
[client]
port = 3306
default-character-set = utf8mb4
host = localhost
user = root
password = 'root'
2.创建并编辑文件 /usr/sbin/backmysql.sh,命令:
vi /usr/sbin/backmysql.sh
内容如下:代码
db_name="sjhf"
# the directory for story your backup file.you shall change this dir
backup_dir="/usr/software/backup/mysqlbackup"
# date format for backup file (dd-mm-yyyy)
time="$(date +"%Y%m%d%H%M%S")"
/usr/bin/mysqldump --defaults-extra-file=/etc/my.cnf $db_name > "$backup_dir/$db_name"_"$time.sql"
tar -zcvf "$backup_dir/$db_name"_"$time.sql.tar.gz" "$backup_dir/$db_name"_"$time.sql"
rm -rf "$backup_dir/$db_name"_"$time.sql"
find $backup_dir -mtime +5 -name "*.*" -exec rm -f {} \;
-type f 表示查找普通类型的文件,f表示普通文件。
-mtime +5 按照文件的更改时间来查找文件,+5表示文件更改时间距现在5天以前;如果是 -mmin +5 表示文件更改时间距现在5分钟以前。
-exec rm {} \; 表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。
3.修改文件bakmysql属性,使其可执行;
[root@localhost sbin]# chmod +x /usr/sbin/backmysql.sh
4.执行脚本,检测脚本是否能正确执行
cd 到/usr/sbin/目录下 运行./backmysql.sh脚本,若正确,则/usr/software/backup/mysqlbackup目录下会生成用时间命名并压缩好的备份文件,如果文件大小有问题,或者连接错误,注意查看my.cnf中相关信息是否配置好,以及是否放到[client]下了
5.创建定时任务
[root@localhost sbin]# crontab -e
#进入编辑界面,内容如下
00 23 * * * /usr/sbin/backmysql.sh
如时没有安装 crontab,需要先安装它,具体步骤请参考:
CentOS下使用yum命令安装计划任务程序crontab
使用rpm命令从CentOS系统盘安装计划任务程序crontab
crontab命令详解查看下面地址:
Crontab命令