根据MariaDB的网站,您可以简单地将MySQL替换为MariaDB。
太好了,我想,但是安装 MariaDB (10.5.7) 后,我的一些 InnoDB 表已损坏。错误是未知数据类型“MYSQL_JSON”
。
其中一个损坏的表在 phpmyadmin 中也显示“正在使用”,但我根本无法访问它。
所以,我到处寻找解决方案,显然 MariaDB 不支持这种类型。有什么办法可以解决这个问题吗?一定有某种方法可以隐藏这些列,对吗?
我尝试降级回 MySQL 5.7,但现在 MySQL 不再工作,所以我再次重新安装了 MariaDB。我也找不到任何降级指南。
这是从我的本地测试数据库创建的损坏表的创建表语句。我能够成功地 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
该表由 Doctrine ORM 自动生成。
如果我能以某种方式从该表中获取几行数据,那我就度过了愉快的一周。我只需要最后一天的内容栏。 我通过备份让系统恢复运行。只是那些新闻丢失了。
更新
我能够在 /var/lib/mysql/{mydatabase}/
下找到一个 .ibd 文件,其中包含我需要的所有纯文本数据。我只是手动复制内容并将其插入回数据库。
最佳答案
修复从 MySQL 迁移到 MariaDB 时一般情况下的未知数据类型“MYSQL_JSON”
。
您有 2 个选择。
- 从 MySQL 转储数据库并将其导入 MariaDB。
- 修复所有具有 JSON 类型列的表。
第一个选项很简单,但要按照MariaDB website的建议选择第二个选项。 .
如果 MySQL 服务正在运行,请停止它
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 命令行客户端并安装 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>";
关于mysql - MariaDB:未知数据类型 "MYSQL_JSON",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64796154/