以下の環境です。
・PythonファイルはMacbook Air mid 2013
・MySQLサーバはGCE f1-micro上
Python
1import mysql.connector 2from sshtunnel import SSHTunnelForwarder 3 4SSH_BASTION_ADDRESS = HOST # ここに踏み台のGCEのIPアドレスを入れる 5SSH_PORT = PORT 6SSH_USER = USER 7SSH_PKEY_PATH = KEY_FILE 8MYSQL_HOST = HOST # ここにGCEのアドレスを書く 9MYSQL_PORT = 3306 10MYSQL_USER = USER 11MYSQL_PASS = PASSPHRASE 12MYSQL_DB = DBNAME 13 14 15if __name__ == '__main__': 16 with SSHTunnelForwarder( 17 (SSH_BASTION_ADDRESS, SSH_PORT), 18 ssh_pkey=SSH_PKEY_PATH, 19 ssh_username=SSH_USER, 20 ssh_password=PASSPHRASE, 21 remote_bind_address=(MYSQL_HOST, MYSQL_PORT), 22 local_bind_address=('localhost', MYSQL_PORT) 23 ): 24 connection = mysql.connector.connect( 25 host='localhost', 26 port=MYSQL_PORT, 27 user=MYSQL_USER, 28 passwd=MYSQL_PASS, 29 db=MYSQL_DB 30 # charset='utf8' 31 ) 32 pass # 何かクエリを叩いたりする 33 connection.close()
このように記載してGCE上のMySQLへ接続を試みています。
connection = mysql.connector.connect(
こちらの部分には入るので、SSH接続はうまく行っているようで、
MySQL に使っているポート番号なども確認しましたが3306で特に誤りはありませんでした。
db=MYSQL_DB
こちらの部分で実行したらほぼ同時に必ず以下のエラーが出ます。
2013: Lost connection to MySQL server during query
そこで、MySQL 側のタイムアウト設定などを見てみましたが、エラーが発生するまでに時間はほぼかかっていないため時間が原因でも無いと思います。
MySQL
1 2mysql> show variables like '%timeout%'; 3+-----------------------------+----------+ 4| Variable_name | Value | 5+-----------------------------+----------+ 6| connect_timeout | 10 | 7| delayed_insert_timeout | 300 | 8| have_statement_timeout | YES | 9| innodb_flush_log_at_timeout | 1 | 10| innodb_lock_wait_timeout | 50 | 11| innodb_rollback_on_timeout | OFF | 12| interactive_timeout | 28800 | 13| lock_wait_timeout | 31536000 | 14| net_read_timeout | 30 | 15| net_write_timeout | 60 | 16| rpl_stop_slave_timeout | 31536000 | 17| slave_net_timeout | 60 | 18| wait_timeout | 28800 | 19+-----------------------------+----------+
何が原因かわかる方、お知恵をお貸し頂けないでしょうか?
あなたの回答
tips
プレビュー