如何使用生成列获取 mysqldump?

kar*_*yan 5 mysqldump mysql-5.7 mariadb-10.3

我在导入转储时遇到以下错误,

第 82 行出现错误 3105 (HY000):不允许为表“table_name”中的生成列“column_name”指定值。

当我描述错误的表时,其中有一些生成的列。

选项类型 | varchar(45) | varchar(45) | 是的 | 乘法 | 空| 虚拟生成

为数据库包含生成的列进行 mysql 转储时使用的正确命令是什么?

MySQL服务器源和目标版本:

mysqld 版本 5.7.26,适用于 x86_64 上的 Linux(MySQL 社区服务器 (GPL))

MariaDB mysqldump CLI 版本:

mysqldump 版本 10.17 Distrib 10.3.12-MariaDB,适用于 Linux (x86_64)

Dar*_*idl 17

当使用来自 MariaDB 的 mysqldump 和虚拟生成的列时,这是一个问题。MariaDB 的 mysqldump 显然会转储生成的值,但 MySQL 只接受DEFAULT虚拟生成列的值。

看来您需要使用 MySQL 的 mysqldump 来正确转储和恢复 MySQL 服务器上的虚拟生成列。

该错误也被报告在这里


我所做的解决方法是替换转储中的虚拟列:

sed -i 's/GENERATED ALWAYS AS .* VIRTUAL/NOT NULL/' mydump.sql
Run Code Online (Sandbox Code Playgroud)

然后恢复转储,然后再次删除/添加生成的列:

mysql -e "ALTER TABLE foo DROP COLUMN bar;\
ALTER TABLE foo ADD COLUMN bar VARCHAR(255) AS ...;"
Run Code Online (Sandbox Code Playgroud)