MySQL80定时备份数据库的方法与报错

MySQL5.7备份的数据库文件导入到MySQL80的时候,出现了一些警告,但我不知道这些警告什么意思,反正现在导入的数据都能正常运作。难道之前使用的数据库备份方法有问题?或是其它的原因?这需要时间与测试才能找出原因。

一、MySQL5.7定时备份数据库的方法如下:

创建定时备份脚本backup_mysql_shell.sh

#!/bin/bash
DATE=`date +%Y%m%d%H%M`                #年月日时分
DATABASE=wp                            #数据库名称
BACKUP_PATH=/backup/mysqldata          #备份文件的存放目录
 
#备份命令

/usr/bin/mysqldump -h 127.0.0.1 -R --opt $DATABASE | gzip > ${BACKUP_PATH}\/${DATABASE}_${DATE}.sql.gz
 
#备份保留5天内的文件

find ${BACKUP_PATH} -mtime +5 -name "${DATABASE}_*.sql.gz" -exec rm -f {} \;

备份脚本的大概含义:

DATE 用来命名备份文件的参数,实际使用精确到小时即可。

DATABASE 需要备份的数据库的库名,不能弄错。

BACKUP_PATH 设置备份出来的文件的存放目录,需提前创建好该目录。

命令/usr/bin/mysqldump mysqldump 所在的目录

命令 -h 127.0.0.1 -h 主机名或主机IP地址

命令 -R 官方说明–routines, -R ,在输出中包括转储数据库的存储例程(过程和函数)。此选项需要全局SELECT权限。反正看不懂这参数,与权限相关的参数,决定去掉此参数测试看看。

命令 --opt 官方说明:由于该–opt选项默认情况下处于启用状态,因此您只需指定其反选项 –skip-opt即可关闭该选项。这个参数还是留着吧。

$DATABASE 需要备份的数据库

gzip > ${BACKUP_PATH}\/${DATABASE}_${DATE}.sql.gz 打包压缩存储到指定目录指定文件名。

以上的备份数据库的脚本,还需要配合数据库用户与密码,才能成功备份数据库。其中的数据库用户与密码,我们需要写在mysql配置文件 my.cnf 里面,格式如下:(用户root与root的密码)

[mysqldump]
user=root
password=**密码**

最后还要配合定时执行脚本的计划任务哟!

在MySQL80导入数据库文件时发出的警告:

备份数据库时使用的备份命令为:

/usr/bin/mysqldump -h 127.0.0.1 -R --opt $DATABASE | gzip > ${BACKUP_PATH}\/${DATABASE}_${DATE}.sql.gz

导入数据库使用的命令为:

#选择数据库
use wp; # wp 为数据库名称

#导入数据
source /sqlbak/wp_202006200602.sql; # wp_202006200602.sql 为数据库备份文件名称

数据库可以正常导入成功,但是有警告:(如下部分警告示例)

Query OK, 383 rows affected (0.00 sec)
Records: 383  Duplicates: 0  Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected, 5 warnings (0.01 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 221 rows affected (0.01 sec)
Records: 221  Duplicates: 0  Warnings: 0

是不是由于备份时使用了 -R 的参数造成的,暂时不知道。

二、MySQL80定时备份数据库的方法

MySQL80备份数据库方法与MySQL5.7一样,但是报错如下:

mysqldump: Got error: 1045: Access denied for user ‘root’@’localhost’ (using password: YES) when trying to connect

即使再三确认root用户与root的密码已经正确填写在 my.cnf 配置文件里,却还是报错。最后发现,root用户还是没有权限备份wp数据库,这实在是大坑。(本来wp数据库就是在登录root用户然后再创建出来的,却没有备份的权限

只有在配置文件 my.cnf 填上wp数据库的用户与密码,备份wp数据库才顺利成功。

难道这也是该数据库备份的时候使用了 -R 参数有关?不知道。

测试去掉 -R 这个备份参数,使用如下的备份参数:

#!/bin/bash
DATE=`date +%Y%m%d%H%M`                #年月日时分
DATABASE=wp                            #数据库名称
BACKUP_PATH=/backup/mysqldata          #备份文件的存放目录
 
#备份命令

/usr/bin/mysqldump -h 127.0.0.1 --opt $DATABASE | gzip > ${BACKUP_PATH}\/${DATABASE}_${DATE}.sql.gz
 
#备份保留5天内的文件

find ${BACKUP_PATH} -mtime +5 -name "${DATABASE}_*.sql.gz" -exec rm -f {} \;

测试去掉 -R 这个备份参数,再次备份数据库,然后用 Notepad++ 打开备份文件,大概发现带 -R 参数的多了一行 — Dumping routines for database ‘wp’,没有详细的再去对比区别,这样对比有点SB。

然后导入到本地环境数据库测试,警告 warning 依旧存在,但好像警告数量比较少了。最后发现这些所有的 warning 全都是 Query OK, 0 rows affected(查询正常),就不去纠结了吧。

测试完毕之后,关与去不去掉 -R 这个参数还是得不到明确的答案,所以就不去纠结了,反正都能正常备份与还原数据库才是最重要的。因此我就不折腾了,继续使用带 -R 的备份参数

发表评论

电子邮件地址不会被公开。 必填项已用*标注