MariaDB:未知数据类型 "MYSQL_JSON"
MariaDB: Unknown data type "MYSQL_JSON"
根据 MariaDB 的网站,您可以简单地将 MySQL 替换为 MariaDB。
太好了,我想,但是在安装 MariaDB (10.5.7) 之后,我的一些 InnoDB tables 已损坏。错误是 Unknown data type "MYSQL_JSON"
。
其中一个损坏的 table 还在 phpmyadmin 中显示“正在使用”,我根本无法访问它。
所以,我到处寻找解决方案,显然 MariaDB 不支持该类型。有什么办法可以解决这个问题吗?一定有一些方法可以隐藏这些列,对吗?
我试图降级回 MySQL 5.7,但现在 MySQL 不再工作了,所以我再次重新安装了 MariaDB。我也找不到任何降级指南。
这是从我的本地测试数据库创建的损坏 table 的创建 table 语句。我能够成功地 mysqldump 所有其他的。只是不是这个。诚然,我有 1 天前的备份,但是一整天丢失工作无论如何都不是一件好事。
CREATE TABLE `news` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author_id` int(10) unsigned DEFAULT NULL,
`title` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL,
`content` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`excerpt` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`sources` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '(DC2Type:json)',
`header` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`copyright` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`category` smallint(5) unsigned DEFAULT NULL,
`featured` tinyint(1) NOT NULL,
`language` smallint(5) unsigned NOT NULL,
`published` datetime DEFAULT NULL,
`status` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `IDX_1DD39950F675F31B` (`author_id`),
CONSTRAINT `FK_1DD39950F675F31B` FOREIGN KEY (`author_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=167 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
table 由 Doctrine ORM 自动生成。
如果我能以某种方式从 table 中获取几行数据,那将是我的一周。我只需要最后一天的内容栏。
我从备份中恢复了系统 运行。就是那些新闻不见了。
更新
我能够在 /var/lib/mysql/{mydatabase}/
下找到一个 .ibd 文件,其中包含我需要的所有纯文本数据。我只是手动复制内容并将其重新插入数据库。
mysql-5.7 到 MariaDB 的就地升级,对于 JSON 类型需要一个插件来读取其数据格式:
将以下内容添加到您的 MariaDB 服务器配置中:
plugin_load_add=mysql_json=type_mysql_json
plugin_maturity=alpha
运行 mysql_upgrade --force
提取所有 JSON 数据类型并进行转换。
或者 ALTER TABLE news FORCE
更改那个 table。
在从 MySQL 迁移到 MariaDB 时的一般情况下修复 Unknown data type "MYSQL_JSON"
。
您有 2 个选择。
- 从 MySQL 转储您的数据库并将其导入 MariaDB。
- 修复所有具有 JSON 类型列的表。
第一个选项很简单,但要按照 MariaDB website 的建议选择第二个选项。
停止 MySQL 服务,如果它是 运行ning
sudo service mysql stop
启动一个新的 mysql 服务器实例
mysqld --no-defaults --datadir=<Your data dir directory> --lc-messages_dir=./share --plugin-dir=<path to directory containing type_mysql_json.so> --plugin-maturity=alpha
默认datadir目录(mysql 5.7,ubuntu 18.04)是/var/lib/mysql/
默认插件目录是/usr/lib/mysql/plugin
保持服务器 运行 启动新的 MySQL command-line 客户端并安装 mysql_json 插件。
install soname 'type_mysql_json';
更改所有具有 JSON 类型列的表。
ALTER TABLE `database_name`.`table_name` FORCE;
停止 MySQL 服务器实例并启动 MySQL 服务,一切都应该没问题。
ps: 如果您有很多包含 JSON 类型列的表(如我的情况),您可以使用此命令获取列表在所有命令中,您必须 运行 才能修复所有表
SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` FORCE;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "<YOUR_DATABASE_NAME>";
根据 MariaDB 的网站,您可以简单地将 MySQL 替换为 MariaDB。
太好了,我想,但是在安装 MariaDB (10.5.7) 之后,我的一些 InnoDB tables 已损坏。错误是 Unknown data type "MYSQL_JSON"
。
其中一个损坏的 table 还在 phpmyadmin 中显示“正在使用”,我根本无法访问它。
所以,我到处寻找解决方案,显然 MariaDB 不支持该类型。有什么办法可以解决这个问题吗?一定有一些方法可以隐藏这些列,对吗?
我试图降级回 MySQL 5.7,但现在 MySQL 不再工作了,所以我再次重新安装了 MariaDB。我也找不到任何降级指南。
这是从我的本地测试数据库创建的损坏 table 的创建 table 语句。我能够成功地 mysqldump 所有其他的。只是不是这个。诚然,我有 1 天前的备份,但是一整天丢失工作无论如何都不是一件好事。
CREATE TABLE `news` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author_id` int(10) unsigned DEFAULT NULL,
`title` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL,
`content` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`excerpt` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`sources` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '(DC2Type:json)',
`header` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`copyright` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`category` smallint(5) unsigned DEFAULT NULL,
`featured` tinyint(1) NOT NULL,
`language` smallint(5) unsigned NOT NULL,
`published` datetime DEFAULT NULL,
`status` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `IDX_1DD39950F675F31B` (`author_id`),
CONSTRAINT `FK_1DD39950F675F31B` FOREIGN KEY (`author_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=167 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
table 由 Doctrine ORM 自动生成。
如果我能以某种方式从 table 中获取几行数据,那将是我的一周。我只需要最后一天的内容栏。 我从备份中恢复了系统 运行。就是那些新闻不见了。
更新
我能够在 /var/lib/mysql/{mydatabase}/
下找到一个 .ibd 文件,其中包含我需要的所有纯文本数据。我只是手动复制内容并将其重新插入数据库。
mysql-5.7 到 MariaDB 的就地升级,对于 JSON 类型需要一个插件来读取其数据格式:
将以下内容添加到您的 MariaDB 服务器配置中:
plugin_load_add=mysql_json=type_mysql_json
plugin_maturity=alpha
运行 mysql_upgrade --force
提取所有 JSON 数据类型并进行转换。
或者 ALTER TABLE news FORCE
更改那个 table。
在从 MySQL 迁移到 MariaDB 时的一般情况下修复 Unknown data type "MYSQL_JSON"
。
您有 2 个选择。
- 从 MySQL 转储您的数据库并将其导入 MariaDB。
- 修复所有具有 JSON 类型列的表。
第一个选项很简单,但要按照 MariaDB website 的建议选择第二个选项。
停止 MySQL 服务,如果它是 运行ning
sudo service mysql stop
启动一个新的 mysql 服务器实例
mysqld --no-defaults --datadir=<Your data dir directory> --lc-messages_dir=./share --plugin-dir=<path to directory containing type_mysql_json.so> --plugin-maturity=alpha
默认datadir目录(mysql 5.7,ubuntu 18.04)是/var/lib/mysql/
默认插件目录是/usr/lib/mysql/plugin
保持服务器 运行 启动新的 MySQL command-line 客户端并安装 mysql_json 插件。
install soname 'type_mysql_json';
更改所有具有 JSON 类型列的表。
ALTER TABLE `database_name`.`table_name` FORCE;
停止 MySQL 服务器实例并启动 MySQL 服务,一切都应该没问题。
ps: 如果您有很多包含 JSON 类型列的表(如我的情况),您可以使用此命令获取列表在所有命令中,您必须 运行 才能修复所有表
SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` FORCE;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "<YOUR_DATABASE_NAME>";