Mysqldump破坏了CREATE VIEW导出

时间:2016-01-07 15:58:48

标签: mysqldump percona

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

1 个答案:

答案 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。

之后,恢复两个备份文件将正常恢复视图。