Linux定时Mysql数据库备份和恢复

今天做一个linux下mysql数据库备份的知识分享。
之前我都是用的navicat本地备份,而且要电脑开机才能自动定时备份,虽然很简单,但局限性很大。为了防止突发情况,今天有空研究了一下linux下的mysql数据备份,和大家一起分享学习,也是给自己做一个记录,怕忘了,哈哈哈哈哈!不会的朋友直接搬运妥妥的。

1. 找到合适位置创建文件夹,放置脚本文件和备份数据

# 创建/usr/local/develop/mysql_backup
 
mkdir -p /usr/local/develop/mysql_backup
 
cd /usr/local/develop/mysql_backup
 
# 创建mysql_backup.sh的脚本并且填充数据
#vi 编辑文件(没有同时创建); i 开始编辑; 按esc退出然后:wq保存编辑退出;
 
vi mysql_backup.sh
 
# vi mysql_backup.sh进行编辑和修改

2. mysql_backup.sh脚本的内容,执行数据备份

注意

该内容最好是在linux下命令行输入(或复制上去)。windows下写好直接传文件上去可能存在编码问题。

完整脚本内容如下:

#!/bin/bash
# mysql备份脚本
#备份目录
backup_dir='/usr/local/develop/mysql_backup/'
#备份库名列表,括号内多个数据库空格隔开
db_name_array=('test_bk' 'test_bk_222')
#备份时间
current_time=$(date +%Y%m%d_%H%M%S)
#备份文件名(没用上)
filepath=$backup_dir$db_name'_'$current_time'.sql'
#备份多个数据库循环,利用管道命令连接gzip命令直接备份为gz压缩文件(这里是多个数据库循环备份)
for db_name in ${db_name_array[*]}
do
	#备份核心语句(单个数据库备份,可以直接这一个语句)
	mysqldump -u 用户名 -p密码 $db_name | gzip > $backup_dir$db_name'_'$current_time'.sql.gz'
done

# 删除7天前备份的文件(防止数据多了太占内存)
find $backup_dir -name "*.sql.gz" -atime +7 -exec rm -rf {} \;

脚本备份核心语句:

#备份为sql文件
mysqldump -u 用户名 -p密码 数据库名 > 备份文件名自定义'.sql'

#备份为压缩文件(内存占用少)
mysqldump -u 用户名 -p密码 数据库名 | gzip > 备份文件名自定义'.sql.gz'

3. 脚本增加权限

chmod +x ./mysql_backup.sh

4. 测试脚本运行

sh ./mysql_backup.sh

5. 恢复脚本执行的备份文件

恢复sql备份文件

#1.进入mysql
mysql -u root -p
#2.进入对应的数据库test_bk
use test_bk;
#3.恢复备份数据
source /usr/local/develop/mysql_backup/test_bk.sql

恢复gz备份文件

#1.解压gz文件
#直接解压默认删除原压缩文件
gunzip /usr/local/develop/mysql_backup/test_bk.sql.gz
#或   解压文件保留原压缩文件
gunzip -c /usr/local/develop/mysql_backup/test_bk.sql.gz > /usr/local/develop/mysql_backup/test_bk.sql.gz
#2.进入mysql
mysql -u root -p
#3.进入对应的数据库test_bk
use test_bk;
#4.恢复备份数据
source /usr/local/develop/mysql_backup/test_bk.sql

6. linux定时执行脚本

定时调度使用crontab。
没有安装crontab的小伙伴需要安装crontab,安装过程网上很多在此就不做赘述了。

查看crontab的定时任务

crontab -l

创建crontab的定时任务

#编辑crontab定时任务
crontab -e
#可以先用这个测试,每一分钟执行一次。
*/1 * * * * /usr/local/develop/mysql_backup/mysql_backup.sh

#每天凌晨1点执行
0 1 * * * /usr/local/develop/mysql_backup/mysql_backup.sh

7. crontab定时时间

在这里插入图片描述

8. 定时执行脚本和手动执行脚本的问题

注意
手动执行脚本运行的结果没有问题,但是改成用crontab定时执行该脚本的时候,发现结果不一致或没有结果。
可能的问题:

原因是crontab的环境变量中没有mysqldump,所以用crontab执行mysqldump的时候要加上绝对路径,如:/数据库安装路径/bin/mysqldump
xxxxxxx这样就可以了!

如果不知道数据库绝对路径,可以这样查看
ps -ef|grep mysql
#或
whereis mysqldump

改这里
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值