Linux自动备份MySQL脚本
这里我将脚本与配置文件放在 /data/backup/ 路径下,备份文件在 /data/backup/mysql 路径下,如果需要调整路径则需要修改脚本与cron的相关文件路径
自动备份脚本 mysql_backup.sh
#!/bin/bash db_name='test' backup_dir='/data/backup/mysql/' current_time=$(date +'%Y-%m-%d_%H%M%S') filepath=$backup_dir$current_time'.sql.gz' echo '开始导出数据库...' mysqldump --defaults-extra-file=/data/backup/my_mysql.cnf $db_name | gzip > $filepath echo '导出成功,文件名为: '$filepath
自动删除30天以上的备份文件 remove_backup.sh
#/bin/bash # 删除30天前的备份 find /data/backup/mysql -type f -mtime +30 | xargs rm -f
恢复备份脚本 mysql_restore.sh
#!/bin/bash if [ -z $1 ] || [ ! -f $1 ] then echo "请输入sql压缩文件(*.sql.gz)" exit 1 fi db_name='ticket' base_dir='/data/backup/mysql/' gz_sql_file=`basename $1` file_ext=${gz_sql_file##*.} if [ $file_ext != 'gz' ] then echo '文件格式不正确,请输入 .sql.gz 文件' exit 1 fi sql_file=${gz_sql_file%.*} echo '解压文件中...' gzip -dc $base_dir$gz_sql_file > $base_dir$sql_file echo '解压完成.' echo '开始导入数据库...' mysql --defaults-extra-file=/data/backup/my_mysql.cnf $db_name < $base_dir$sql_file if [ -f $base_dir$sql_file ] then echo '删除临时文件.' rm -f $base_dir$sql_file fi echo '导入完成.' ~
配置文件 my_mysql.cnf
[mysqldump] max_allowed_packet= 400M host=localhost user=root password='123456' #设置为自己的密码例如我的为123456 [mysql] host=localhost user=root password='******'
任务计划配置
首先使用
crontab -e
并且添加脚本
0 1 * * * /data/backup/mysql_backup.sh # 每天凌晨1点备份一次数据 0 1 * * * /data/backup/remove_backup.sh # 每天凌晨1点,自动删除30天前的备份
参考资料: