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;
参考:
https://qiita.com/kako351/items/bad052c55cfe6d85903d
https://qiita.com/whisper0077/items/06add22b692a25bd19b5
テーブル名にこだわりがないのであれば、テーブル名を変えただけが早そうです…。
今回はdevelop環境だったのでこういう対応で済ませましたが、productionではやりたくないですね…
なにかもっといい解決法があったら教えてほしいです。
Author And Source
この問題について(MySQLのPartition使った時に出たエラーの対応メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/kyon_g/items/9daa0f2aa97562f57c4f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .