翼度科技»论坛 云主机 服务器技术 查看内容

Docker 中 MySQL 的部署与管理技巧

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
一、Docker 中部署 MySQL


1.1 部署 MySQL

首先,从 Docker Hub 下载
  1. docker pull mysql:5.7.36
复制代码
然后,在 Docker 容器中运行:
  1. # Linux 系统
  2. docker run --name mysql \
  3. -p 3306:3306 \
  4. -e MYSQL_ROOT_HOST='%' \
  5. -e MYSQL_ROOT_PASSWORD=root \
  6. -d mysql:5.7.36
  7. # Windows 系统 (cmd里面运行,Windows PowerShell里面运行不了)
  8. docker run --name mysql ^
  9. -p 3306:3306 ^
  10. -e MYSQL_ROOT_HOST='%' ^
  11. -e MYSQL_ROOT_PASSWORD=root ^
  12. -d mysql:5.7.36
复制代码
这个命令的作用是在后台运行一个 MySQL 5.7.36 版本的容器, 相关参数含义解释:
参数含义
  1. docker run
复制代码
运行容器命令
  1. --name mysql
复制代码
指定容器的名称为
  1. mysql
复制代码
  1. -p 3306:3306
复制代码
将宿主机的 3306 端口映射到容器内的 3306 端口
  1. -e MYSQL_ROOT_HOST='%'
复制代码
设置环境变量
  1. MYSQL_ROOT_HOST
复制代码
为 ‘%’,允许 root 用户从任何主机连接到 MySQL 服务。
  1. -e MYSQL_ROOT_PASSWORD=root
复制代码
设置环境变量
  1. MYSQL_ROOT_PASSWORD
复制代码
为 ‘root’,设置 root 用户的密码为 ‘root’
  1. -d
复制代码
在后台运行容器
  1. mysql:5.7.36
复制代码
指定要使用的 Docker 镜像,即 MySQL 5.7.36 版本的镜像
  1. 如果使用了 [code]-e MYSQL_ROOT_HOST='%'
复制代码
, 我们后续还需要按照 2.1 节中的教程修改 mysql数据库里面的 user 表。否则,我们用 Navicat 连接数据库会报错 :1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server当我们只在本地上面跑时,没必要设置 MYSQL_ROOT_HOST[/code]
1.2 进入容器并创建数据库

(1) 进入容器
  1. mysql
复制代码
容器里面进行数据库创建或者导入数据文件前,我们必须进入容器
  1. docker exec -it mysql /bin/bash
复制代码
这个命令的含义是在名为
  1. mysql
复制代码
的容器中打开一个交互式的 bash 终端,相关参数解析为:

    1. docker exec
    复制代码
    : 这个命令允许你在运行的容器中执行命令。
    1. -it
    复制代码
    : 这两个参数结合在一起表示要创建一个交互式的终端。
    1. -i
    复制代码
    参数表示保持 STDIN 打开,即使没有连接到它,
    1. -t
    复制代码
    参数表示分配一个伪终端。
    1. mysql
    复制代码
    : 这是要执行命令的容器的名称或 ID。
    1. /bin/bash
    复制代码
    : 这是要执行的命令,在这里是打开一个 bash 终端。
(2)数据库登录和创建
  1. # 登录(密码已经在 docker run语句的参数里面设置)
  2. # 参数 -u 和其后的用户名通常之间不需要空格隔开;参数 -p 和其后的密码也可以直接连在一起写
  3. mysql -uroot -proot --default-character-set=utf8
  4. # 创建数据库
  5. CREATE DATABASE mydatabase
  6. # 退出 MySQL 命令行客户端
  7. exit
复制代码
(3)导入数据
在导入数据之前,我们首先确保 宿主机中指定路径下sql 文件是否挂载到在容器里面(docker run 参数里面可以设置)。如果没有挂载的话,我们可以使用
  1. docker cp
复制代码
命令:
  1. # docker cp 语法
  2. docker cp /本地/路径/文件.sql 容器名称或ID:/容器内/路径/
  3. # 举个例子
  4. C:\Users\username>docker cp D:\Learning\project\12306\resources mysql:/resources/
  5. Successfully copied 8.22MB to mysql:/resources/
复制代码
然后,我们在创建的数据库里面导入sql数据文件:
  1. # 切换到指定的数据库(在某些情况下,该语句可能以及写到了sql数据文件里面)
  2. use 指定的数据库名;
  3. -- 导入 SQL 文件
  4. source /docker-entrypoint-initdb.d/mydata.sql;
复制代码
(4)保存 mysql 容器
为了保存更新后的数据库,我们应该将容器保存为新的镜像
  1. 注意:在 Docker 中,<strong>镜像是不可更改的</strong>。一旦创建了一个镜像,就无法直接修改它。因此,无法直接覆盖原来的镜像。
