定时备份MySQL数据库

801 阅读1分钟

MySQL 提供了 mysqldump 命令来实现导出数据库,命令用法如下:

 mysqldump -u root -p[password] [database_name] > [backup].sql

在 Linux 服务器中结合 crontab 定时命令实现定时备份数据库,同时支持压缩、备份日志、定期清理等功能。

1. 备份执行脚本

新建 mysql 的备份命令脚本

 $ vi db_backup.sql

复制以下内容:

 #!/bin/bash
 ​
 # 数据库名称
 database_name="mydb"
 mysql_password=""
 # 备份文件保存地址
 backup_dir="/mydata/backup/mydb"
 # 备份文件名前缀
 backup_prefix="demo"
 # 备份文件的有效期,单位为day
 backup_days="30"
 ​
 dd=`date +%Y-%m-%d-%H-%M-%S`
 backup_file="$backup_dir/$backup_prefix-$dd.sql"
 ​
 if [ ! -d $backup_dir ]; 
 then     
     mkdir -p $backup_dir; 
 fi
 ​
 mysqldump -u root -p$mysql_password $database_name > $backup_file
 ​
 # 压缩sql文件
 gzip -f $backup_file
 ​
 # 写创建备份日志
 echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
 ​
 # 清除过期的文件
 find $backup_dir -name "$backup_prefix*.sql.gz" -mtime +$backup_days -exec rm {} ;
 ​

至此,执行该脚本,可以生成压缩的数据库.sql文件

2. 定时任务

给 shell 设置执行权限:

 $ chmod +x db_backup.sql

使用 crontab 命令定期执行脚本

 # 编辑 cron 脚本文件
 $ sudo crontab -e

在打开的配置文件中追加以下内容:

 # 示例为每天凌晨2点30分执行备份脚本文件
 # 注意修改要执行的脚本的路径
 30 2 * * * /root/bin/db_backup.sh

检查定时任务:

 $ crontab -l
 ​
 # 结果会包含新增加的定时任务
 # 30 2 * * * /root/bin/db_backup.sh

至此实现了定时备份 MySQL 数据库功能。

注:该定时任务会在系统重启后依旧保留,不用担心重新设置