0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLのPartition使った時に出たエラーの対応メモ

Posted at

###環境
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ってそういうのどうしたらいいんだ?:thinking:

###検証

####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)

何もわからん…:thinking:

####対応

データベース自体が壊れていると判断。
仮のデータベースを作成し、そこに現状のデータを退避し、既存データベースをドロップして対応しました:cold_sweat:

/*退避用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;

参考:
https://qiita.com/kako351/items/bad052c55cfe6d85903d
https://qiita.com/whisper0077/items/06add22b692a25bd19b5

テーブル名にこだわりがないのであれば、テーブル名を変えただけが早そうです…。
今回はdevelop環境だったのでこういう対応で済ませましたが、productionではやりたくないですね…:cold_sweat:

なにかもっといい解決法があったら教えてほしいです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?