6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UbuntuでMySQLの外部公開とログイン

Last updated at Posted at 2020-11-17

このタイトルのような記事は多く存在するのですが,Ubuntuでの例が少ないのか,
一筋縄では行かなかったので記事にすることにしました.

環境

Version
ホストOS Ubuntu Server 20.04.1 LTS
ホスト側MySQL Ver 8.0.22
クライアント側MySQL(MariaDB) 10.3.23-MariaDB

今回クライアント側はRaspberry Piを使用していたので,mariaDBを使用しています(raspbianにはmysqlが入らなかった?).
MySQLとmariaDBはほぼ互換なので,MySQL8系同士でやるなら問題ないと思います.

しかし,MariaDBの10.3はMySQLの5.7に相当するそうなんですが,
5系から8系にログインする際には問題が発生するのでそれについても以下で解説します.

ホスト側とクライアント側にそれぞれMySQLはインストール済みとします.

[ホスト側] 外部公開の設定

デフォルトではlocalhostしか接続できない設定になっているので,公開範囲を設定します.
/etc/mysql/mysql.conf.d/mysqld.cnfにアクセスして,bind-addressのところを以下のようにします.

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address                    = 0.0.0.0
default_authentication_plugin=mysql_native_password #クライアント側が5系の時にはこの行も追加.8系の時は不要.

設定が終わったらMySQLを再起動します.

$ /etc/init.d/mysql restart

[ホスト側] 接続用のユーザを作成

MySQLにログインし,以下のコマンドでユーザを作成します.
ここではadminがユーザ名,@以降の'%'は任意のIPアドレスを意味します.


CREATE USER 'admin'@'%' IDENTIFIED BY 'P@ssw0rd';
GRANT ALL ON *.* TO 'admin'@'%';

以下のコマンドで確認しましょう.

select user,host from mysql.user;

次のようになっていたらOKです.

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| admin            | %         |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

リモート側からログイン

リモート側からログインしてみましょう.

$ mysql -u admin -h [IPアドレス] -p

リモート側がMySQL8系ならこれでログインできると思います.

MySQL5系から8系にログインする

もしリモート側が5系の場合,以下のようなエラーがでると思います.

ERROR 1045 (28000): Plugin caching_sha2_password could not be loaded: /usr/lib/arm-linux-gnueabihf/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

これは認証プラグインが8系で変更されてしまったためです.
今回はホスト側の認証プラグインを5系で使用されていたものに変更する形で解決したいと思います.

MySQLの設定に次を加えます.
(上の設定ではこちらを加えた状態で記載しました)

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
default_authentication_plugin=mysql_native_password

設定が終わったらMySQLを再起動します.

$ /etc/init.d/mysql restart

これで先程と同じようにユーザを作成することで,認証プラグインが変更されます.
確認してみましょう.

mysql> select user,host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| admin            | %         | mysql_native_password |
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | auth_socket           |
+------------------+-----------+-----------------------+

参考URL

https://qiita.com/katzueno/items/e735950c7440f232ef27
https://sys-guard.com/post-8501/
https://symfoware.blog.fc2.com/blog-entry-2159.html
https://www.s-style.co.jp/blog/2018/05/1807/

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?