blog.kotamiyake.me

為せば成る、為さねば成らぬ何事も

つい最近とあるアプリの開発中、mysqldump でダンプを取得しようとした際に下記のようなエラーが発生して、ダンプ取得することができませんでした。

$ mysqldump --single-transaction -u root -p -h 127.0.0.1 -P 3307 xxxxxx_development > tmp/development.sql
Enter password: 
mysqldump: Couldn't execute 'SELECT COLUMN_NAME,                       JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"')                FROM information_schema.COLUMN_STATISTICS                WHERE SCHEMA_NAME = 'xxxxxxx_development' AND TABLE_NAME = 'accounts';': Unknown table 'COLUMN_STATISTICS' in information_schema (1109)

mysqldump のバージョンは8.0を使用しており、MySQL サーバー自体は5.7を利用していました。

$ mysqldump --version
mysqldump  Ver 8.0.13 for osx10.13 on x86_64 (Homebrew)
mysql --version
mysql  Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using  EditLine wrapper

とりあえず解決方法を、ということで調べるとどうやら –column-statistics=0 というオプションを付けると良いということでした。

mysqldumpでCouldn't executeと言われた時の対策 – Qiita

そのとおり実行してみると無事正常にダンプファイルが生成されました。

$ mysqldump --single-transaction -u root -p -h 127.0.0.1 -P 3307 --column-statistics=0 xxxxxx_development > tmp/development.sql

どうやら MySQL が8.0になったときに transactional data dictionary という機能?がサポートされたこと影響しているようです。

恐らく、想定されたシステムテーブルが見つからなくてエラーになっているのではないかと思います。

MySQL 8.0にアップデート!注意すべき点 – Database JUNKY

Upgrading to MySQL 8.0? Here is what you need to know… | MySQL Server Blog

引き続き根本的な原因は調べつつ分かり次第、また記事にしたいと思います!

前回の投稿からだいぶ時間が経ってしまったのですが、今回は機能追加のお知らせです!

Seamless にスケジュールの登録機能が追加されました。

まだ単純なスケジュールの登録、更新、削除にしか対応していませんが、今後は通知や参加者招待などの機能追加も予定しています!

まだまだ使い勝手の悪いところも多々ありますが、ぜひ利用してみてください!