通过mysqldump进行的数据库备份是使用所有数据库视图的错误源SQL查询创建的。所有源列始终为“1”。我可以使用mysql workbench和相同的db用户导出视图定义。
以下是mysqldump生成的视图定义示例
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
上答案 0 :(得分:1)
生成的视图是错误的,因为它是所有列中值为'1'的临时视图。
使用mysqldump时,该视图将作为临时视图生成,并在正常创建该视图时被替换。
也许您出于与我相同的原因未生成视图,所以似乎只创建了一个临时视图。
在我看来,mysql 5.7.31并没有在mysqldump期间自动将数据库名称和用户ID转换为视图的源。 我推荐你。备份要复制的数据库时,请创建单独的架构和数据文件。
mysqldump -u USERID -pPASSWORD DBNAME --no-data --triggers --routines > filePath\filename.sql
mysqldump -u USERID -pPASSWORD DBNAME --no-create-info > filePath\filename.sql
修改架构备份文件上的名称和用户ID。
之后,恢复两个备份文件将正常恢复视图。