Windows10環境下“遠程”訪問docker中centos系統裏的MySQL數據庫入門到妥協地解決

最近,喵哥在學習數據庫,遇到一個很棘手的問題,具體描述如下。

可以在黑底白字的界面熟練操作數據庫的確很酷,但是實際應用數據庫肯定不是爲了耍酷,怎麼把數據庫運用到程序中去纔是真理。所以,喵哥就投入到怎麼在Windows10上調用docker中centos系統裏面MySQL的數據庫的工作中。然而,事情遠沒有想象中那麼簡單,安裝好MySQL之後,一直連不上centos裏的數據庫。後來,去找視頻學習了一下,發現需要用網絡橋接的辦法來實現宿主與docker中容器的通信,但是由於視頻的教程說得不是太清楚,而且都是在Linux環境中,與Windows有些出入,在設置docker容器的網絡連接時出了些狀況,導致沒有實現在Windows下連接docker中centos裏的MySQL數據庫。暫時先放到一邊。觀看教程視頻也不是沒有收穫,至少知道了來宿主連接docker容器需要橋接,至於爲什麼,怎麼橋接,還得去研讀計算機網絡。

經過幾天時間的學習,發現docker中容器用的IP地址都是專用IP地址,比如我用的centos的IP地址是:172.17.0.2。專用IP地址是一些用於機構內部通信的地址,一共有三個分塊:

  起點地址 終點地址 或可記爲 又稱爲
1 10.0.0.0 10.255.255.255 10.0.0.0/8 24位塊
2 172.16.0.0 172.31.255.255 172.16.0.0/12 20位塊
3 192.168.0.0 192.168.255.255 192.168.0.0/16 16位塊

專用IP地址要與互聯網通信需要用到網絡地址轉換NAT(Network Address Translation),這就使得專用IP地址的主機可以與互聯網通信,這種通信過程中,專用網絡內部的主機是主導機器(通信必須由它發起),所以這種方法實現的通信主機是不能用來當作服務器的。也就無法解決喵哥遇到的問題。

另外一種解決方案是利用橋接的方法,好在發現docker的默認網絡配置方法是橋接(bridge模式),這也驗證了我之前看過的教程,所以離最終的目標已經很接近了。但是喵哥目前對於在windows下橋接docker容器不是太懂,對於docker的地址設置及docker容器地址的分配也毫無頭緒,這些作爲下一個學習的目標,等喵哥有了進一步的想法會立即更新到博客。

雖然無法在Windows下實現訪問docker中centos裏的MySQL,但是學習怎麼編程使用MySQL還是必要的,所以喵哥換了個思路,在docker中建兩個centos容器,這樣就可以保證他們處於一個專用網段。比如,172.17.0.2和172.17.0.3。兩個系統可以互相通信是互相使用MySQL的基礎,但不是充分的。要讓其他系統訪問自己的數據庫,需要給其他數據庫授權。

mysql> grant all PRIVILEGES on db_name.* to 'username'@'xxx.xxx.xx.x' identified by 'password' WITH GRANT OPTION;

#說明#

/*
  數據庫的授權用grant:
              grant 權限 on 數據庫.表 to 用戶 【identified by '密碼'】 with grant option;

  其中,
              權限有:select、insert、update、delete和all privileges。
              數據庫爲本地存在的數據庫名,表爲數據庫中的表,如果要全選某個項目,可用*代替,如
                    *.*表示所有數據庫的表,exp_country.*表示exp_country中的所有表,max_sal.k1表示max_sal中的k1表。
              用戶,可以在本地自建。也可以是遠程的,用'username'@'IP地址'表示。
              密碼爲可選項。
              附帶的with grant option可以使得被授權用戶也有賦予其他用戶權限的權力


  數據庫收回權限用revoke:
              revoke 權限 【on 數據庫.表】 option from 用戶; 


*/

首先,在172.17.0.2主機設置172.17.0.3的訪問權限:

然後,在172.17.0.3主機上就可以登入172.17.0.2上的MySQL,我授權的是使用exp_country這個數據庫。

在172.17.0.2查看數據庫:

在172.17.0.3查看數據庫:

 

可見172.17.0.3已經可以使用172.17.0.2下的exp_country數據庫了。


附表:MySQL的數據庫權限

MySQL數據庫權限
權 限
 
說明
ALL 除GRANT OPTION外的所有權限
ALTER 使用ALTER TABLE
ALTER ROUTINE 使用ALTER PROCEDURE和DROP PROCEDURE
CREATE 使用CREATE TABLE
CREATE ROUTINE 使用CREATE PROCEDURE
CREATE TEMPORARY TABLES 使用CREATE TEMPORARY TABLE
CREATE USER 使用CREATE USER、 DROP USER、 RENAME USER和REVOKEALL PRIVILEGES
CREATE VIEW 使用CREATE VIEW
DELETE 使用DELETE
DROP 使用DROP TABLE
EXECUTE 使用CALL和存儲過程
FILE 使用SELECT INTO OUTFILE和LOAD DATA INFILE
GRANT OPTION 使用GRANT和REVOKE
INDEX 使用CREATE INDEX和DROP INDEX
INSERT 使用INSERT
LOCK TABLES 使用LOCK TABLES
PROCESS 使用SHOW FULL PROCESSLIST
RELOAD 使用FLUSH
REPLICATION CLIENT 服務器位置的訪問
REPLICATION SLAVE 由複製從屬使用
SELECT 使用SELECT
SHOW DATABASES 使用SHOW DATABASES
SHOW VIEW SHOW CREATE VIEW
SHUTDOWN 使用mysqladmin shutdown(用來關閉MySQL)
SUPER 使用CHANGE MASTER、 KILL、 LOGS、 PURGE、 MASTER和SET GLOBAL。還允許mysqladmin調試登錄
UPDATE 使用UPDATE
USAGE 無訪問權限

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章