根据MariaDB的网站,你可以简单地用MariaDB替换MySQL。很好,我想,但是在安装了MariaDB (10.5.7)之后,我的一些InnoDB表被损坏了。错误是Unknown data type "MYSQL_JSON"。其中一个损坏的表在phpmyadmin中也显示“正在使用”,而我根本无法访问它。
所以,我一直在寻找一种解决方案,显然MariaDB不支持这种类型。有什么办法可以解决这个问题吗?一定有办法隐藏那些柱子,对吧?
我试图降级回MySQL 5.7,但现在MySQL不能工作了,所以我重新安装了MariaDB。我也找不到任何降级指南。
下面是一个create table语句,用于损坏的表,它来自我本地的test-database。我能够成功地mysqldump所有其他的。只是不是这一个。诚然,我有一天前的备份,但失去一整天的工作无论如何都不是一件好事。
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文件,它包含了我需要的所有纯文本数据。我只是手动复制内容并将其插入到数据库中。
发布于 2020-11-13 05:01:56
对于JSON类型的mysql-5.7到MariaDB的就地升级需要一个插件来读取它的数据格式:
将以下内容添加到MariaDB服务器配置中:
plugin_load_add=mysql_json=type_mysql_json
plugin_maturity=alpha运行mysql_upgrade --force获取所有的JSON数据类型并对其进行转换。
或者,只需使用ALTER TABLE news FORCE来更改该表。
https://stackoverflow.com/questions/64796154
复制相似问题