mysqldump生成损坏的sql文件(显然是在存储了生成列的表上)(MySQL v8.0.21)
我使用的是MySQL v8.0.21和MySQL Dump v8.0.23 我有一个具有以下架构的表: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> 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的链接,我会查出来的