1.创建备份shell文件 beifentest.sh
#备份存放位置,根据自己实际随便更改
BACKUP=/home/mysqlbeifen
#当前时间
DATETIME=$(date +%Y_%m_%d_%H_%M_%S)
echo "===备份开始==="
#找到自己mysql安装目录下的bin目录中mysqldump的绝对路径
DUMP=/usr/local/mysql/bin/mysqldump
#数据库地址
HOST=192.168.0.2
#数据库端口号
PORT=3306
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=123456
#备份数据库名称
DATABASE=test
#备份目录没有该目录时创建
[ ! -d "${BACKUP}/$DATABASE" ] && mkdir -p "${BACKUP}/$DATABASE"
#备份并压缩
$DUMP -u${DB_USER} -p${DB_PW} -h${HOST} -P${PORT} -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATABASE/$DATETIME.sql.gz
echo "备份文件存放于${BACKUP}/$DATABASE/$DATETIME.sql.gz"
#删除7天前备份的数据
#-mtime 当前系统时间 + 7天 找到$BACKUP/$DATABASE目录下的7天前得以 .sql.gz结尾的文件删除
find $BACKUP/$DATABASE -mtime +7 -name "*.sql.gz" -exec rm -rf {} \;
echo "===备份结束==="
2.赋予执行权限
chmod +x beifentest.sh
3.恢复删除的数据库,测试备份
在数据库中创建一个 test数据库 新建几张表,插入几条数据让后执行shell文件
./beifentest.sh
执行完后你的备份目录里会有个压缩文件 说明备份成功,可以把备份文件下载到本地在本地数据库运行解压后的sql文件,如果建立了库和表以及数据,则备份完成。
把刚建立的test数据库删除,然后在shell连接工具中 登录mysql,然后导入sql,此时的sql文件 是解压后sql文件:tar -zvxf 2022-02-19.sql.gz
mysql>source /home/mysqlbeifen/test/2022-02-19.sql #导入sql
mysql>show databases;
导入后再次查看数据库 被删除的test恢复完成
在做本地导入测试时,通过Navicat工具导入sql文件时 运行时出错了,只导入了不分数据
错误 :
[Err] 1046 - No database selected
[Err] 1231 - Variable 'foreign_key_checks' can't be set to the value of 'NULL'
等等报了一些错误

解决 把上面第二个选项的√去掉 就是把每个运行中运行多重查询去掉勾选,如下

再次运行就OK了
4.定时备份
添加定时任务 编辑crontab
vim /etc/crontab
0 3 * * * root /home/mysqlbeifen/test.sh

每天夜里3点执行备份

本文介绍了如何使用Linux shell脚本进行MySQL数据库的自动备份和恢复。首先,脚本详细展示了如何设置备份路径、获取当前时间、执行mysqldump命令以及压缩备份文件。接着,说明了如何赋予脚本执行权限,并进行测试恢复操作。在恢复过程中,遇到了错误,如'No database selected'和变量设置问题,通过调整Navicat的设置解决了这些问题。最后,提到了将此脚本加入到crontab定时任务中,以便每天凌晨3点自动执行备份任务。
6186

被折叠的 条评论
为什么被折叠?



