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天前的备份

 

参考资料:

posted @ 2024-05-08 15:00  安培昌浩  阅读(142)  评论(0)    收藏  举报