今日はなにの日。

気になったこと勉強になったことのメモ。

今日は、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 LinuxMySQLyumでそのままインストールすると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-gtid-purged

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をインストールするだけです。

Amazon Linuxだとちょっと大変です。

詳細は記述しませんが手順としては以下のとおりです。

  1. MariaDBを削除
  2. MySQLリポジトリを追加
  3. MySQLインストール
  4. 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)

MySQLMariaDBで今までハマったことなかったですが初めてハマりました。

CodeBuildのトラブルシュートも大変だった上に、まさかのものに躓いててちょっとショックでした。

MySQLをインストールしているのにMariaDBがインストールされるのやめてほしいなと思ってます。