41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

8.0のテーブルを5.7のFEDERATEDテーブルから参照するとエラー

タイトルの件

MySQL8.0に作られたテーブルをMySQL5.7のFEDERATEDテーブルから参照すると以下のようなエラーが出る場合があります。

ERROR 1429 (HY000): Unable to connect to foreign data source: SSL connection error: socket layer receive error
ERROR 1429 (HY000): Unable to connect to foreign data source: SSL connection error: unknown error number
ERROR 2026 (HY000): SSL connection error: socket layer receive error

オチから言うと、これもまたcaching_sha2_passwordによる影響です。

ドキュメント参照

ドキュメントのcaching_sha2_password-Compatible クライアントおよびコネクタを見てみると、以下のような記載があります。

caching_sha2_password について知るために更新されたクライアントまたはコネクタが使用可能な場合は、caching_sha2_password をデフォルトの認証プラグインとして構成された MySQL 8.0 サーバーに接続するときに互換性を確保するための最善の方法です。

次のクライアントおよびコネクタは、caching_sha2_password をサポートするようにアップグレードされています:

  • MySQL 8.0 (8.0.4 以上) の libmysqlclient クライアントライブラリ。 mysql や mysqladmin などの標準 MySQL クライアントは libmysqlclient ベースであるため、互換性もあります。

  • MySQL 5.7 (5.7.23 以上) の libmysqlclient クライアントライブラリ。 mysql や mysqladmin などの標準 MySQL クライアントは libmysqlclient ベースであるため、互換性もあります。

つまり、5.7.22以下(正確には8.0.3以下も含むが、使う人いないだろうし)のMySQL ServerでFEDERATEDテーブルを作った場合、そこから8.0のテーブルを参照時にcaching_sha2_passwordの影響でエラーが出ます。

回避方法

以下のいずれかになります。

  • 接続ユーザーをmysql_native_password認証に変更する
  • MySQL 5.7.22以下のMySQL Serverを5.7.23以上にアップグレードする(こっちのほうがbetter)

セキュリティ的にmysql_native_password認証を使うのをお勧めするのもなあ…と思いつつ、でも、既存環境をできるだけいじれない人はしょうがないですね。

その場合はFEDERATEDテーブルを作り直す必要があります。

アップグレードの場合は敷居高いかもしれませんが、安全に使うためにはご検討ください。