linux mysql手动备份_linux mysql定时自动备份实现

本文详细介绍了如何在Linux上实现MySQL的定时自动备份、数据恢复和旧备份的删除功能。通过创建mysql_backup.sh、mysql_restore.sh和remove_backup.sh三个脚本,结合crontab设置计划任务,实现数据库的自动化管理。同时,文章提醒用户注意修改相关脚本中的配置信息以匹配个人环境。
摘要由CSDN通过智能技术生成

开始使用

基本上不管是对于我们自己使用,还是给客户部署服务器,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

2dd5d3ba15ee34b44c7d2ee3c4062cb5.png

看,已经成功导出,下面我们来解压一下这个文件,看看原文件大小和压缩后的文件大小对比

使用命令

gzip -dc ./mysql/2018-11-30_223601.sql.gz > ./mysql/2018-11-30_223601.sql

85765305d06325bb0d84651824e9e1fe.png

289Kb 和39Kb的对比,如果数据库比较大的话,更能节省空间

到这里为止,我们的导出脚本已经完成了,接下来就是导入脚本了

二、数据恢复

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

8a9e30bf34f461ec0f7ecc749e5df917.png

这个是我的恢复数据运行结果,到这里我们的脚本就已经写完了,就剩下创建定时任务来执行了

离成功就差最后一步了,吼吼 0.0

三、创建计划任务

1.添加计划任务

这里并没有教大家怎么使用 crontab, 如果有小伙伴不会的话,搜一下就有答案了

crontab -e

粘贴下面的内容, 大家根据自己的需要更改就可以了

0 1,12 * * * /data/backup/mysql_backup.sh # 每天凌晨1点,中午12点备份一次数据这个文件夹就好了

*/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

我这里是选择备份数据只保留最近30天的,大家根据需要自行修改

同样的道理,添加可执行权限

chmod +x ./remove_backup.sh

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

./remove_backup.sh

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

crontab -e

# 下面这个就是脚本内容哦,添加这一句

0 1 * * * /data/backup/remove_backup.sh # 每天凌晨1点,自动删除30天前的备份

结束

大功告成,以上就是所有的 mysql 自动定时备份和手动恢复脚本了,有疑问的话,欢迎各位评论

本教程为博主原创,如需转载,请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值