在上一篇文章中
我們已經安裝好一台 ubuntu 20.04 並安裝了 mySQL ,版本是 8.0.44
現在我們在另一台電腦(windows)上開發 flask
一個最簡單的 flask 寫法如下
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Welcome to My Watchlist!'
if __name__ == '__main__':
app.run(debug=True)
然後需要安裝 mySQL client 的套件,我選的套件是 mysql-connector-python
所以安裝方法就是 pip install mysql-connector-python
這裡有個坑,套件名稱千萬不要打成 mysql-connector
安裝好之後可以把程式改成下面這樣
from flask import Flask
import mysql.connector
from mysql.connector import Error
app = Flask(__name__)
# Establish the connection
def get_db_connection():
try:
conn = mysql.connector.connect(
user='mike',
password='pass',
host='192.168.0.31',
port=3306,
database='ocrDB',
autocommit=True
)
return conn
except Error as e:
print(f"Error: {e}")
return None
@app.route('/')
def hello():
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SHOW TABLES')
tables = cursor.fetchall()
cursor.close()
conn.close()
return 'Welcome to My Watchlist!'
if __name__ == '__main__':
app.run(debug=True)
然後執行,觸發 def hello() 就會報錯了
詢問 chatgpt 後歸納成幾個原因
Summary of Steps to Resolve:
- Ensure MySQL is running on
192.168.0.31
. - Open port 3306 on the firewall of the MySQL server.
- Update MySQL
bind-address
in the configuration to allow remote connections. - Grant remote access privileges to the MySQL user.
1. 在 mySQL 安裝的 ubuntu 上輸入 sudo service mysql status 即可確認
2. 這邊 chatgpt 丟出了一句 sudo ufw allow 3306
$ ufw enable // 啟動防火牆,執行後開機也會自動啟動
$ ufw disable // 關閉防火牆
$ ufw status // 查看防火牆狀態
$ ufw status verbose // 查看防火牆詳細狀態
基本上就是把 3306 port 打開,這部分沒啥問題
3. 這邊 chatgpt 說
On the MySQL server, check the MySQL configuration file (my.cnf
or my.ini
), usually located in /etc/mysql/my.cnf
or /etc/my.cnf
(depending on the distribution). Ensure that the bind-address
is set to either 0.0.0.0
or the specific server IP. Example:
bind-address = 0.0.0.0
沒問題,就按照它說的去改
在我的環境中,設定檔是位於 /etc/mysql/my.cnf
改好之後重新啟動 mySQL
sudo systemctl restart mysql
然後 mySQL 就掛了!
google 一下發現有人說你得寫成下面這樣才行
[mysqld]
bind-address = 0.0.0.0
存檔,重啟 mySQL 就成功了
4. 在上一篇文章我們就有授權給 remote user 了
所以這部分沒問題
順道一提這個 database='ocrDB' 是我事先在 ubuntu 上用 mySQL command line 開好的
改到目前這樣就可以用 debug 模式看到 cursor 拿回來的 table 是空的 (因為還沒開 table)
沒有 error 出現,可以順利跑完
以上,做個初學者紀錄,這篇就講到這
沒有留言:
張貼留言