今日は、mysqldumpコマンドで「unknown variable 'set-gtid-purged=OFF'」が出るの日。
目次
とある日
CodeBuildでmysqldumpコマンドで「--set-gtid-purged」オプションをつけるとunknown variable
って怒られるので調べた内容です。
結論
- mysqldumpのバージョンが5.5.68-MariaDB
- MariaDBのmysqldumpだと「--set-gtid-purged」オプションはない
- Amazon LinuxでMySQLをyumでそのままインストールするとMariaDBがインストールされる
- ちゃんとMySQLをインストールしてからmysqldump実行しよう
説明
AWSでしか起きない現象だと思いますが背景も合わせて記述します。
CodeBuildでAmazon Linuxイメージを使用してMySQLのダンプを実行してました。
そのダンプを別アカウントでインポートしてましたが、以下エラーが出力されました。
ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
このエラーの解決方法は簡単で、ダンプするときに「--set-gtid-purged=OFF」をつけるだけです。(今回のメインの話ではないです)
ここからが本題です。
「--set-gtid-purged=OFF」をダンプするときにつけると以下エラーが出力されました。
bash-4.2# mysqldump -u root -p --set-gtid-purged=OFF mysqldump: unknown variable 'set-gtid-purged=OFF'
そんなはずはないとドキュメントを見ます。
ちゃんとオプションはありますし、「typoかな?」と思い文字検索しても一致します。
SET @@GLOBAL.GTID_PURGED を出力に追加するかどうか
MySQL :: MySQL 8.0 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム
色々と調べてみて、バージョンによってはエラーがでるissueを見つけたのでインストールしたmysqldumpのバージョンを見てみると。
bash-4.2# mysqldump -V mysqldump Ver 10.14 Distrib 5.5.68-MariaDB, for Linux (x86_64)
おや?MariaDBだ。
ドキュメントを調べてみると「--set-gtid-purged」オプションはないことがわかりました。
mysqldump - MariaDB Knowledge Base
ずっとMySQLのmysqldumpを実行しているつもりが、MariaDBのmysqldumpを実行していたようです。
両者間で、オプションが異なるのでエラーになっていたようです。
解決方法
解決方法はシンプルで、MariaDBではなくMySQLのmysqldumpをインストールするだけです。
詳細は記述しませんが手順としては以下のとおりです。
以下詳細な手順は以下をご覧ください。
AWS EC2 AmazonLinux2 MySQLをインストールする - Qiita
問題なくインストールできればオプションがあります。
bash-4.2# mysqldump --help |grep set-gtid-purged --set-gtid-purged[=name] bash-4.2# mysqldump -V mysqldump Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)
〆
MySQLとMariaDBで今までハマったことなかったですが初めてハマりました。
CodeBuildのトラブルシュートも大変だった上に、まさかのものに躓いててちょっとショックでした。