つい最近とあるアプリの開発中、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
引き続き根本的な原因は調べつつ分かり次第、また記事にしたいと思います!