Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@kyon_g

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

More than 1 year has passed since last update.

環境

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:

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

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kyon_g

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?