我们需要实现下面的几个功能:

第一:数据库备份

第二:数据库通过备份恢复

第三:数据库备份自动化

第四:清理过期备份文件

第一:数据库自动备份
1.创建备份目录

这里我选择了把备份文件放在 /data/backup/mysql下面,把脚本放在 /data/backup 下面:

[root@izwz99z5o9dc90keftqhlrz /]# mkdir -p /data/backup/mysql
[root@izwz99z5o9dc90keftqhlrz /]# cd /data/backup

2.创建脚本文件
创建mysql_backup.sh

[root@izwz99z5o9dc90keftqhlrz backup]# vi mysql_backup.sh
 
#!/bin/bash
db_name='truck'
TAR_DIR=/mnt/backup/mysql_bak/list #备份存放路径
DATE=`date +%Y_%m_%d` #获取当前系统时间
DAYS=2 #DAYS=7代表删除7天前的备份,即只保留最近7天的备份
TAR_BAK="mysql_bak_$DATE.tar.gz" #最终保存的数据库备份文件名
mkdir -p $TAR_DIR
filepath=$TAR_DIR/$DATE/'truck.sql.gz'
#-d 数据库  -u 用户名 -p 密码请更换为自己数据库的信息
mysqldump --defaults-extra-file=/mnt/backup/mysql_bak/my_mysql.cnf $db_name | gzip > $filepath
find $TAR_DIR/ -mtime +$DAYS -delete #删除2天前的备份文件

3.新建配置文件
就在我们的当前目录下 即 /data/backup

[root@izwz99z5o9dc90keftqhlrz backup]# vi my_mysql.cnf
 
[mysqldump]
max_allowed_packet = 400M
host=127.0.0.1
user=root
password='xxxx'
[mysql]
host=127.0.0.1
user=root
password='xxxxx'

各位看官请把上面的参数改成自己的就好了,可别漏了这一步哦

其中 mysqldump 下的参数是给导出的命令使用的,mysql 下的参数是导入的时候使用的

4.给文件权限

到这里的话导出的shell脚本就已经写好了,我们对这个脚本加一下可执行权限

[root@izwz99z5o9dc90keftqhlrz backup]# chmod +x ./mysql_backup.sh

5.执行一下我们的命令

[root@izwz99z5o9dc90keftqhlrz backup]# sh ./mysql_backup.sh
# 查看一下结果
[root@izwz99z5o9dc90keftqhlrz backup]# ll ./mysql

第二:数据库通过备份恢复

1.创建脚本文件

按照第一步的操作,此时我们应该处于 /data/backup 目录下,继续操作

[root@izwz99z5o9dc90keftqhlrz backup]# vi mysql_restore.sh
#!/bin/bash
if [ -z $1 ] || [ ! -f $1 ]
then
 echo "请输入sql压缩文件(*.sql.gz)"
 exit 1
fi
#输入你自己的数据库名称
db_name='jx_guides'
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 '导入完成.'

上面代码中的配置文件,就是我们第一步时创建的配置文件,在这里一样的使用

2.增加文件可执行权限

[root@izwz99z5o9dc90keftqhlrz backup]# chmod +x ./mysql_restore.sh

3.我们来执行通过备份文件恢复数据库

[root@izwz99z5o9dc90keftqhlrz backup]# sh ./mysql_restore.sh ./mysql/2019-12-22_180359.sql.gz

解压文件中…
解压完成.
开始导入数据库…
删除临时文件.
导入完成.

在这里我们的第一个参数可以直接写备份文件的名字,不用写目录,但是因为加上目录之后,可以使用table进行自动补全,所以十分方便,其他的执行方式:其实懂的人知道都一样