Linux MySQL定时自动备份
Linux MySQL定时自动备份
需求分析
- 备份数据
- 恢复数据
- 删除一段时间以前的备份文件
解决方案
Prepare
准备3个脚本:
- mysql_backup.sh -> 备份数据
- mysql_restore.sh -> 恢复数据
- mysql_remove_backup.sh -> 删除一段时间以前的备份文件
-
创建备份目录,暂定位置
/data/backup/mysqlmkdir -pv /data/backup/mysql/ -
创建脚本存放目录,,暂定位置
/data/scriptmkdir -pv /data/script
1. 备份MySQL指定数据库
-
创建脚本
mysql_backup.shcd /data/script vi mysql_backup.sh -
指定数据库、用户名、密码进行备份,这里为
DBXXX,root,AAAAAA-
脚本内容
#!/bin/bash # 需要的话,自己改这里 db_user='root' db_password='AAAAAA' db_name='DBXXX' backup_dir='/data/backup/mysql/' current_time=$(date +'%Y-%m-%d_%H%M%S') filepath=$backup_dir$db_name'_'$current_time'.sql.gz' echo '开始导出数据库...' mysqldump -p$db_password -u$db_user $db_name | gzip > $filepath echo '导出成功,文件名为: '$filepath
-
-
指定MySQL配置文件进行备份
-
创建
mysqldump配置cd /data/script vi mysql_mysqldump.cnf -
mysql_mysqldump.cnf配置mysqldump,写入用户名和密码,这里为root和AAAAAA,可以设置一下允许导出的文件大小上限[mysql] host=127.0.0.1 user=root password='AAAAAA' [mysqldump] max_allowed_packet=400M host=127.0.0.1 user=root password='AAAAAA' -
脚本内容
#!/bin/bash # 需要的话,自己改这里 db_name='baizhan' backup_dir='/data/backup/mysql/' current_time=$(date +'%Y-%m-%d_%H%M%S') filepath=$backup_dir$db_name'_'$current_time'.sql.gz' #此处没有使用 $db_password $db_user, 已经写入到配置文件中 echo '开始导出数据库...' mysqldump --defaults-extra-file=/data/script/mysql_mysqldump.cnf $db_name | gzip > $filepath echo '导出成功,文件名为: '$filepath
-
-
赋予脚本运行权限
chmod +x /data/script/mysql_backup.sh -
运行
sh ./data/script/mysql_backup.sh
2.恢复数据库备份
-
创建脚本
mysql_restore.shcd /data/script vi mysql_restore.sh -
脚本内容
#!/bin/bash if [ -z $1 ] || [ ! -f $1 ] then echo "请输入sql压缩文件(*.sql.gz)" exit 1 fi db_name='baizhan' 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/script/mysql_mysqldump.cnf $db_name < $base_dir$sql_file if [ -f $base_dir$sql_file ] then echo '删除临时文件.' rm -f $base_dir$sql_file fi echo '导入完成.' -
赋予脚本运行权限
chmod +x /data/script/mysql_restore.sh -
运行
sh ./data/script/mysql_restore.sh ./data/backup/mysql/baizhan_2022-10-28_440561.sql.gz
3. 删除一段时间以前的备份
-
创建脚本
mysql_remove_backup.shcd /data/script vi mysql_remove_backup.sh -
脚本内容,只保留最近30天的
#!/bin/sh backup_dir='/data/backup/mysql/' # 删除30天前的备份 find $backup_dir -type f -mtime +30 | xargs rm -f -
赋予脚本运行权限
chmod +x /data/script/mysql_remove_backup.sh
4. 定时执行
-
定时备份配置
crontab -e # 粘贴下面的内容, 大家根据自己的需要更改就可以了 0 1,12 * * * /data/script/mysql_backup.sh # 每天凌晨1点,中午12点备份一次数据 # 大家可以先使用下面这条做为测试哦,1分钟跑一次,我们只需要查看 ll /data/backup/mysql 这个文件夹就好了 */1 * * * * /data/script/mysql_backup.sh -
定时清理备份配置
crontab -e # 下面这个就是脚本内容哦,添加这一句 0 1 * * * /data/script/remove_backup.sh # 每天凌晨1点,自动删除30天前的备份
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Nuri Alfred - Deertech
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果