source

MariaDB: 알 수 없는 데이터 유형 "MYSql_JSON"

itover 2022. 11. 21. 22:18
반응형

MariaDB: 알 수 없는 데이터 유형 "MYSql_JSON"

MariaDB 웹사이트에 따르면 MySQL을 MariaDB로 간단히 대체할 수 있습니다.훌륭하다고 생각합니다만, MariaDB(10.5.7)를 인스톨 한 후, InnoDB 테이블이 일부 파손되었습니다.에러는Unknown data type "MYSQL_JSON"파손된 테이블 중 하나가 phpmyadmin으로 "in use"라고 표시되어 있어 전혀 액세스할 수 없습니다.

모든 곳에서 솔루션을 찾고 있었는데 MariaDB는 이 유형을 지원하지 않는 것 같습니다.그것을 고칠 방법이 있나요?저 기둥들을 숨길 방법이 있을 거야, 그렇지?

MySQL 5.7로 다운그레이드를 시도했지만 MySQL이 작동하지 않아 MariaDB를 다시 설치했습니다.다운그레이드 가이드도 찾을 수 없었습니다.


여기 내 로컬 테스트 데이터베이스에서 만든 손상된 테이블에 대한 테이블 생성 문이 있습니다.나는 다른 모든 것들을 성공적으로 넘길 수 있었다.이거 말고.네, 하루 전에 밀린 일이 있지만 하루 종일 일을 잃는 것은 좋은 일이 아닙니다.

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

테이블은 Authoric ORM에 의해 자동으로 생성됩니다.

그 테이블에서 몇 줄의 데이터만 얻을 수 있다면 일주일이 될 거예요.마지막 날 내용란만 있으면 돼요.백업에서 시스템을 복구했습니다.그런 소식만 없어.


갱신하다

.ibd 파일을 찾을 수 있었습니다./var/lib/mysql/{mydatabase}/내가 필요한 모든 데이터를 일반 텍스트로 담고 있습니다.수동으로 내용을 복사하고 데이터베이스에 다시 삽입하는 중입니다.

고치다Unknown data type "MYSQL_JSON"MySQL에서 MariaDB로 마이그레이션하는 일반적인 경우입니다.

두 가지 옵션이 있습니다.

  1. MySQL에서 데이터베이스를 덤프하여 MariaDB로 Import합니다.
  2. JSON 유형 열이 있는 모든 테이블을 수정합니다.

첫 번째 옵션은 간단하지만 MariaDB 웹사이트에서 제안하는 두 번째 옵션을 선택하는 것입니다.

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 디렉토리(표준 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 type 컬럼을 포함하는 테이블이 많이 있는 경우(내 경우처럼) 이 명령을 사용하여 모든 테이블을 수정하기 위해 실행해야 하는 모든 명령 목록을 가져올 수 있습니다.

SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` FORCE;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "<YOUR_DATABASE_NAME>";

JSON 유형의 경우 mysql-5.7을 MariaDB로 인플레이스 업그레이드하려면 데이터 형식을 읽기 위한 플러그인이 필요합니다.

MariaDB 서버 구성에 다음 항목을 추가합니다.

plugin_load_add=mysql_json=type_mysql_json
plugin_maturity=alpha

실행합니다.mysql_upgrade --forceJSON을 사용하다

아니면 그냥ALTER TABLE news FORCE그 테이블 하나를 바꾸려고.

언급URL : https://stackoverflow.com/questions/64796154/mariadb-unknown-data-type-mysql-json

반응형