MySQL의 Partition 사용했을 때에 나온 에러의 대응 메모

환경



AWS RDS Aurora 5.7.12

실행



mysql>  CREATE TABLE `hoge` (
    ->   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    ->   `parent_id` int(10) unsigned NOT NULL,
    ->   `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    ->   `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    ->   PRIMARY KEY (`id`),
    -> ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
    -> /*!50100 PARTITION BY HASH (parent_id)
    -> PARTITIONS 1024 */;
ERROR 1030 (HY000): Got error 168 from storage engine

에러적으로는 스토리지의 여유가 없는 것처럼 보인다.
여러가지 조사해도, 파일 용량을 비우고 싶은 기사가 많지만, RDS는 그러한 것 어떻게 하면 좋을까?

검증



Partition없이 실행



결과: OK
일반 테이블이 생겼습니다.
하지만 Partition을 사용하고 싶다…

DB 복사 및 생성 및 실행



결과:NG
같은 오류가 반환됩니다.

테이블 이름 변경 및 실행



결과: OK

mysql>  CREATE TABLE `fuga` (
    ->   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    ->   `parent_id` int(10) unsigned NOT NULL,
    ->   `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    ->   `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    ->   PRIMARY KEY (`id`),
    -> ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
    -> /*!50100 PARTITION BY HASH (parent_id)
    -> PARTITIONS 1024 */;
Query OK, 0 rows affected (14.62 sec)

아무것도 모릅니다 ...

대응



데이터베이스 자체가 손상되었다고 판단.
임시 데이터베이스를 만들고 현재 데이터를 저장하고 기존 데이터베이스를 삭제하여 해결했습니다.
/*退避用DBを作成*/
CREATE DATABASE temp;

/*現状のデータを退避*/
CREATE TABLE temp_db.users LIKE now_db.users;
...
INSERT INTO temp_db.users SELECT * FROM now_db.users;
...

/*壊れたDBを削除*/
DROP DATABASE now_db;

/*新しくDBを作成*/
CREATE DATABASE now_db;

RENAME TABLE temp_db.users TO now_db.users;
...

/*一時退避したDBを削除*/
DROP DATABASE temp_db;

참고:
htps : // 코 m / 가코 351 / ms / ba d052c55c 6d85903d
htps : // 이 m / ぃ s pe r0077 / ms / 06 d22b692 a 25bd19b5

테이블명에 구애가 없는 것이라면, 테이블명을 바꾼 것만이 빠르 것 같습니다…
이번은 develop 환경이었기 때문에 이런 대응으로 끝냈습니다만, production에서는 하고 싶지 않네요…

뭔가 더 좋은 해결책이 있다면 알려주세요.

좋은 웹페이지 즐겨찾기