mysql8.x docker远程访问配置详解

目录
  • 环境情况
  • 遇到的错误
  • 解决方法
    • 1. 登录 mysql docker 内部
    • 2. 设置root密码
    • 3. 设置 root 远程访问权限
    • 4. 设置普通用户 myuser 的远程访问

环境情况

mysql 8.x 是通过 docker 方式部署的,启动的 docker-compose.yml 如下:

version: "3.2"
services:
    mysql:
        container_name: mysql
        image: "mysql:8.0"
        ports:
            - "3306:3306"
        command:
            [
                "--character-set-server=utf8mb4",
                "--collation-server=utf8mb4_unicode_ci",
                "--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION",
            ]
        volumes:
            - type: bind
              source: ./mysql
              target: /var/lib/mysql
            - type: bind
              source: ./mysql-docker.cnf
              target: /etc/mysql/conf.d/docker.cnf
        environment:
            - MYSQL_RANDOM_ROOT_PASSWORD=yes
            - MYSQL_USER=myuser
            - MYSQL_PASSWORD=mypass
            - MYSQL_DATABASE=mydb
        restart: always

首次通过 docker-compose 命令启动时,会自动下载 mysql 8.x 的镜像。

启动成功之后,可以看到 3306 端口也映射出来了。

这时,mysql 算是正常安装启动了。​

遇到的错误

接下来,通过 navicat 之类的数据库客户端来连接 mysql 服务器的时候,发现根本连不上,遇到的错误种类有:

  1. ERROR 1045 (28000): Access denied for user 'myuser'
  2. 10060 错误
  3. 10061 错误

解决方法

网上有很多通过设置数据库用户的权限来解决远程访问的问题的,但是只有核心的步骤,缺少过程。

1. 登录 mysql docker 内部

从上面的 docker-compose.yml 可以看出,并没有配置 mysql root 用户的密码。
在 volumn 映射那段,可以看到,我们把容器中的 /etc/mysql/conf.d/docker.cnf 文件映射到外部了。此文件的内容如下:

[mysqld]
skip-host-cache
skip-name-resolve

添加一行如下,这样登录 mysql 就不需要密码了。

[mysqld]
skip-host-cache
skip-name-resolve
skip-grant-tables

添加后,重启容器。

docker-compose down
docker-compose up -d

2. 设置root密码

进入容器,并用 root 账户登录 mysql 服务器。

docker exec -it mysql /bin/bash
mysql -uroot   # 这里直接回车,不用输入密码就可以登入服务器

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlroot';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

注意,这里要先执行一次 flush privileges; 否则修改密码不会成功。​

然后,退出容器,恢复映射出的 /etc/mysql/conf.d/docker.cnf 文件。

[mysqld]
skip-host-cache
skip-name-resolve

把新加的那行删掉,再重启容器。

docker-compose down
docker-compose up -d

3. 设置 root 远程访问权限

重启容器之后,再次进入容器,设置 root 用户的远程访问权限。

docker exec -it mysql /bin/bash
mysql -uroot -p    # 需要输入上一步配置的密码 mysqlroot

mysql>  ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mysqlroot';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

配置远程访问的权限用 'root'@'%' , 而不是上一步的 'root'@'localhost'​

设置之后,不用重启 mysql docker 容器,可以用 navicat 连接上了。

4. 设置普通用户 myuser 的远程访问

接着上面的操作配置普通用户 myuser 的远程连接。

mysql>  ALTER USER 'myuser'@'%' IDENTIFIED WITH mysql_native_password BY 'mypass';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to 'myuser'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

设置成功的话,myuser 账户也可以通过 navicat 来远程连接了。

