mysqldump生成损坏的sql文件(显然是在存储了生成列的表上)(MySQL v8.0.21)

mysqldump生成损坏的sql文件(显然是在存储了生成列的表上)(MySQL v8.0.21),mysql,database-backups,mysql-backup,Mysql,Database Backups,Mysql Backup,我使用的是MySQL v8.0.21和MySQL Dump v8.0.23 我有一个具有以下架构的表: mysql> desc resource_downloads; +-------------+--------------+------+-----+---------+------------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--

我使用的是MySQL v8.0.21和MySQL Dump v8.0.23

我有一个具有以下架构的表:

mysql> desc resource_downloads;
+-------------+--------------+------+-----+---------+------------------+
| Field       | Type         | Null | Key | Default | Extra            |
+-------------+--------------+------+-----+---------+------------------+
| compositeId | varchar(250) | NO   | PRI | NULL    | STORED GENERATED |
| resourceId  | int unsigned | NO   | MUL | NULL    |                  |
| userId      | int unsigned | NO   | MUL | NULL    |                  |
| fileId      | int unsigned | YES  | MUL | NULL    |                  |
+-------------+--------------+------+-----+---------+------------------+
以及以下值:

mysql> select * from resource_downloads;
+-------------+------------+--------+--------+
| compositeId | resourceId | userId | fileId |
+-------------+------------+--------+--------+
| 24-150-NULL |         24 |    150 |   NULL |
| 37-150-NULL |         37 |    150 |   NULL |
| 56-150-48   |         56 |    150 |     48 |
| 56-150-NULL |         56 |    150 |   NULL |
+-------------+------------+--------+--------+
4 rows in set (0.00 sec)
以下是创建表的SQL语句:

CREATE TABLE`resource\'downloads`(`compositeId`varchar(250)AS(CONCAT\'WS('-',resourceId,userId,IFNULL(fileId,'NULL'))存储为非空,`resourceId`int UNSIGNED NOT NULL,`userId`int UNSIGNED NOT NULL,`fileId`int UNSIGNED NULL,主键(`compositeId`)引擎=InnoDB
执行以下mysqldump命令时:

mysqldump-u$DB\u USER-p$DB\u PASSWORD$DB\u NAME>dump.sql
它确实为
资源下载
表生成以下内容:

--
--正在转储“资源下载”表的数据`
--
锁表'resource_downloads'写入;
/*!40000 ALTER TABLE`resource_downloads`DISABLE KEYS*/;
在“资源下载”中插入(`resourceId`、`userId`、`fileId`)值,24150,NULL),24150,NULL),24150,NULL),24150,NULL),37150,NULL),56150,48),24150,NULL),37150,NULL),56150,NULL);
/*!40000 ALTER TABLE`resource_downloads`ENABLE KEYS*/;
解锁表格;
正如您所看到的,它已损坏,不是有效的SQL语句

我没有找到与这种特殊情况对应的任何内容,我想这是由于生成的存储列,因为它是在几天前我将其引入数据库之后才出现的


对于这种情况,是否有任何解决方法可以让我生成一个可用的数据库转储?我可以考虑将此表从转储中排除,但这很不方便…

如果将生成的列移到末尾,如下所示:

CREATE TABLE `resource_downloads` (
   `resourceId` int UNSIGNED NOT NULL, 
   `userId` int UNSIGNED NOT NULL, 
   `fileId` int UNSIGNED NULL, 
   `compositeId` varchar(250) AS (CONCAT_WS('-', resourceId, userId, IFNULL(fileId, 'NULL'))) STORED NOT NULL, 
   PRIMARY KEY (`compositeId`)
) ENGINE=InnoDB;
CREATE TABLE `resource_downloads` (
   `compositeId` varchar(250) AS (CONCAT_WS('-', resourceId, userId, IFNULL(fileId, 'NULL'))) STORED NOT NULL, 
   `resourceId` int UNSIGNED NOT NULL, 
   `userId` int UNSIGNED NOT NULL, 
   `fileId` int UNSIGNED NULL, 
   PRIMARY KEY (`compositeId`)
) ENGINE=InnoDB;
不是这样的:

CREATE TABLE `resource_downloads` (
   `resourceId` int UNSIGNED NOT NULL, 
   `userId` int UNSIGNED NOT NULL, 
   `fileId` int UNSIGNED NULL, 
   `compositeId` varchar(250) AS (CONCAT_WS('-', resourceId, userId, IFNULL(fileId, 'NULL'))) STORED NOT NULL, 
   PRIMARY KEY (`compositeId`)
) ENGINE=InnoDB;
CREATE TABLE `resource_downloads` (
   `compositeId` varchar(250) AS (CONCAT_WS('-', resourceId, userId, IFNULL(fileId, 'NULL'))) STORED NOT NULL, 
   `resourceId` int UNSIGNED NOT NULL, 
   `userId` int UNSIGNED NOT NULL, 
   `fileId` int UNSIGNED NULL, 
   PRIMARY KEY (`compositeId`)
) ENGINE=InnoDB;

mysqldump似乎运行正常。(使用mysqldump 8.0.25进行测试)

那么您在这里遇到了什么与编程相关的问题?在这篇文章中实际上没有任何问题。这就像一个bug报告或技术支持请求。也许你应该把它发布在bugs.mysql.com上?这个bug已经存在了:(截至2016年3月18日13:16真的很抱歉,我应该用一个问题来结束我的帖子,我刚刚编辑了这篇帖子。非常感谢@Luuk的链接,我会查出来的