MySQL - 5.6 系で mysqldump すると SET OPTION エラー!

Updated:


※この記事は11年以上前に投稿されたもので、情報が古い可能性があります。

MySQL 5.6 系サーバに対して mysqldump コマンドを使用すると、場合によっては(以下の前提条件の場合)エラーになります。

以下、現象、原因、対策についての記録です。

0. 前提条件Permalink

  • Linux Mint 14 Nadia (64bit) での作業を想定。
  • MySQL 5.6.11 サーバ・クライアントをソースをビルドしてインストールしている。
  • MySQL 5.5.31 クライアントも別途インストールしている。(別のパッケージとの依存性の関係で必要なため)
  • ローカルマシンでのテスト用なので、サーバもクライアントも同一マシンにインストールしている。

1. 現象Permalink

mysqldump コマンドでダンプ出力しようとすると以下のようなエラーとなる。

mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': 
You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near 
'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)

(改行しているが、実際は1行で出力される)

2. 原因Permalink

まず、MySQL 5.5 までの mysqldump は、内部的に SET OPTION SQL_QUOTE_SHOW_CREATE=1 を実行している。
しかし、MySQL 5.6 では古い SET OPTION ... 構文が完全に廃止されている。
今回実行しようとした mysqldump コマンドは 5.5.31 のコマンドであったため、SET OPTION ... コマンドの廃止された 5.6.11 サーバに対してはエラーとなっていた。
ちなみに、5.0 で SET ... 構文に置き換える対応がされていたようだが、mysqldump だけは 5.5 まで残っていたようだ。

3. 対策Permalink

今回の当方の環境の場合、5.5.31 クライアント以外に 5.6.11 クライアントもインストールされていることになるので、5.6.11 クライアントのコマンドをフルパスで指定する。
単純に mysqldump コマンドを打てば、パッケージでインストールしたパスの通っている 5.5.31 のコマンドが実行されるが、それを回避するために 5.6.11 のコマンドをフルパスで指定するということ。


通常、サーバとクライアントのバージョンが揃っていないことは多々あると思います。
また、通常同一マシンにサーバとクライアントをインストールする場合は、バージョンは揃うはずです。
今回の当方の場合、幸いにも 5.5 系、5.6 系両方クライアントが使える環境でしたので、簡単に対応できた次第です。

以上。





 

Sponsored Link

 

Comments