Centos7 mysql 定时备份及还原
在参考原文情况进行操作中途遇到一些小的问题及自己的解决办法,做一些笔记。
原文链接 https://blog.csdn.net/qq_37798548/article/details/83306718
版权声明:本文为原博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1、新建备份脚本
vi /home/mysqlback/mysql_back.sh 填入以下内容
mysql_user="USER" #MySQL备份用户
mysql_password="PASSWORD" #MySQL备份用户的密码
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8" #MySQL编码
backup_db_arr=("db1" "db2") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/home/mysqlbak #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=3 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天之前的日期
backup_dir=$backup_location/$backup_Ymd #备份文件夹全路径
welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!"
exit
else
echo $welcome_msg
fi
mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end
flag=`echo $?`
if [ $flag != "0" ]; then
echo "ERROR:Can't connect mysql server! backup stop!"
exit
else
echo "MySQL connect ok! Please wait......"
# 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
if [ "$backup_db_arr" != "" ];then
for dbname in ${backup_db_arr[@]}
do
echo "database $dbname backup start..."
`mkdir -p $backup_dir`
`mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz`
flag=`echo $?`
if [ $flag == "0" ];then
echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
else
echo "database $dbname backup fail!"
fi
done
else
echo "ERROR:No database to backup! backup stop"
exit
fi
# 如果开启了删除过期备份,则进行删除操作
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
`find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
echo "All database backup success! Thank you!"
exit
fi
2、修改mysql_back.sh脚本属性,赋予执行权限
chmod 600 /home/mysqlback/mysql_back.sh
chmod +x /home/mysqlback/mysql_back.sh
3、测试执行脚本,检验脚本是否可以正常执行
1、测试备份脚本是否可以正常执行
sh /home/mysqlback/mysql_back.sh
将备份文件下载下来查看是否正常!如果为空,参考第7项。
2、测试删除历史备份数据是否可以正常执行
#修改刚才生成的文件夹的创建时间
cd /home/mysqlback
# linux touch 命令 参考
# touch -d "4 days ago" 2020-03-30 #将最后的文件夹 修改为当前生成的文件夹名称
# touch -r test2 将文件日期更改为参考文件日期。
# touch -d "2 days ago" test2 将文件修改日期调整为两天前。
touch -t "03251200" 2020-03-26 #将文件修改日期调整为指定日期,3 月 25 日 12 点 00 分。
# 再次执行脚本,测试 文件夹是否被删除
sh /home/mysqlback/mysql_back.sh
4、定时执行备份脚本
crontab -e #加入一下内容
# */5 * * * * /home/mysqlback/mysql_back.sh #(每5分钟执行一次)
# 正式部署时定时任务时间 自定义 每天00:30进行备份
30 00 * * */home/mysqlbak/mysql_bak.sh
# 启动定时任务
/bin/systemctl start crond.service
5、查看备份结果
cd 2020-03-30
ls
6、定时任务操作举例
基本命令:
列出用户的定时任务列表:crontab -u 用户名 -l
启动定时任务: /bin/systemctl start crond.service
停止定时任务:/bin/systemctl stop crond.service
重启定时任务:/bin/systemctl restart crond.service
查看定时任务状态:/bin/systemctl status crond.service
cron 基本格式:
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
crontab文件的一些例子:
30 21 * * */home/mysqlbak/mysql_bak.sh
上面的例子表示每晚的21:30执行备份脚本。
45 4 1,10,22 * * /home/mysqlbak/mysql_bak.sh
上面的例子表示每月1、10、22日的4 : 45执行备份脚本。
10 1 * * 6,0 /home/mysqlbak/mysql_bak.sh
上面的例子表示每周六、周日的1 : 10执行备份脚本。
7、可能存在问题
1、运行脚本提示有非法字符问题
将sh脚本保存在本地之后上传至服务器时,运行可能会出现此问题。
# 在vim编辑器中设置当前文本格式为 nuix
set ff=unix
#然后保存退出
2、mysqldump 命令找不到问题
whereis mysql
# mysql: /usr/bin/mysql /usr/lib64/mysql /usr/local/mysql /usr/share/mysql
ln -fs /usr/local/mysql/bin/mysqldump /usr/bin
8、备份恢复
#使用命令将压缩文件解压
gunzip -c test-202003301602.sql.gz #保留源文件 解压缩
导入备份文件
mysql -u<用户名> -p<密码> <databasename> < test-202003301602.sql.gz
备份恢复
#使用命令将压缩文件解压
gunzip -c test-202003301602.sql.gz #保留源文件 解压缩
导入备份文件
mysql -u<用户名> -p<密码> <databasename> < test-202003301602.sql.gz