zoukankan      html  css  js  c++  java
  • Docker 搭建 MySQL 服务

    安装 Docker

    请参考我的另一篇文章

    Docker 安装及使用

    建立镜像

    拉取镜像

    # 拉取最新版本镜像
    docker pull mysql
    
    # 拉取执行版本镜像
    docker pull mysql:版本号
    

    检查拉取是否成功

    docker images
    

    image-20200424003317444

    创建数据库容器(不建立数据映射)

    docker run -d --name mysql --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    
    # -d 代表后台运行
    # -name 代码容器名称
    # -p 代表端口映射,格式为  宿主机映射端口:容器运行端口
    # -e 代表添加环境变量  MYSQL_ROOT_PASSWORD是root用户的登陆密码
    

    创建数据库容器(建立数据映射)

    docker run -p 3306:3306 --name mysql-3307 
    -v /usr/local/docker/mysql/conf:/etc/mysql 
    -v /usr/local/docker/mysql/logs:/var/log/mysql 
    -v /usr/local/docker/mysql/data:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=123456 
    -d mysql:latest
    
    # -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
    

    检查容器是否正确运行

    docker container ls
    # 可以看到容器ID,容器的源镜像,启动命令,创建时间,状态,端口映射信息,容器名字
    

    远程连接MySQL

    进入docker本地连接mysql客户端

    sudo docker exec -it mysql bash
    mysql -uroot -p123456
    

    远程连接mysql

    远程连接软件时要注意问题

    我们在创建容器的时候已经将容器的3306端口和主机的3306端口映射到一起,所以我们应该访问:

    host: 安装mysql机器ip
    port: 3306
    user: root
    password: 123456
    

    无法连接到MySQL的几个原因

    • 防火墙阻拦
    # 开放端口:
    $ systemctl status firewalld
    $ firewall-cmd  --zone=public --add-port=3306/tcp -permanent
    $ firewall-cmd  --reload
    # 关闭防火墙:
    $ sudo systemctl stop firewalld
    
    • 需要进入docker本地客户端设置远程访问账号
    $ sudo docker exec -it mysql bash
    $ mysql -uroot -p123456
    mysql> grant all privileges on *.* to root@'%' identified by "password";
    

    ​ 原理:

    # mysql使用mysql数据库中的user表来管理权限,修改user表就可以修改权限(只有root账号可以修改)
    
    mysql> use mysql;
    Database changed
    
    mysql> select host,user,password from user;
    +--------------+------+-------------------------------------------+
    | host                    | user      | password                                                                 |
    +--------------+------+-------------------------------------------+
    | localhost              | root     | *A731AEBFB621E354CD41BAF207D884A609E81F5E      |
    | 192.168.1.1            | root     | *A731AEBFB621E354CD41BAF207D884A609E81F5E      |
    +--------------+------+-------------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql> grant all privileges  on *.* to root@'%' identified by "123456";
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select host,user,password from user;
    +--------------+------+-------------------------------------------+
    | host                    | user      | password                                                                 |
    +--------------+------+-------------------------------------------+
    | localhost              | root      | *A731AEBFB621E354CD41BAF207D884A609E81F5E     |
    | 192.168.1.1            | root      | *A731AEBFB621E354CD41BAF207D884A609E81F5E     |
    | %                       | root      | *A731AEBFB621E354CD41BAF207D884A609E81F5E     |
    +--------------+------+-------------------------------------------+
    3 rows in set (0.00 sec)
    

    参考连接

    https://www.cnblogs.com/sablier/p/11605606.html

  • 相关阅读:
    java Activiti 工作流引擎 SSM 框架模块设计方案
    自定义表单 Flowable 工作流 Springboot vue.js 前后分离 跨域 有代码生成器
    数据库设计的十个最佳实践
    activiti 汉化 stencilset.json 文件内容
    JAVA oa 办公系统模块 设计方案
    java 考试系统 在线学习 视频直播 人脸识别 springboot框架 前后分离 PC和手机端
    集成 nacos注册中心配置使用
    “感恩节 ”怼记
    仓颉编程语言的一点期望
    关于System.out.println()与System.out.print("\n")的区别
  • 原文地址:https://www.cnblogs.com/dtdx/p/12764924.html
Copyright © 2011-2022 走看看