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 无访问权限

 

 

 

发布了55 篇原创文章 · 获赞 29 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/ruibin_cao/article/details/90522492
今日推荐