我通过 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/