斑马斑马-04-白云之上-mysql定时自动备份实现
Posted 逍遥小天狼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斑马斑马-04-白云之上-mysql定时自动备份实现相关的知识,希望对你有一定的参考价值。
原文链接:https://blog.csdn.net/qq_31659985/java/article/details/84668379
mysql_backup.sh 用于备份数据
mysql_restore.sh 用于恢复数据
remove_backup.sh 用于删除一段时间以前的备份文件
一、数据备份
1.创建备份目录
我们把备份文件放在/data/backup/mysql下面,把脚本放在/data/backup 下面
创建文件夹:mkdir -p /data/backup/mysql
2.创建脚本文件
创建mysql_backup.sh文件
vi mysql_backup.sh
#!/bin/bash # 需要的话,自己改这里哦 #db_user=\'root\' #db_password=`cat /data/www/mysql_password` db_name=\'test\' backup_dir=\'/data/backup/mysql/\' current_time=$(date +\'%Y-%m-%d_%H%M%S\') filepath=$backup_dir$current_time\'.sql.gz\' #此处没有使用 $db_password $db_user, 已经写入到配置文件中 echo \'开始导出数据库...\' mysqldump --defaults-extra-file=/data/backup/my_mysql.cnf $db_name | gzip > $filepath echo \'导出成功,文件名为: \'$filepath
上面的脚本没有使用到 $db_passoword, 需要的话,大家也可以不用创建配置文件,直接把 -p$db_password -u$db_user拼接到 mysqldupm 命令后面
使用 gzip 命令压缩的话,可以节省 80% 的空间
mysql 5.6以上会提示在命令行输入密码不安全,会有一行 notice ,但是也能导出成功
如果直接使用密码的话,就会报下面这个警告
mysqldump: [Warning] Using a password on the command line interface can be insecure.
解决不报错的办法就是把密码写到配置文件中去,文件内容参考如下,配置文件我们可以在新建一个
vi my_mysql.cnf
[mysqldump] max_allowed_packet = 400M host=11.19.113.203 user=root password=\'111111111111\' [mysql] host=11.19.113.203 user=root password=\'111111111111\'
大家需要把上面的参数改成自己的就好了,可别漏了这一步哦。
其中 mysqldump 下的参数是给导出的命令使用的,mysql 下的参数是导入的时候使用的
3.对脚本分配可执行权限
chmod +x ./mysql_backup.sh
4.对脚本进行测试
导出
sh ./mysql_backup.sh
查看
ll ./mysql
解压并比较文件大小
gzip -dc ./mysql/2020-03-26_223108.sql.gz > ./mysql/2020-03-26_223108.sql
5.如果在执行过程中报错
mysql_backup.sh: line 11: mysqldump: command not found
1、先用一条find命令查找mysqldump的所载路径
find / -name mysqldump -print
2、mysql:command not found建立软连接(这个我们上一篇中已经建立)
ln -s /usr/local/mysql/bin/mysql /usr/bin
3、mysqldump:command not found 建立软连接
ln -s /usr/local/mysql/bin/mysqldump /usr/bin
二、数据恢复
1.使用还原目录
我们已经把备份文件放在/data/backup/mysql下面,把备份脚本放在/data/backup 下面
同样,把mysql_restore.sh文件也放在/data/backup 下面
2.创建脚本文件
创建mysql_restore.sh文件
vi mysql_restore.sh
#!/bin/bash if [ -z $1 ] || [ ! -f $1 ] then echo "请输入sql压缩文件(*.sql.gz)" exit 1 fi db_name=\'test\' 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 \'导入完成.\'
上面代码中的配置文件,就是我们第一步时创建的配置文件,在这里一样的使用
3.对脚本分配可执行权限
chmod +x ./mysql_restore.sh
4.对脚本进行测试
查看数据库,
删除数据库,(重要数据库不建议执行此操作)
通过脚本恢复
sh ./mysql_restore.sh ./mysql/备份文件名.sql.gz
如果数据库不存在,要先建立一个,创建的数据库名要和(mysql_restore.sh设置的一样)
恢复完成(欢迎张三回来)
三、创建计划任务
1.创建脚本文件
crontab -e
# 粘贴下面的内容, 大家根据自己的需要更改就可以了
0 1,12 * * * /data/backup/mysql_backup.sh # 每天凌晨1点,中午12点备份一次数据
# 大家可以先使用下面这条做为测试哦,1分钟跑一次,我们只需要查看 ll /data/backup/mysql 这个文件夹就好了
*/1 * * * * /data/backup/mysql_backup.sh
2.测试
四、添加自动清理备份
1.自动删除
我们已经把备份文件放在/data/backup/mysql下面,把备份脚本和恢复脚本放在/data/backup 下面
同样,把remove_backup.sh文件也放在/data/backup 下面
2.创建脚本文件
创建remove_backup.sh文件
vi remove_backup.sh
#/bin/bash # 删除1天前的备份 find /data/backup/mysql -type f -mtime +1 | xargs rm -f
如果是,删除30天前的,把相应位置改为30
find /data/backup/mysql -type f -mtime +30 | xargs rm -f
3.对脚本分配可执行权限
chmod +x ./remove_backup.sh
4.创建定时任务
crontab -e # 粘贴下面的内容, 大家根据自己的需要更改就可以了 0 1,12 * * * /data/backup/remove_backup.sh # 每天凌晨1点,中午12点备份一次数据 # 大家可以先使用下面这条做为测试哦,2分钟跑一次,我们只需要查看 ll /data/backup/mysql 这个文件夹就好了 */2 * * * * /data/backup/remove_backup.sh
5.对脚本进行测试
5.1 准备工作
修改(删除脚本)remove_backup.sh文件把时间设置成删除半小时的历史文件
find /data/backup/mysql -type f -mmin +30 | xargs rm -f
修改(定时任务)crontab把时间设置成没两分钟执行一次
find /data/backup/mysql -type f -mtime +30 | xargs rm -f
定时任务设置成每分钟
5.2 开始观察
删除前
删除后
5.2 收工调整
1:把定时任务设置成每天凌晨3:00备份。每天凌晨5:00删除过期备份
2:把删除备份的保留时间修改成15天
五、增量备份与删除
以上是关于斑马斑马-04-白云之上-mysql定时自动备份实现的主要内容,如果未能解决你的问题,请参考以下文章