Help us understand the problem. What is going on with this article?

AWS Auroraでダンプしたデータをmysqlにインポートしようとしたらはまった

More than 1 year has passed since last update.

Auroraでダンプしたデータをmysqlにインポートしようとしたらはまった

Aurora (MySQL 5.6.10)で mysqldumpして、そのデータをMySQL 5.7.24でインポートしようとしたら、見慣れないメッセージが出た。

ERROR 1726 (HY000) at line xxx: Storage engine 'InnoDB' does not support system tables. [mysql.columns_priv]

mysql.columns_priv っていうテーブルがInnoDBで、システム用のテーブルにはInnoDBが使えないって言われているっぽい。

Aurora上で下記のクエリを流したら、確かにmysql.columns_priv はInnoDBだった。

SELECT table_name, engine FROM information_schema.tables WHERE table_schema= 'mysql';

table_name,engine
aurora_s3_load_history,InnoDB
bin_log_md_table,InnoDB
bin_log_table,InnoDB
columns_priv,InnoDB
db,InnoDB
ddl_log_md_table,InnoDB
ddl_log_table,InnoDB
event,InnoDB
func,InnoDB
general_log,CSV
general_log_backup,CSV
help_category,InnoDB
help_keyword,InnoDB
help_relation,InnoDB
help_topic,InnoDB
innodb_index_stats,InnoDB
innodb_table_stats,InnoDB
metadata_md_table,InnoDB
metadata_table,InnoDB
ndb_binlog_index,InnoDB
plugin,InnoDB
proc,InnoDB
procs_priv,InnoDB
proxies_priv,InnoDB
rds_configuration,InnoDB
rds_global_status_history,InnoDB
rds_global_status_history_old,InnoDB
rds_history,InnoDB
rds_replication_status,InnoDB
rds_sysinfo,InnoDB
relay_log_md_table,InnoDB
relay_log_table,InnoDB
ro_replica_status,InnoDB
servers,InnoDB
slave_master_info,InnoDB
slave_relay_log_info,InnoDB
slave_worker_info,InnoDB
slow_log,CSV
slow_log_backup,CSV
tables_priv,InnoDB
time_zone,MyISAM
time_zone_leap_second,MyISAM
time_zone_name,MyISAM
time_zone_transition,MyISAM
time_zone_transition_type,MyISAM
user,InnoDB

原因

Aurora上でInnoDBになっていて、インポートしようとしたら使えませんって馬鹿なって思って、my.cnfをずっと調べていたけど見当違いだった。

↓のページに「MyISAM ストレージエンジンなど、特定の MySQL の特徴は Amazon Aurora で使用できません。」って書いてあった。

https://aws.amazon.com/jp/rds/aurora/faqs/

ユーザが作ったテーブルだけではなく、システムで作られるテーブルも例外ではない模様。

ダンプデータをインポートする際に下記のクエリが走ってしまう。

DROP TABLE IF EXISTS `columns_priv`;

これをやってしまうとmysqlが起動できなくなってしまう

解決法

mysqldumpのオプションで"--skip-add-drop-table"というのがあるので、それを付ければ"mysql.columns_priv"はdropされなくなるので、エラーは出なくなる。

https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html#option_mysqldump_add-drop-table

ただし"mysql.columns_priv"をCREATE TABLE するクエリは存在するので、インポートする際にエラーは出てしまう。
なのでインポート時に"-f"オプションを付けてエラーを無視してあげる。

無害なはずだけど、正確にやるならmysqudumpの時にDBを指定したほうが良いように思う。

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