Windows10环境下“远程”访问docker中centos系统里的MySQL数据库入门到妥协地解决

本文主要是介绍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地址是一些用于机构内部通信的地址,一共有三个分块:

 起点地址终点地址或可记为又称为
110.0.0.010.255.255.25510.0.0.0/824位块
2172.16.0.0172.31.255.255172.16.0.0/1220位块
3192.168.0.0192.168.255.255192.168.0.0/1616位块

专用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 VIEWSHOW CREATE VIEW
SHUTDOWN使用mysqladmin shutdown(用来关闭MySQL)
SUPER使用CHANGE MASTER、 KILL、 LOGS、 PURGE、 MASTER和SET GLOBAL。还允许mysqladmin调试登录
UPDATE使用UPDATE
USAGE无访问权限

 

 

 

这篇关于Windows10环境下“远程”访问docker中centos系统里的MySQL数据库入门到妥协地解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/236823

相关文章

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp