...
运维 Linux

Linux mysql 定时自动备份实现


开始使用

基本上不管是对于我们自己使用,还是给客户部署服务器,mysql备份是不可或缺的一部分,这里就教大家怎么去实现mysql的定时自动备份功能,为了实现这个功能,也是踩了各种坑,最后整理出来的,在这里我们实现了下面这三个功能

mysql_backup.sh 用于备份数据
mysql_restore.sh 用于恢复数据
remove_backup.sh 用于删除一段时间以前的备份文件

我是使用root用户操作的,如果用户组权限不够的话,需要 sudo 提权,这个就看大家自己的需要了
还需要大家具有 vi 的操作技能哦,如不会的话需要大家自行了解了,这里就不赘述了


一、数据备份

1.创建备份目录

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

先创建文件夹

mkdir -p /data/backup/mysql
cd /data/backup

2.创建脚本文件

创建mysql_backup.sh

vi mysql_backup.sh

粘贴下面的脚本内容

#!/bin/bash
# 需要的话,自己改这里哦
#db_user='root'
#db_password=`cat /data/www/mysql_password`
db_name='baizhan'
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.
解决不报错的办法就是把密码写到配置文件中去,文件内容参考如下,配置文件我们可以在新建一个

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

vi my_mysql.cnf

下面的是文件内容,这里可以设置一下允许导出的文件大小上限

[mysqldump]
max_allowed_packet = 400M
host=127.0.0.1
user=root
password='SgDGfsrfEi3#@%#%ugslp%z!dAP'
[mysql]
host=127.0.0.1
user=root
password='SgDGfsrfEi3#@%#%ugslp%z!dAP'
各位看官请把上面的参数改成自己的就好了,可别漏了这一步哦
其中 mysqldump 下的参数是给导出的命令使用的,mysql 下的参数是导入的时候使用的

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

chmod +x ./mysql_backup.sh

现在我们就可以使用下面的命令来导出了

sh ./mysql_backup.sh
# 查看一下结果
ll ./mysql


二、数据恢复

1.创建脚本文件

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

vi mysql_restore.sh

粘贴下面的内容

#!/bin/bash

if [ -z $1 ] || [ ! -f $1 ]
then
echo "请输入sql压缩文件(*.sql.gz)"
exit 1
fi

db_name='baizhan'
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 '导入完成.'

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

增加文件可执行权限

chmod +x ./mysql_restore.sh

以上就是导入脚本内容,我们来执行一下

sh ./mysql_restore.sh ./mysql/2018-11-30_223601.sql.gz

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

其实可以在任何文件夹进行恢复,执行
sh /data/backup/mysql_restore.sh /data/backup/mysql/2018-11-30_223601.sql.gz
也可以这样
sh /data/backup/mysql_restore.sh 2018-11-30_223601.sql.gz


三、创建计划任务

添加计划任务

    crontab 的使用方法 看这里 : https://www.vsay.net/other/137.html

crontab -e
# 粘贴下面的内容, 大家根据自己的需要更改就可以了
0 1,12 * * * /data/backup/mysql_backup.sh # 每天凌晨1点,中午12点备份一次数据

# 大家可以先使用下面这条做为测试哦,1分钟跑一次,我们只需要查看 ll /data/backup/mysql 这个文件夹就好了
*/1 * * * * /data/backup/mysql_backup.sh


四、更新,添加自动清理备份

1.创建删除文件脚本

我们还是在/data/backup 目录下面创建脚本,下面就是脚本内容了
vi remove_backup.sh

 复制下面的脚本内容

#!/bin/bash

# 删除30天前的备份
find /data/backup/mysql -type f -mtime +30 | xargs rm -f

2.添加可执行权限

chmod +x ./remove_backup.sh

使用下面这个命令可以手动清理哦

./remove_backup.sh

3.自动执行

接下来我们就要做到自动清理了,添加到 crontab中,和上一步的自动备份一样的

crontab -e
# 下面这个就是脚本内容哦,添加这一句
0 1 * * * /data/backup/remove_backup.sh # 每天凌晨1点,自动删除30天前的备份


结束


参考转载:https://blog.csdn.net/qq_31659985/article/details/84668379


在Windows2012下安装SQL Server 2005无法启动服务的解决办法 Linux crontab 计划任务,定时执行任务方法
biu biu biu
MacStroke下载及appleScript 模拟按键脚本 共享打印机0x0000011b修复的另一种方法 yarn 设置淘宝镜像 yarn 错误There appears to be trouble with your network connection. Retrying... win11 安装限制去除 跳过TPM CPU检测 附软件 win11 桌面不满足要求水印去除 适用于跳过TPM CPU检测安装后的桌面水印