外部連接mysql docker容器異常


為了方便,使用python測試連接mysql容器

腳本內容非常簡單

#!/usr/bin/python3
import pymysql

conn=pymysql.connect(host="localhost",user="root",port=3306,password="12345",database="mydb")
cursor=conn.cursor()
cursor.execute("select count(*) from mydb.t")
cursor.close()
conn.close()

執行上述腳本后,發生以下異常

Traceback (most recent call last):
  File "./p.py", line 6, in <module>
    conn=pymysql.connect(host="localhost",user="root",port=3306,password="12345",database="mydb")
  File "/usr/local/lib64/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/pymysql/connections.py", line 325, in __init__
    self.connect()
  File "/usr/local/lib64/python3.6/site-packages/pymysql/connections.py", line 598, in connect
    self._get_server_information()
  File "/usr/local/lib64/python3.6/site-packages/pymysql/connections.py", line 975, in _get_server_information
    packet = self._read_packet()
  File "/usr/local/lib64/python3.6/site-packages/pymysql/connections.py", line 657, in _read_packet
    packet_header = self._read_bytes(4)
  File "/usr/local/lib64/python3.6/site-packages/pymysql/connections.py", line 707, in _read_bytes
    CR.CR_SERVER_LOST, "Lost connection to MySQL server during query")
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')

從錯誤信息看,是不能夠正常連接到OMC,剛開始懷疑是pymysql.connect方法中傳遞的參數不正確,但無論怎么修改,始終出現2013的異常,后來查看mysql配置文件,發現存在一條配置

bind_address=127.0.0.1

改參數限制了mysql不能被遠程訪問,所以在容器外部沒法訪問到容器內部的mysql,造成2013異常,注釋掉改配置,重啟mysql docker容器,訪問正常

另外如果將改配置對應的ip地址改為宿主機地址,還會出現如下異常

Traceback (most recent call last):
  File "./p.py", line 6, in <module>
    conn=pymysql.connect(host="localhost",user="root",port=3306,password="12345",database="mydb")
  File "/usr/local/lib64/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/pymysql/connections.py", line 325, in __init__
    self.connect()
  File "/usr/local/lib64/python3.6/site-packages/pymysql/connections.py", line 630, in connect
    raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")

且mysql未正常啟動,錯誤日志中有如下信息

2019-10-15T02:27:03.769286Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2019-10-15T02:27:03.791952Z 0 [ERROR] [MY-010262] [Server] Can't start server: Bind on TCP/IP port: Cannot assign requested address
2019-10-15T02:27:03.791960Z 0 [ERROR] [MY-010257] [Server] Do you already have another mysqld server running on port: 3306 ?
2019-10-15T02:27:03.792191Z 0 [ERROR] [MY-010119] [Server] Aborting
2019-10-15T02:27:04.855205Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.17)  MySQL Community Server - GPL.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM