Mysqldump

如何將 mysqldump 與 Generated 列一起使用?

  • July 16, 2021

導入轉儲時出現以下錯誤,

第 82 行的錯誤 3105 (HY000):不允許為表 ’table_name’ 中生成的列 ‘column_name’ 指定值。

當我描述有錯誤的表時,其中有一些生成的列。

選項類型 | varchar(45) | 是 | 穆爾 | 空 | 虛擬生成

為數據庫包含生成的列進行 mysql 轉儲時使用的正確命令是什麼?

MySQL 伺服器源和目標版本:

mysqld Ver 5.7.26 for Linux on x86_64 (MySQL Community Server (GPL))

MariaDB mysqldump CLI 版本:

mysqldump Ver 10.17 Distrib 10.3.12-MariaDB,適用於 Linux (x86_64)

在將 MariaDB 中的 mysqldump 與虛擬生成列一起使用時,這是一個問題。MariaDB 的 mysqldump 顯然會轉儲生成的值,但 MySQL 只接受DEFAULT作為虛擬生成列的值。

似乎您需要使用 MySQL 的 mysqldump 來正確轉儲和恢復 MySQL 伺服器上的虛擬生成列。

此處也報告了該錯誤。


我做的一種解決方法是替換轉儲中的虛擬列:

sed -i 's/GENERATED ALWAYS AS .* VIRTUAL/NOT NULL/' mydump.sql

然後恢復轉儲,然後再次刪除/添加生成的列:

mysql -e "ALTER TABLE foo DROP COLUMN bar;\
ALTER TABLE foo ADD COLUMN bar VARCHAR(255) AS ...;"

引用自:https://dba.stackexchange.com/questions/240882