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

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v