MySQLは多くのシステムやアプリケーションで使用されるデータベースです。この記事では、Pythonを使用してMySQL Ver 8.0.4
に外部から接続する方法を解説します。特に、Ubuntu 22における環境での設定手順をわかりやすく説明します!
MySQL外部接続の設定
Ubuntu 22でMySQLに外部接続を許可するには、以下の手順を実行します。
1 MySQLユーザーに外部接続を許可する
以下のコマンドを使用して、MySQLユーザーにすべてのIPアドレスからの接続を許可します。
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
username
: 接続するユーザー名password
: 設定するパスワード
2 MySQL設定ファイルの編集
MySQLの設定ファイルを開き、外部接続を許可します。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
以下の行を見つけ、修正してください:
bind-address = 0.0.0.0
0.0.0.0
に設定すると、すべてのIPアドレスからの接続を許可します。
3 ファイアウォールの設定
ポート3306を開放します:
sudo ufw allow 3306/tcp
sudo ufw reload
4 MySQLサービスの再起動
設定を反映させるために、MySQLを再起動します。
sudo systemctl restart mysql
必要なPythonライブラリのインストール
MySQLにPythonから接続するために、mysql-connector-python
ライブラリをインストールします。
pip install mysql-connector-python
PythonでMySQLに接続するサンプルコード
以下のコードを実行することで、MySQLに外部から接続できます。
import mysql.connector
from mysql.connector import Error
def connect_to_mysql(host, user, password, database, port):
"""通常はPort番号はなくても問題ないので必要に応じて削除して使用してください"""
try:
# MySQLデータベースに接続
connection = mysql.connector.connect(
host=host, # MySQLサーバーのIPアドレスまたはホスト名
user=user, # ユーザー名
password=password, # パスワード
database=database, # 接続するデータベース名
port=port # 必要に応じてポート番号
)
if connection.is_connected():
print("MySQLデータベースに接続しました")
db_info = connection.get_server_info()
print(f"MySQLサーバーバージョン: {db_info}")
# クエリを実行
cursor = connection.cursor()
cursor.execute("SELECT DATABASE();")
record = cursor.fetchone()
print(f"現在のデータベース: {record}")
except Error as e:
print(f"エラーが発生しました: {e}")
finally:
if connection.is_connected():
cursor.close()
connection.close()
print("MySQL接続が閉じられました")
# 使用例
connect_to_mysql(
host="192.168.1.100", # MySQLサーバーのIPアドレス
user="username", # MySQLユーザー名
password="password", # ユーザーパスワード
database="testdb", # 使用するデータベース名
port=[PortNumber] # デフォルトポート(必要に応じて)
)
注意点とセキュリティ対策
- パスワードの管理
環境変数や安全なストレージに保存しましょう。 - IP制限
必要なIPアドレスだけ接続を許可する設定にしましょう。 - SSL/TLSの使用
外部接続にはSSL/TLSを使用して通信を暗号化します。
まとめ
Ubuntu 22環境でのMySQL Ver 8.0
にPythonから外部接続する方法を解説しました。環境の設定からコード例まで、この記事を参考に効率的なデータベース操作を行いましょう!
コメント