Mysqldump 损坏了 CREATE VIEW 导出

标签 mysqldump percona

我通过 mysqldump 进行的数据库备份使用错误的所有数据库 View 的源 SQL 查询创建。所有源列始终为“1”。我可以使用 mysql 工作台和相同的 db 用户导出 View 定义就好了。

这是 mysqldump 生成的 View 定义示例

DROP TABLE IF EXISTS `my_table_name`;
/*!50001 DROP VIEW IF EXISTS `my_table_name`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE VIEW `my_table_name` AS SELECT 
 1 AS `id`,
 1 AS `col1`,
 1 AS `col2`,
 1 AS `col3`,
 1 AS `col4`,
 1 AS `col5`*/;
SET character_set_client = @saved_cs_client;

同样的事情发生在 Percona Server 5.6.12 和 5.6.25 上

最佳答案

生成的 View 是错误的,因为它是一个临时 View ,所有列中的值都为“1”。
mysqldump时, View 作为临时 View 生成,正常创建 View 时替换。
也许你没有和我一样的原因生成一个 View ,所以似乎只创建了一个临时 View 。
在我看来,mysql 5.7.31 没有在 mysqldump 期间自动将 DB 名称和用户 ID 转换为 View 的源。
我推荐你。在备份要复制的 DB 时制作单独的架构和数据文件。

mysqldump -u USERID -pPASSWORD DBNAME --no-data --triggers --routines > filePath\filename.sql
mysqldump -u USERID -pPASSWORD DBNAME --no-create-info > filePath\filename.sql
修改架构备份文件上的名称和用户 ID。
之后,恢复这两个备份文件即可正常恢复 View 。

关于Mysqldump 损坏了 CREATE VIEW 导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34659617/

相关文章:

java - 提交或 conn.setAutoCommit(true)

mysql - 如何在不覆盖重复字段的情况下将 SQL 转储导入表

mysql - 无需停机即可更改大型表

mysql - 如何在 Percona 中使用 XtraDB 和 TokuDB?

php - 如何将 MySQL 数据库文件 (.sql) 转换为 PHP 中的 SQLite 文件?

mysql - 从 java docker 容器连接到 percona docker

mysql - 如何撤销 CHANGE MASTER TO

mysql - 在 Git 推送和 pull 上导出和导入数据库

mysqldump 不导出数据或结构

mysql - 有哪些方法可以屏蔽 mysqldump?