mysql用mysqldump命令备份之后不能正确还原
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql用mysqldump命令备份之后不能正确还原相关的知识,希望对你有一定的参考价值。
上图是我的备份文件,可是还原的时候却显示的是下图的样子,结果数据库没有被还原。
通用规律只有使用 --all-databases (-A) 会 ERROR 1356,那就看看他到底备份了什么东西。于是喊上同事一起 less 看了下,上下扫了两眼。突然发现:1. 备份 SQL 文件里 DROP 掉了 mysql.proc;2. 后CREATE了一个新的 mysql.proc;3. LOCK TABLES 和 UNLOCK TABLES 中间居然没有备份 CREATE ROUTINE 任何数据?这不就是相当于每次导入全备都给我一个没有任何 sys schema routines 的全新 mysql.proc 表?那这不就异常的尴尬?---- Table structure for table `proc`--
---- Dumping data for table `proc`-
真相大白在官方文档【sys-schema-usage】官方文档明确的告诉我们不会备份 sys 库。但在使用 mysqldump 在执行 --all-databases 会清空 mysql.proc 导致 sys 无法正常使用;这是一个 BUG,并且只存在于 MySQL 5.7.x !
1、mysql_upgrade install or upgrade sys schema
这个方案适用于 sys 库已经因为 mysqldump 导入而损坏的情况下使用。
注意:mysql_upgrade 在修理 sys 库的同时,还修理 mysql 库和用户库表(期间加锁且速度一般),有极小可能会误伤;使用 mysql_upgrade 的时候要加上 --upgrade-system-tables,不然会扫描用户库表。
2、全备时同时备份 sys 库
这个方案适用于需要还原的数据库,sys 库也不太正常的情况下使用;在全备后额外再备份一份 sys 库用于修复。
注意:不适用于做主从时使用它。
3、使用 databases 全备
这个方案适用于所有场景的全备需求,100% 安全。
4、使用 mysql-sys 开源代码
如果你的数据库 sys 全部中招了,又是生产库。那你只能用这个方法;
mysql-sys:https://github.com/mysql/mysql-sys
中记录了 sys 库的创建语句将文件下载到本地,然后根据数据库版本,执行以下命令即可。 参考技术A 还原用mysql命令,不是mysqldump本回答被提问者采纳 参考技术B 这些语句没有错,你是不是没有数据库管理员权限?
如何使用shell脚本每天自动备份mysql数据库
mysql备份用自带的备份工具mysqldump每天自动执行用cron工具,把mysql的备份命令放在.sh文件里面
.sh文件放在/etc/cron.daily目录,就会每天自动执行了。 参考技术A 不等的,单个>是重新写入,比如你log里已经有内容如果用>再次写入的话会覆盖之前的内容,两个>>意思是追加,会在已有的内容之后追加新的内容而不会覆盖原有的内容,>这个符号称之为重定向。
以上是关于mysql用mysqldump命令备份之后不能正确还原的主要内容,如果未能解决你的问题,请参考以下文章
MySQL的逻辑备份(mydumper+mysqldump)
命令行输入窗口用mysqldump备份时显示can't connect to mysql server on"localhost"when trying connect