[CentOS Python系列] 四.阿里云服务器CentOS连接远程MySQL数据库及pymsql
從2014年開始,作者主要寫了三個Python系列文章,分別是基礎知識、網絡爬蟲和數據分析。
- Python基礎知識系列:Pythonj基礎知識學習與提升
- Python網絡爬蟲系列:Python爬蟲之Selenium+Phantomjs+CasperJS
- Python數據分析系列:知識圖譜、web數據挖掘及NLP
??
隨著人工智能和深度學習的風暴來臨,Python變得越來越火熱,作者也準備從零學習這些知識,寫相關文章。本篇文章講解阿里云服務器CentOS系統連接遠程MySQL數據庫及配置過程,同時教大家如何編寫Python操作MySQL數據庫的基礎代碼,為后面的網絡爬蟲并存儲至服務器打下基礎。
文章非?;A,希望這系列文章對您有所幫助,如果有錯誤或不足之處,還請海涵~
系列文章:
[CentOS Python系列] 一.阿里云服務器安裝部署及第一個Python爬蟲代碼實現
[CentOS Python系列] 二.pscp上傳下載服務器文件及phantomjs安裝詳解
[CentOS Python系列] 三.阿里云MySQL數據庫開啟配置及SQL語句基礎知識
參考文獻:
一. 創建新用戶
1.登錄root用戶,插入新用戶
核心代碼:
insert into mysql.user(Host,User,Password) value ("localhost","eastmount",password("123456"));
命令如下所示:
mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -ADatabase changed mysql> insert into mysql.user(Host,User,Password) value ("localhost","eastmount",password("123456")); Query OK, 1 row affected, 3 warnings (0.00 sec)mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)mysql> select host,user,password from user; +-------------------------+-----------+-------------------------------------------+ | host | user | password | +-------------------------+-----------+-------------------------------------------+ | localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | izm5e2qvb8hl5w1gjowpsxz | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 127.0.0.1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | | | | izm5e2qvb8hl5w1gjowpsxz | | | | localhost | yxz | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | mysql | *95FE99470B7B7CAF1E150B16ACCA48CDE7925813 | | 39.107.105.166 | yxz | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 39.107.105.166 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | % | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | eastmount | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-------------------------+-----------+-------------------------------------------+ 11 rows in set (0.00 sec)
通過 select host, user, password from user 查看主機、用戶和密碼,可以看到 (localhost, eastmount, 123456) 已經插入成功。
此時,用戶eastmount是可以登錄了,通過語句 "mysql -u eastmount -p 123456"。
但是使用該用戶創建數據庫,報錯如下所示,這是需要先進行授權。
mysql> create database douban;
ERROR 1044 (42000): Access denied for user 'eastmount'@'localhost' to database 'douban'
2.root用戶登錄再授權
核心代碼:grant all privileges on *.* to eastmount@localhost identified by "eastmount";?
但是此時登錄會報錯,如下所示:
[root@iZ2ze9134z8zlqupc9t6mzZ ~]# mysql -u eastmount -p
Enter password:
ERROR 1045 (28000): Access denied for user 'eastmount'@'localhost' (using password: YES)
此時需要關閉服務器修改eastmount登錄密碼,重啟服務即可。
3.關閉服務器更新登錄密碼再刷新權限
核心代碼:update user set password=PASSWORD("123456") where user="eastmount";
接下來更新eastmount用戶的密碼。
4.重啟MySQL服務
核心代碼:service mysqld restart
5.登錄成功數據庫操作
二. 遠程服務器授權及端口開啟
但此時連接遠程數據庫,仍然報錯“2003-can't connect to MySQL server on (10060)”。
這是需要開啟遠程服務器并進行公網IP授權,同時開發3306端口號,流程如下:
(一) CentOS開通MySQL3306端口
1.vi /etc/sysconfig/iptables
2.加入如下代碼,核心:?-I INPUT?-p tcp?-m state?--state NEW?-m tcp?--dport?3306?-j ACCEPT
#Firewall configuration written by system-config-firewall #Manual customization of this file is not recommanded. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT3.保存退出
4.重啟防火墻:service iptables restart
(二) 開啟遠程訪問權限
1.mysql -u eastmount -p 123456
2.查詢主機、用戶名和密碼:select host,user,password from user;
3.授權:grant all privileges on *.* to eastmount@39.107.105.166 identified by "123456" with grant option;
mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -ADatabase changed mysql> grant all privileges on *.* to eastmount@39.107.105.166 identified by "123456" with grant option; Query OK, 0 rows affected (0.00 sec)mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)mysql> select host,user,password from user; +-------------------------+-----------+-------------------------------------------+ | host | user | password | +-------------------------+-----------+-------------------------------------------+ | localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | izm5e2qvb8hl5w1gjowpsxz | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 127.0.0.1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | | | | izm5e2qvb8hl5w1gjowpsxz | | | | localhost | yxz | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | mysql | *95FE99470B7B7CAF1E150B16ACCA48CDE7925813 | | 39.107.105.166 | yxz | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 39.107.105.166 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | % | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | eastmount | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 39.107.105.166 | eastmount | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-------------------------+-----------+-------------------------------------------+ 12 rows in set (0.00 sec) 可以看到主機host為39.107.105.166,用戶名為eastmount,密碼為123456的已經添加。但仍然報錯“1045 - Access denied for user 'eastmount' (using password: YES)”。
4.為eastmount@'%'用戶授權
grant all privileges on *.* to eastmount@'%' identified by "123456" with grant option;
flush privileges;
service mysqld restart??
此時權限開啟成功,同時服務器的3306端口開啟。
三. 阿里云服務器安全設置
如果現在您仍然無法通過阿里云主機CentOS連接遠程MySQL數據庫,那您需要設置阿里云的安全組規則,而網上更多的資料忽略了該步驟。下面進行簡單敘述:
第一步:打開阿里云服務器管理控制臺頁面,點擊“管理”按鈕
第二步:在彈出的頁面中,選擇“本實例安全組”,然后點擊“配置規則”
第三步:在彈出如下界面中點擊“添加安全組規則”
第四步:在“添加安全組規則”界面選擇“MySQL(3306)”,其中3306是MySQL數據庫的端口號,同樣可以設置其他的端口。
第五步:授權對象填寫“0.0.0.0/0”,表示允許任意公網IP登錄。
設置成功如下圖所示:
第六步:Navicat for MySQL軟件登錄,輸入IP地址、用戶名和密碼,如下所示。
查看20180220df數據庫的student表如下所示:
參考阿里云官方文檔:阿里云服務器安全組設置 -?應用案例
四. Python簡單操作數據庫
下面簡單給出pymsql庫操作MySQL數據庫的Python代碼,這是查詢功能。
#!usr/bin/python #coding: utf-8 #author: yxz import pymysql#創建連接 con = pymysql.Connect(host='localhost', user='yxz', passwd='123456', db="Eastmount") #創建游標 cur = con.cursor() #執行SQL語句 cur.execute("select * from douban;") #獲取所有執行結果 res = cur.fetchall() print(res) #執行語句提交 con.commit() cur.close() #關閉連接 con.close()如果需要連接遠程服務器的Python代碼如下所示:
#!usr/bin/python #coding: utf-8 #author: yxz import pymysql#創建連接 con = pymysql.Connect(host='39.107.105.166', user='eastmount', passwd='123456', db="20180220df") #創建游標 cur = con.cursor() #執行SQL語句 cur.execute("insert into student(id,name,pwd) values('2','eastmount','20180222')") cur.execute("select * from student;") #獲取所有執行結果 res = cur.fetchall() print(res) #執行語句提交 con.commit() cur.close() #關閉連接 con.close()運行結果如下所示:
[root@iZ2ze9134z8zlqupc9t6mzZ eastmount]# python test.py ((1, 'yangxiuzhang', '111111'), (2, 'eastmount', '20180222')) [root@iZ2ze9134z8zlqupc9t6mzZ eastmount]#總之,希望這篇基礎文章對您有所幫助,尤其是剛接觸云服務器的新手,如果您是高手,還請多提意見,共同提高。祝大家新年快樂,又一年過去了,娜我們來年一起進步加油。?
( By:Eastmount CSDN 2018-02-22 中午11點?http://blog.csdn.net/Eastmount?)
總結
以上是生活随笔為你收集整理的[CentOS Python系列] 四.阿里云服务器CentOS连接远程MySQL数据库及pymsql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [CentOS Python系列] 三.
- 下一篇: [python爬虫] Beautiful