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 で使用できません。」って書いてあった。
ユーザが作ったテーブルだけではなく、システムで作られるテーブルも例外ではない模様。
ダンプデータをインポートする際に下記のクエリが走ってしまう。
DROP TABLE IF EXISTS `columns_priv`;
これをやってしまうとmysqlが起動できなくなってしまう。
解決法
mysqldumpのオプションで"--skip-add-drop-table"というのがあるので、それを付ければ"mysql.columns_priv"はdropされなくなるので、エラーは出なくなる。
ただし"mysql.columns_priv"をCREATE TABLE するクエリは存在するので、インポートする際にエラーは出てしまう。
なのでインポート時に"-f"オプションを付けてエラーを無視してあげる。
無害なはずだけど、正確にやるならmysqudumpの時にDBを指定したほうが良いように思う。