shell脚本定时自动备份mysql数据库和mysql恢复数据

发布时间:2023年12月17日

1、设置一些测试的数据

创建一个database,一些tables和一些数据

create database test_bom default charset utf8 collate utf8_general_ci;

use test_bom;

create table users(
id int not null primary key auto_increment,
name varchar(64) not null,
password char(64) not null,
email varchar(64) not null,
age tinyint,
salary decimal(10,2),
ctime datetime
)default charset=utf8;

Insert into users(name,password,email,age,salary,ctime) values("小五","123456","xiaowu
@126.com",24,5023.56,"2011-11-11 12:00:01");
Insert into users(name,password,email,age,salary,ctime) values("小六","123456","xiaowu
@126.com",24,5023.56,"2011-11-11 12:00:01");
Insert into users(name,password,email,age,salary,ctime) values("小七","123456","xiaowu
@126.com",24,5023.56,"2011-11-11 12:00:01");
Insert into users(name,password,email,age,salary,ctime) values("小八","123456","xiaowu
@126.com",24,5023.56,"2011-11-11 12:00:01");
Insert into users(name,password,email,age,salary,ctime) values("小九","123456","xiaowu
@126.com",24,5023.56,"2011-11-11 12:00:01");

2、创建一些必要的文件夹

存放备份的文件和shell脚本,以后所有的shell脚本可以统一存放和管理

我在/data目录下新建了俩个文件夹

mkdir my_shell
mkdir mysqlbackup

3、使用mysqldump备份数据

执行以下语句,将test_bom这个database的数据备份到制定目录下,并且起名mydb.sql

mysqldump -uroot -p test_bom > /data/mysqlbackup/mydb.sql

相应目录下能看到这个文件啦,说明语句没问题啦~

给大家看一下备份的sql里都有什么,有生成表的语句和表中数据的生成语句,也就是说,恢复数据的时候,我们需要手动创建database,然后执行这个备份文件就可以自动生成表和数据了。

4、写一个简单的脚本自动执行备份

先给自己的备份文件起一个带时间的名字,利用

date +%Y-%m-%d_%H-%M-%S

与之前的语句结合一下,我们就能生成带有日期的备份数据了

mysqldump -uroot -p test_bom > /data/mysqlbackup/mydb-$(date +%Y-%m-%d_%H-%M-%S).sql

如果你服务器是免密登录的,你可以不写-p哦

mysqldump -uroot test_bom > /data/mysqlbackup/mydb-$(date +%Y-%m-%d_%H-%M-%S).sql

编写shell脚本

#!/bin/bash

mysqldump -uroot test_bom > /data/mysqlbackup/mydb-$(date +%Y-%m-%d_%H-%M-%S).sql

给你的脚本授权

chmod 777 mysqlback_shell.sh

执行脚本

bash mysqlback_shell.sh 

查看是否生成了新的备份文件

如果备份文件太多,就太占地方了,我们一般会备份成压缩文件,会小不少

mysqldump -uroot test_bom |gzip> /data/mysqlbackup/mydb-$(date +%Y-%m-%d_%H-%M-%S).sql.gz

5、设置自动执行备份

使用crontab命令

编辑

crontab -e

在尾部添加,测试一下是否可以正常执行,这样写相当于每分钟执行一次,写完保存,等一会看看是否正常执行了。

* * * * * /bin/bash /data/my_shell/mysqlback_shell.sh

重新编辑crontab,设置每天晚上9:30执行

6、补充crontab的设置(可以跳过这个部分)

基本配置

如下所示配置共6列,前5列是关于执行时间配置,最后1列是具体执行命令。

.---------------- 分 (0 - 59)
|  .------------- 时 (0 - 23)
|  |  .---------- 日 (1 - 31) 
|  |  |  .------- 月 (1 - 12) 
|  |  |  |  .---- 星期 (0 - 6) (星期日可为0或7) 
|  |  |  |  | 
*  *  *  *  * 执行的命令

第一列单位为分,表示每时第几分钟,范围为0-59;
第二列单位为时,表示每天第几小时,范围为0-23;
第三列单位为日,表示每月第几天,范围为1-31;
第四列单位为月,表示每年第几月,范围为1-12;
第五列单位为星期,表示每星期第几天,范围0-7,0与7表示星期日,其他分别为星期1-6;

时间配置段类型

根据时间列中值的不同设置方式,编者总结出以下五种类型:

固定某值,指定固定值,如指定1月1日0时0分执行任务

0 0 1 1 * command

月日时分都指定了固定数值。
注:*在crontab中表示任意值都满足条件。

列表值,时间值是一个列表,如指定一个月内2、12、22日零时执行任务

0 0 2,12,22 * * command

上述日指定多个值,2号、12号和22号,以逗号分隔;

连续范围值,时间为连续范围的值,如指定每个月1至7号零时执行任务

0 0 1-7 * * command

上述日期为连续范围的值1-7时

步长值,根据指定数值跳跃步长确定执行时间,如指定凌晨1时开始每割3个小时0分执行一次任务

0 1-24/3 * * * command

上述指定从凌晨1时每3个小时执行任务,如1点0分,4点0分,7点0分等。

混合值,支持以上类型的组合,如指定每小时0至10分,22、33分以及0-60分钟每隔20分钟执行任务,如下

0-10,22,33,*/20 * * * * command

这里的分钟值采取了多种类型组合指定,包括连续范围值(0-7),列表值(22,33),步长值(*/20)。

说明:这几种时间配置类型是编者自己总结,希望能帮助大家更好理解。

定时语句解析工具

工具地址:https://crontab.guru,下面是工具的截图,可以用来测试自己写的对不对哦~

7、用备份的脚本恢复数据

删除之前的database

drop database test_bom;

第一步:创建database,这个database里面是没有表和数据的。

create database test_bom default charset utf8 collate utf8_general_ci;

第二步:执行语句,用最新的备份恢复

gunzip < /data/mysqlbackup/mydb-2023-12-14_09-26-01.sql.gz | mysql -uroot test_bom

再去数据库中查询,数据恢复啦~

文章来源:https://blog.csdn.net/xiaodaimu00/article/details/134975461
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。