質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

406閲覧

MySQLに外部から接続できない問題

shinya117

総合スコア10

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/11/22 06:25

実現したいこと

ここに実現したいことを箇条書きで書いてください。
・VPS上のMySQLに、外部(他のPC)からアクセスしたい。

前提

VPS上に設置したデータベース(MySQL)に、外部PCのPythonプログラムから接続するプログラムを作っています。

発生している問題・エラーメッセージ

MySQLに接続できない。
Pythonで接続しようとすると、下記エラーメッセージが表示され接続ができません。

mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on '157.7.121.100:3306' (10060)

該当のソースコード

python

1import mysql.connector 2 3# MySQL接続情報 4db_config = { 5 'host': '157.7.121.100', 6 'user': 'root', 7 'password': 'SI011SM50.', 8 'database': 'data001', 9} 10 11# MySQLに接続 12connection = mysql.connector.connect(**db_config) 13 14# カーソル作成 15cursor = connection.cursor() 16 17# クエリの実行例(テーブルのデータを取得) 18query = "SELECT * FROM table01" 19cursor.execute(query) 20 21# 結果取得 22result = cursor.fetchall() 23 24# 結果表示 25for row in result: 26 print(row) 27 28# クローズ 29cursor.close() 30connection.close()

試したこと

・IPアドレス、ポートが正しいか確認
・ユーザ、パスワードが正しいか確認
・ユーザ権限の確認(%でワイルドカードを指定)
・bind-addressを0.0.0.0に変更
・ファイヤーウォールの許可の確認
・データベースサーバーの再起動、実行されているか確認

補足情報(FW/ツールのバージョンなど)

3日間くらいずっとPCに張り付いて調べていましたが何を試してもダメでした。。。
どなたか詳しい方、ご教授ください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2023/11/22 07:34

・「IPアドレス、ポートが正しい」ということ ・「ユーザ、パスワードが正しい」ということ ・「ユーザ権限」 ・「bind-addressを0.0.0.0に変更」を行うための設定内容 ・「ファイヤーウォールの許可の確認」とは、実際にはファイアウォールの設定変更をしたことを意味すると思われるがその設定内容 これらを具体的に記してください (このコメント欄に書くのではなく、質問文を編集して書いてください)。
tanat

2023/11/23 09:27

ソースコードとエラーメッセージにグローバルIPアドレスとMySQLの接続情報が入ってしまっているので、とりあえず最初にMySQLのパスワードを変更することをお勧めします
guest

回答1

0

似たような作業をしたことがあるので気になった点コメントします。
(インフラエンジニアですので、pythonのコードに深い知識はないです。)

  • NW的に疎通可能確認する。

具体的には外部(他のPC)からVPS上のMySQLに対してPINGが通るか確認。
PINGが通る場合、nmap(Linux)、nc(Linux)、Test-NetConnection (Windows)などのコマンドで対象のportが開いているか確認。
※MySQLはデフォルトで3306のportを使用している。

  • MySQLのrootユーザーのホストを確認する。

デフォルトだとMySQLのrootユーザーはlocalhost(MySQLがインストールされているサーバ)からしか接続できないはずです。
サーバからMySQLに接続し下記SQL文を実行してください。

SQL

1select user,host from mysql.user where user="root";

hostの列がlocalhostになっていると思います。
そのためlocalhost以外からMySQLに接続する場合は別途ユーザーを作成し、必要な権限を付与して再度、そのユーザーから接続を試してみてください。

関係あるか不明ですが下記コードに

Python

1db_config = { 2 'host': 'xxx.xxx.xxx.xxx', 3 'user': 'root', 4 'password': 'xxx', 5 'database': 'xxx', 6}

Python

1'port': '3306'

の記載を追記してみてはどうでしょうか?
(MySQLに設定しているportが3306でFWなども空いている前提)
また私の場合は下記記載の形式にしています。

Python

1conn = mydb.connect( 2 user='xxxx', 3 password='xxxx', 4 host='xxx.xxx.xxx.xxx', 5 port='3306', 6 database='xxxx' 7) 8

投稿2024/08/31 16:33

編集2024/08/31 16:38
database

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問