到此这篇关于mysql8.x docker远程访问配置详解的文章就介绍到这了,更多相关mysql8.x docker远程访问内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker部署mysql 实现远程连接的示例代码

    1.docker search mysql   查看mysql版本 2.docker pull mysql  要选择starts最高的那个name 进行下载 3.docker images  查看下载好的镜像 4.启动mysql实例 docker run --name dockermysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql  --name 为mysql的实例设置别名. -p 3307为对外暴露的端口.3306是内

  • Docker部署mysql远程连接 解决2003的问题

    连接MySQL 这里我使用navicat远程连接,连接MySQL前需要防火墙开放端口或者关闭防火墙. 开放端口 firewall-cmd --add-port=3306/tcp --permanent // --permanent 永久生效,没有此参数重启后失效 firewall-cmd --reload // 重新载入 关闭防火墙 systemctl stop firewalld systemctl enable iptables // 设置开机启动 firewall-cmd --reload

  • Docker 安装 MySQL 并实现远程连接教程

    拉取镜像 docker pull mysql 查看拉取完成的镜像 docker images 通过镜像创建并启动一个MySQL容器 docker run --name mysql_dev -e MYSQL_ROOT_PASSWORD=123456 -p 3333:3306 -d mysql –name:给新创建的容器命名,此处命名为 mysql_dev -e:配置信息,此处配置mysql的root用户的登陆密码 -p:端口映射,此处映射主机3333端口到容器mysql_dev的3306端口 -d

  • mysql8.x docker远程访问配置详解

    目录 环境情况 遇到的错误 解决方法 1. 登录 mysql docker 内部 2. 设置root密码 3. 设置 root 远程访问权限 4. 设置普通用户 myuser 的远程访问 环境情况 mysql 8.x 是通过 docker 方式部署的,启动的 docker-compose.yml 如下: version: "3.2" services: mysql: container_name: mysql image: "mysql:8.0" ports: -

  • Jupyter Notebook 远程访问配置详解

    问题 Jupyter Notebook可以说是非常好用的小工具,但是不经过配置只能够在本机访问 笔者参阅了文档对jupyter notebook进行配置,实现了跨主机浏览器访问 安装jupyter notebook 笔者使用conda包管理 conda install jupyter notebook 生成默认配置文件 jupyter notebook --generate-config 将会在用户主目录下生成.jupyter文件夹,其中jupyter_notebook_config.py就是刚

  • Ubuntu下安装配置Docker的教程详解

    获取Docker 1.准备 Docker要求64位Linux且内核版本在3.10以上,在终端里输入uname -r查看,如图: 接下来更新源并查看是否有https方法: sudo apt-get update sudo apt-get install apt-transport-https ca-certificates 2.添加key 输入以下命令添加GPG key: sudo apt-key adv \ --keyserver hkp://ha.pool.sks-keyservers.net

  • SpringBoot+docker环境变量配置详解

    项目中遇到springBoot+docker需要配置不同环境变量的问题,做个简单的总结: 1.开发环境ide中启动项目 可以通过ide的环境变量参数配置,启动之后使用哪个配置,比如 这样就使用application-test.yml中的配置 2.通过gradle打包 可以通过-P参数来指定打包后的jar使用哪种环境来运行,比如 gradlew -Pprod bootWar 打包之后运行会使用prod中的配置:我的项目是jhipster生成出来的,现在需要添加test的环境配置,需求修改下项目的g

  • Docker Machine深入详解

    Docker 与 Docker Machine 的区别 Docker 是一个 Client-Server 架构的应用,人家是有官称的:Docker Engine.Docker 只是大家对 Docker Engine 的昵称,当然 Docker 还有其他的意思,比如一家公司的名称.简单起见,本文中的 Docker 等同于 Docker Engine. 提到 Docker 我们必须要知道它包含了三部分内容: Docker daemon 一套与 Docker daemon 交互的 REST API 一

  • jenkins构建Docker 镜像实例详解

     jenkins构建Docker 镜像实例详解 前言:jenkins有Docker镜像,而之前我们说过使用jenkins打包Docker镜像,那么可否用jenkins的Docker镜像打包Docker镜像呢? 环境: CentOS 7     Docker 1.10.3 1.本机安装docker环境,并配置TCP访问接口 # vi /usr/lib/systemd/system/docker.service 修改ExecStart为: ExecStart=/usr/bin/docker daem

  • kubelet配置详解及简单实例

    kubelet配置详解及简单实例 摘要: 这两天试着重新去理解kubelet的每一个配置,并整理出我们最有可能要配置的项作为我们上生产的要考虑的kubelet最佳配置. author: garnett.wang@gmail.com kubernetes version: 1.6.2 Kubelet Configurations We Should Care About 下面是我梳理的,我认为必须关注的flag. flag value --address 0.0.0.0 --allow-privi

  • win10安装zip版MySQL8.0.19的教程详解

    一. 下载后解压到想安装的目录 下载地址: https://dev.mysql.com/downloads/mysql/ 二. 在安装目录中添加配置文件my.ini [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=D:\DevTool\MySQL-8.0.19 # 设置mysql数据库的数据的存放目录 datadir=D:\DevTool\MySQL-8.0.19\data # 允许最大连接数 max_connections=200 #

  • Linux下安装mysql-8.0.20的教程详解

    ** Linux下安装mysql-8.0.20 ** 环境介绍 操作系统:CentOS 7 mysql下载地址:https://dev.mysql.com/downloads/mysql/ 下载版本:https://www.jb51.net/softs/609101.html https://www.jb51.net/softs/609101.html 卸载mysql 查看是否安装过mysql,命令:find / -name mysql 如果安装过,进行卸载: 删除相关目录: 删除配置文件: 删

  • Python3爬虫里关于Splash负载均衡配置详解

    用Splash做页面抓取时,如果爬取的量非常大,任务非常多,用一个Splash服务来处理的话,未免压力太大了,此时可以考虑搭建一个负载均衡器来把压力分散到各个服务器上.这相当于多台机器多个服务共同参与任务的处理,可以减小单个Splash服务的压力. 1. 配置Splash服务 要搭建Splash负载均衡,首先要有多个Splash服务.假如这里在4台远程主机的8050端口上都开启了Splash服务,它们的服务地址分别为41.159.27.223:8050.41.159.27.221:8050.41

随机推荐