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
的备份参数。