Blog Cover Image

Inspire you to have New thinking, Walk out your unique Road.

有的時候,你無意間遇到的一些故事,會激發你的靈感,改變你的想法,接下來你會用與之前全然不同的觀念去創造屬於你獨特的故事。

Sign @MinaYu.

[DEVELOP]PYTHON 桌機版開發之(4)

Posted on

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '120.96.183.71' (timed out)")

Error: 2003

mysql

Screen Shot 2018-04-07 at 12.33.18 PM

解決方法:

https://stackoverflow.com/questions/7927854/start-mysql-server-from-command-line-on-mac-os-lion

有可能出的問題

  1. 你在你的電腦裡裝好mysql但沒有開啟他(就是你裝了apache,也要下指令開啟啊!)

  2. 對面ip/虛擬機的port3306沒開

開Terminal下指令

Simply:

mysql.server start

mysql.server stop

mysql.server restart

Screen Shot 2018-04-07 at 12.35.29 PM


然後還是報同樣的錯

這次決定ssh進我的ubuntu主機看看

解決方法:

http://www.configserverfirewall.com/ubuntu-linux/enable-mysql-remote-access-ubuntu/

http://gaznjang.blogspot.tw/2010/08/mysqld-bind-address.html

不過當我改到

bind-address            = 127.0.0.1

bind-address            = 0.0.0.0

就被擋下來了

一方面是檔案Read-Only

一方面則是我怕按下去整個伺服器會掛掉

但我還是把我找到的解法po出來


然後默默地密了學弟

在默默地含淚打給指導老師

我想兩週沒看到他了,是該跟他回報一下了

所以等週一吧

目前就先弄眼前大數據分析的分析表吧QQ


107.04.13 更新

就在和(ㄐㄧㄥ)政(ㄍㄨㄛˋ)府(ㄐㄧˇ)打(ㄊㄧㄢ)了(ㄎㄨㄤˊ)一(ㄐㄧㄚ)場(ㄅㄢ)戰(ㄓ )後(ㄏㄡˋ)

我終於回來更新一下,我這篇的進度

約莫三天前,週一的時候到了研究室詢問了一下學弟

我將

bind-address            = 127.0.0.1

bind-address            = 0.0.0.0

這樣改後

就能夠在我的python Desktop 應用端編譯成功連上我的虛擬機器端

所以必須告訴大家的是,即便你將你的虛擬機對外開放後,你發現無法連上資料庫

其實就是因為phpmysql阻擋你登入

有可能的原因是

  1. 檢查你自己電腦的mysql裝好後有沒有下指令開啟(對!電腦就是這麼笨,裝好你還要下指令讓他開)

  2. 檢查你的機器/雲端/虛擬機器之類的ip有沒有對外開放

  3. 若你的機器/雲端/虛擬機器為Ubuntu,請到etc資料夾檢查mysql有無對外開放與mysql的權限問題


經過這次我自己生病兩週加上和指導老師隔絕的情況下自己胡搞瞎搞,雖然扛著崩潰的精神壓力很痛苦外,我其實還學到不少東西

原來唐老師説牡羊座今年想死卻是個轉機是真的

但打死我都不想再經歷一次那種巨大的精神壓力

而這邊列了一下自己沒有外力幫助完全靠自己理解的新東西

  1. Ubuntu的Etc用處

  2. Mac中,Homebrew/Python&pip

  3. Mysql+phpmyadmin

  4. Python Desktop+tkinter 開發

首先

Ubuntu的Etc用處

至從買了個Mac,自己進入到一個全新的系統Unix

一般使用蘋果系統的人應該比較不曉得,就是時常享受著蘋果產品帶來的質感跟炫富

但其實由於蘋果的系統為Unix系統,我個人覺得跟Ubuntu還蠻像的

但可能也是因為蘋果產品市佔率比linux高一點,所以有些公司會針對ios跟macOS開發軟體

也就是說Mac的系統以論上介於Window這樣人性化和linux這樣偏機器化的系統中間

有點偏人性化但也偏機械化

而自己本身是一個一半聽懂人話,一半又是理科腦想探討機器的人

所以對linux有著極大的興趣

以往都是學弟們將ubuntu架好在機器上

我們將寫的網路扔到home裡面

這次有幸,從home往前探勘,才發現許多系統的運作操作,還有很多軟體程式都裝在目錄home的前一層

也才知道etc是做什麼用的

Mac中,Homebrew/Python&pip

為什麼會說ubuntu和unix很像