复制代码
  1. docker commit [CONTAINER ID] [IMAGE NAME]   #容器ID  创建的镜像名
  2. docker images   #可以看到该镜像已经创建成功,下次需要新建容器时可直接使用该镜像
复制代码
举个例子,
  1. C:\Users\username>docker commit mysql mysqlcloud
  2. sha256:6953caac5bffdea0a7a867dc5fb483702f8b291e00759940aae8275f28966391
  3. C:\Users\username>docker images
  4. REPOSITORY                      TAG            IMAGE ID       CREATED          SIZE
  5. mysqlcloud                      latest         6953caac5bff   11 seconds ago   457MB
  6. multi-container-app-todo-app    latest         4ce52cba239f   2 months ago     226MB
  7. <none>                          <none>         abc68feda784   2 months ago     226MB
  8. welcome-to-docker               latest         391a7884fcf8   2 months ago     225MB
  9. mongo                           6              6d5c2fe902ad   2 months ago     690MB
  10. docker/welcome-to-docker        latest         c1f619b6477e   4 months ago     18.6MB
  11. zdocker/welcome-to-docker   latest         c1f619b6477e   4 months ago     18.6MB
  12. nacos/nacos-server              v2.1.2         a978644d9246   14 months ago    1.06GB
  13. redis                           latest         7614ae9453d1   2 years ago      113MB
  14. mysql                           5.7.36         c20987f18b13   2 years ago      448MB
  15. pangliang/rocketmq-console-ng   latest         ce1afb55c045   4 years ago      118MB
  16. foxiswho/rocketmq               broker-4.5.1   d45240b3173d   4 years ago      440MB
  17. foxiswho/rocketmq               server-4.5.1   12d0d03473de   4 years ago      440MB
复制代码
1.3 Navicat 可视化工具连接

  1. docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.36
复制代码
语句中,我们已经设置好了端口号和密码。因此,Navicat 可视化工具连接中,我们可以这样填写信息:

  • 端口 填创建容器时
    1. -p
    复制代码
    后的第一个端口
  • 密码 填
    1. -e
    复制代码
    后写的密码


二、可能存在的问题


2.1 1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server

Navicat连接报错 ——1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server
解决方案:解决1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server_host ‘172.17.0.1’ is not allowed to connect to thi
原因分析:
  1. docker run --name mysql ^
  2. -p 3306:3306 ^
  3. -e MYSQL_ROOT_HOST='%' ^
  4. -e MYSQL_ROOT_PASSWORD=root ^
  5. -d mysql:5.7.36
复制代码
  1. docker run
复制代码
语句里面,root 对应的 Host 为 % 。但是 Mysql 数据库里面没有,我们重新修改即可。
  1. Host
复制代码
: 表示允许访问 MySQL 服务器的主机名或 IP 地址。
  1. User
复制代码
: 表示用户的用户名。
  1. mysql> select Host, User  from user ;
  2. +-----------+---------------+
  3. | Host      | User          |
  4. +-----------+---------------+
  5. | localhost | mysql.session |
  6. | localhost | mysql.sys     |
  7. | localhost | root          |
  8. +-----------+---------------+
  9. 3 rows in set (0.00 sec)
  10. mysql> update user set Host='%' where User='root' ;
  11. Query OK, 1 row affected (0.00 sec)
  12. Rows matched: 1  Changed: 1  Warnings: 0
  13. mysql> flush privileges ;
  14. Query OK, 0 rows affected (0.00 sec)
  15. mysql> select Host, User from user;
  16. +-----------+---------------+
  17. | Host      | User          |
  18. +-----------+---------------+
  19. | %         | root          |
  20. | localhost | mysql.session |
  21. | localhost | mysql.sys     |
  22. +-----------+---------------+
  23. 3 rows in set (0.00 sec)
复制代码
实际操作:
  1. -- 显示所有数据库
  2. mysql> show databases ;
  3. -- 切换到 mysql 数据库
  4. use mysql;
  5. -- 显示 mysql 数据库中的所有表
  6. show tables ;
  7. -- 查询 user 表中的 Host 和 User 列
  8. select Host, User from user ;
  9. -- 将 user 表中 User 为 'root' 的记录的 Host 字段修改为 '%'
  10. update user set Host='%' where User='root' ;
  11. -- 刷新权限
  12. flush privileges ;
复制代码
参考资料
docker 安装mysql,并创建数据库_docker创建mysql数据库
运行在docker里面的mysql如何导入数据表
docker部署mysql,使用navicat可视化工具进行连接
到此这篇关于Docker 中 MySQL 的部署与管理的文章就介绍到这了,更多相关MySQL 的部署与管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/server/326557uyo.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
来自手机

举报 回复 使用道具