小弟最近想利用感測器搭配樹莓派,在戶外監測實時數據並回傳到家中的 NAS 資料庫中。
參考了許多網路上的資料後,我已經能在內網中存取資料庫並執行許多操作,以下是一個最簡潔有力的測試程式:
import mysql.connector
from mysql.connector import Error
try:
# 連接 MySQL/MariaDB 資料庫
connection = mysql.connector.connect(host='192......',
port="3307",
user='......',
password='......') # 密碼
if connection.is_connected():
# 顯示資料庫版本
db_Info = connection.get_server_info()
print("資料庫版本:", db_Info)
# 顯示目前使用的資料庫
cursor = connection.cursor()
cursor.execute("SELECT DATABASE();")
record = cursor.fetchone()
print("目前使用的資料庫:", record)
except Error as e:
print("資料庫連接失敗:", e)
finally:
if (connection.is_connected()):
cursor.close()
connection.close()
print("資料庫連線已關閉")
在內網中可以正確執行
資料庫版本: 5.5.5-10.3.32-MariaDB
目前使用的資料庫: (None,)
資料庫連線已關閉
在外網則會逾時無法連接資料庫
資料庫連接失敗: 2003: Can't connect to MySQL server on '192......:3307' (60 Operation timed out)
目前已經爬文,試過在 /var/packages/MariaDB10/etc 裡新增 my.cnf 檔案
[mysqld]
bind-address=0.0.0.0
skip_networking=0
資料庫的存取權限也完全打開
同時將防火牆設定為允許3307連接埠的操作
但四處爬文打滾了好幾個禮拜後還是沒有新進展,希望大神們能給小弟一些指點,找出問題出在哪...
你可以玩樹莓派 還可以測出一個可用的資料庫程式
但是你竟然在網路這塊卡關了 這有些離奇
'192......:3307'
在外網測試 為何去連一個192開頭內網的IP?
你可能要先從你ISP提供的固定IP先查清楚
再去研究一下你的網路防火牆怎麼開port
謝謝大神指點迷津!
在這裡提供更多細節給未來需要的人
(如果有錯還請大家提醒我修正一下~感恩~)
我原本用的host是內網的ip
在外網(例如用行動數據連線)是不認得這個ip的
因為這個ip是由路由器分配給內網的裝置
後來我在路由器設定了通訊埠轉發(參考以下網址)
同時修改程式碼
# 連接 MySQL/MariaDB 資料庫
connection=
mysql.connector.connect(host='140....', # 固定ip
port="6xxx", # 同 port
user='xxxx', password='xxxx') # 密碼
最後記得在防火牆開port
就成功解決了!
開了對外通道. 建議最好加個連線 IP白名單
駭客隨時都開著機器人在掃 IP 和 port