其實就是大家打開終端機,將目錄從/使用者/那端往前切後會發現

使用者端(應該就是Home)之前的目錄跟資料夾,macOS和Ubuntu都很像

應該說所有的系統操作跟軟體程式都裝在這一層

Screen Shot 2018-04-13 at 2.46.06 PM

所以很多開發者的部落格跟資訊常常說將你的程式寫在根目錄

根目錄應該就是Home裡

因為home以外的其他資料夾比較偏向是系統層面的東西

還有如果你是新手再起初開發一些程式時,會發現有些部落客或者課程不會讓你開發的程式資料夾建在Desktop

但Windows用久了,什麼東西除了扔桌面跟Download很少扔在其他地方

但在Mac,既然是寫程式,其實就是將資料夾建在桌面上一層的地區

/Users/此區/Desktop/

所以如果你想要把一些你曾經建了卻不知道建在哪的開發程式資料夾刪除

從桌面移動上一層目錄,應該會找到(系統應該也會幫你裝在那)

換句話說,在windows等於建在C曹的Prgramfiles « 這個東西換成中文就是程式的檔案啦~


提到Homebrew其實是那時候mysql跟python套件那邊卡住

還有我卡python2.7跟python3.6的時候

Homebrew是蘋果的套件管理工具

以前我常常把他跟pip搞錯

所以如果你裝了什麼程式或者裝什麼程式的套件會需要使用到Homebrew

而因為這樣我去下了些指令找出之前用Homebrew亂裝了些什麼

早期不懂,只會看人家文章學著下指令裝

但可能那時候想把python3.6殺掉,全部只用2.7,才想說找出homebrew清掉之前亂裝的東西

啊因為我從進研究所開始寫程式的時候接觸到的全都是Python居多

所以我以為pip install = 全部終端機安裝的用法

所以拿這個指令在ubuntu猛按就是一直報錯XDD

我應該可以這樣理解啦

Python跟pip是綁在一起

Python Package Index,簡稱PyPI

他是軟體包管理系統,而可以拿來用來安裝Python的套件

而不是像我因為沒有接觸過其他語言,就一直pip pip pip xDDDD

然後打的很開心,報錯還一直問為什麼沒辦法裝!!! XD


Mysql+phpmyadmin

這解釋起來比較困難,但是要裝phpmyadmin就需要裝mysql

然後A端連過去B端

B端要裝phpmysql

A端要裝,mysql及能連線mysql的套件(一樣專完mysql才能裝)

mysql裝完記得開起來才能裝

mysql跟python跟其他軟體都會被統一裝在一個地方(我那時候有看到可是我忘了是在哪個目錄裡)

Python Desktop+tkinter 開發

最後撒花一下

就是學到了以往exe這類型的桌機檔都怎麼開發

其實不會很困難,我們都把它想得十分十分的困難

tkinter適用python開發的一種介面套件

而開發桌機程式,我自己智障作法就是像網頁一樣先寫好幾個介面,再去一個一個定義裡面的功能,算是比較笨的方法,但我還不知道比較偏機械端的桌機版要怎麼跟資料庫連結像寫網頁那樣XD


最後說一下,成功將bind改後,下一個被擋的原因

也是我放棄改用別的的原因

被黨的原因是phpmyadmin的database拒絕我這個電腦ip的連線

但因為我本來就是希望開發這個程式丟給不同電腦的人使用,在將他們的資訊收集起來回送雲端

而為什麼會拒絕電腦ip的連線

主要就是在phpmyadmin裡的權限使用者那邊,需要新增

如果是只有你一個人要用,你就在權限使用者那新增你的電腦就好

但是,我是因為我要不同電腦的人回送他的資料回來

我總不可能手動新增每個人電腦的ip進來

再來利用像學校那樣的鎖ip網段,這種的可以在phpmyadmin上辦到,解決權限問題

因為鎖ip網段是為了安全

鎖權限也是為了安全

還有一種就是你開發註冊帳號跟密碼的系統,這樣就能達到"使用者登入"(權限開放給使用者)

而我的用意是希望將資料庫開發給大家回傳資料,這樣做法顯然不能用

Python3.6+Pymsql的方法直接這樣搞

請示了一下指導老師,也是說不行

但得到一個新的名稱就是REST API

還有請示指導老師後,我的程式開發也改了需求跟換了方式

不一定還會繼續開發我的python Desktop Application

但是由於這次美麗的誤打誤撞,我就把他寫下來記錄起來

若以上有錯誤,再麻煩指正