【MariaDB/MySQL】外部から接続ができない:外部接続を許可する設定方法
2023.01.14 /
本記事ではMariaDB/MySQLにおける、外部からの接続を許可する設定方法について解説していきます。
外部からMariaDB/MySQLに接続して、データベースの情報を取得・更新・削除といった操作を行いたい場面はとても多いです。
しかし外部からMariaDB/MySQLに接続できるようにするには、設定ファイルの編集やファイアウォールの設定、外部接続可能なユーザーの作成といった操作が必要になります。
本記事を通して、外部からMariaDBやMySQLに接続するための方法について理解を深めてください。
ここでは以下構成で操作を行っております。
- OS:Ubuntu Server
- Ubuntuバージョン:20.04.3 LTS
- データベース:MariaDB
記事内ではMariaDBを使って解説していますが、MySQLでも同様の操作で外部から接続できるようにできます。MySQLを利用しているユーザーの方も安心して本記事で紹介している方法を実行してください。
MariaDBとは
MariaDBとはMySQLから派生したデータベースです。MySQLの開発メンバーが開発しているため、機能や使用方法においてもMySQLと大きな違いはないです。
データベースについて詳しく知りたい方は以下記事をご参照ください。
データベースとは?機能と特徴(SQLite、MySQL、TinyDB)
MariaDBのインストール方法や初期設定については以下記事をご参照ください。
本記事で利用しているMariaDBのバージョンは以下の通りです。
MariaDB [(none)]> status
--------------
mysql Ver 15.1 Distrib 10.3.37-MariaDB, for debian-linux-gnu (aarch64) using readline 5.2
…
Server: MariaDB
Server version: 10.3.37-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04
…
MariaDBに外部から接続できない問題
単にサーバーにMariaDBをインストールして初期設定を行っただけでは外部からMariaDBに接続することはできないです。
多くのMariaDBユーザーが一度は直面する問題かと思います。
私はクライアントからLinuxサーバーのMariaDBにPythonスクリプトを使ってアクセスを試みたときにこの問題に直面しました。私の場合は次のようなエラーが表示されました。
OperationalError: (2002, "Can't connect to server on 'IP address' (10060)")
無事アクセスできるようになるまで一日を無駄にしてしまいました。
【Python】MySQLに接続してデータベース操作する方法(mysqlclient)
次項よりMariaDBに外部から接続するための設定について解説していきます。
MariaDBに外部から接続する設定方法
外部からMariaDBに接続するためには以下の設定を行っておく必要があります。
- ファイアウォールで3306ポートを解放する
- MariaDBの設定ファイルを編集
- 外部アクセスが可能なユーザーを作成
それぞれの設定について詳しく見ていきましょう。
ファイアウォールで3306ポートを解放する
MariaDBではデフォルトで3306のポート番号を使って接続します。使用している環境での使用するポート番号を確認したい場合は以下コマンドを実行してください。
MariaDB [(none)]> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
ここではUbuntuを使っているのでufwで3306ポートを許可します。
$ sudo ufw allow 3306
$ sudo ufw status
Status: active
To Action From
-- ------ ----
3306 ALLOW Anywhere
MariaDBの設定ファイルを編集
MariaDBの設定ファイルを編集します。設定ファイルの場所は環境によって異なります。以下に記すファイルのどれかが設定ファイルであることが多いです。
- /etc/mysql/mariadb.conf.d/50-server.cnf
- /etc/mysql/mariadb.conf.d/mysqld.cnf
- /etc/my.cnf
cnfファイルには「bing-address」の記載があります。
[mysqld]
…
bind-address = 127.0.0.1
上記の「127.0.0.1」ではlocalhostからしかアクセスができないことを意味します。そのためbind-addressには接続元のIPアドレスを指定する、またはコメントアウトしてください。
[mysqld]
…
#bind-address = 127.0.0.1
上記ではbind-addressをコメントアウトして、すべてのクライアントから接続可能にしています。
設定ファイルを編集したら一度再起動をしましょう。
$ sudo shutdown -r now
外部アクセスが可能なユーザーを作成
設定ファイルの編集と再起動が完了したら、次に外部アクセスが可能なユーザーを新たに作成します。
外部アクセスが可能なユーザー作成には以下コマンドを実行します。ここではユーザー名「test」、パスワードを「password」のユーザーを作成しています。
grant all privileges on *.* to 'test'@'%' identified by 'password' with grant option;
「%」はすべてのIPアドレスを許可することを意味します。IPアドレスを指定する場合は、%の部分にIPアドレスを記入してください。
ユーザーがうまく作成されたか以下コマンドで確認します。
MariaDB [(none)]> SELECT user, host FROM mysql.user
+------------+-----------+
| user | host |
+------------+-----------+
| test | % |
| root | localhost |
+------------+-----------+
MariaDBへの接続確認
ここまでの操作で外部から作成したユーザーを使うことでMariaDBにアクセスできるようになりました。
接続できるか外部のクライアントから接続を試してみてください。
mysql -h [ip address] -u test -p