2026年8月4日
2026年8月4日
MySQLにリモートから接続する方法
はじめに
MySQLデータベースは、ウェブアプリケーションやソフトウェア開発において広く使用されています。しかし、デフォルトではローカルのホストからしか接続できず、リモートマシンからは接続できない設定になっています。この記事では、MySQLサーバーにリモートからのアクセスを許可する方法について詳しく説明します。
症状・背景
MySQLデータベースにリモート接続が必要になる主な場面:
- データベースのバックアップや復元作業
- クライアントがサーバーと同じネットワーク環境にいない場合
- 他の開発者が遠隔地からアクセスする必要がある場合
- 安全性を確保しつつ、柔軟なアクセス設定をしたい場合
手順・設定方法
ステップ1: MySQLのリモート接続を有効にする
# ユーザー権限テーブルの情報を取得します。
mysql -u root -p
# mysql> USE mysql;
# mysql> SELECT Host, User FROM user;
# すべてのIPアドレスからのアクセスを許可するため、次のコマンドを実行します。
# 特定のIPアドレスのみを許可したい場合は、「%」をそのIPアドレスに置き換えてください。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
# データベースサーバーの設定ファイルを編集します(通常は/etc/my.cnf)。
# bind-address行に、MySQLがリッスンするIPアドレスを指定します。
vi /etc/mysql/my.cnf
# MySQLサービスを再起動して変更を有効化します。
sudo systemctl restart mysql
ステップ2: ファイアウォール設定の調整
# 現在のファイアウォールルールを確認します。
sudo ufw status
# MySQLへのアクセスポート(通常は3306)を開きます。
sudo ufw allow 3306/tcp
# 変更を保存して再起動します。
sudo systemctl restart ufw
ステップ3: 安全性の強化
# MySQLのリモートアクセスが許可された後、セキュリティを強化するための以下の手順を行います。
# ファイアウォールで特定のIPアドレスからのみアクセスを許可します。
sudo ufw allow from 192.168.0.1 to any port 3306
# MySQLのrootユーザーにリモートアクセスを禁止し、代替ユーザーを作成します。
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' IDENTIFIED BY 'securepassword';
FLUSH PRIVILEGES;
# 設定ファイルでrootユーザーからのリモート接続を無効化します。
vi /etc/mysql/my.cnf
# [mysqld]セクションに次の行を追加:
# bind-address = 127.0.0.1
ステップ4: リモートからMySQLサーバーへの接続テスト
# MySQLクライアントを使用してリモートからの接続を試みます。
mysql -u newuser -h server-ip-address -p
注意事項
- デフォルトの設定では、MySQLはlocalhostでのみリッスンしています。これを変更するには、bind-addressオプションを使用します。
- リモートアクセスを有効にする前に、必ずユーザー権限とセキュリティポリシーを確認してください。
- MySQLサーバーへの接続は、データの機密性や整合性を保護するために強力なパスワードを使用することを強く推奨します。
- ファイアウォール設定が適切に調整されていることを確認し、非必要となるIPアドレスからのアクセスをブロックしてください。
まとめ
1. ユーザー権限の設定: 特定のユーザーに対してリモート接続用のパスワードと特権を割り当てます。
2. bind-addressの変更: MySQLがリッスンするIPアドレスを適切に設定します。
3. ファイアウォールの調整: 必要なTCPポートを開き、セキュリティポリシーに基づいてアクセス制限を行います。
4. 接続テスト: リモートマシンからMySQLサーバーへの接続が確立できることを確認します。
5. 安全な実装: セキュアなパスワードの使用と、特定IPからのみの接続許可を検討する。
関連記事: