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로 마이그레이션하는 일반적인 경우입니다.
두 가지 옵션이 있습니다.
- MySQL에서 데이터베이스를 덤프하여 MariaDB로 Import합니다.
- 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
'source' 카테고리의 다른 글
| PHP의 변수에 문자열을 추가할 수 있습니까? (0) | 2022.11.21 |
|---|---|
| Node.js 파일 확장자를 가져옵니다. (0) | 2022.11.21 |
| 미포함(약속)TypeError: 'in' 연산자를 사용하여 다음 위치에서 'validateStatus'를 검색할 수 없습니다. (0) | 2022.11.21 |
| 오브젝트 배열에서 중복된 모든 것을 제거하려면 어떻게 해야 합니까? (0) | 2022.11.21 |
| Vuex Typescript Component.ts 파일에 "Member 'someMutation'에 암묵적으로 'any' type이 있습니다."라는 오류가 표시됨 (0) | 2022.11.21 |