10 docker 安装 mysql详解

打印 上一主题 下一主题

主题 1716|帖子 1716|积分 5148

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
目录
一、安装mysql
1. 镜像获取
2. 简单版
2.1. 使用mysql镜像
2.2. 建库建表插入数据
2.3. 外部win 毗连并插入中文数据测试
2.4. 简单版本题目
3. 创建容器-实战版
3.1. 新建容器实列并挂载卷
3.2. 新建my.cnf , 解决中文乱码
3.3. 重启容器验证
3.4. 总结


一、安装mysql

官网下令出处:https://hub.docker.com/_/mysql
1. 镜像获取

  1. docker search mysql #搜索镜像
  2. docker pull mysql:5.7 #拉取镜像
  3. docker images #查看结果
复制代码
2. 简单版

2.1. 使用mysql镜像

  1. [root@rockylinux ~]#
  2. docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  3. docker ps #查看容器ID
  4. docker exec -it  a84b91d0b7f3 /bin/bash
  5. ------------------------------------------------------------------
  6. root@a84b91d0b7f3:/# mysql -uroot -p
  7. Enter password:(123456)
  8. mysql>
复制代码
MySQL 默认监听 3306 端口
-e MYSQL_ROOT_PASSWORD=123456


  • -e 设置环境变量
  • MYSQL_ROOT_PASSWORD=123456 设置了 MySQL 的 root 用户的暗码为 123456
  • 环境变量 MYSQL_ROOT_PASSWORD 是 MySQL 官方 Docker 镜像用来初始化数据库时设置 root 根用户暗码的变量
mysql -uroot -p


  • -uroot: 指定毗连数据库服务器的 MySQL 用户 -u 是 --user 的缩写 root 是用户名,表示将以 root 用户身份毗连 MySQL 服务器
  • -p 提示用户输入暗码 --password 没有直接跟暗码,表示在执行下令后,会提示用户输入暗码。这是为了安全起见,不把暗码直接袒露在下令行上
2.2. 建库建表插入数据

  1. mysql> create database db01;
  2. Query OK, 1 row affected (0.00 sec)
  3. #创建名为 db01 的数据库
  4. mysql> use db01;
  5. Database changed
  6. #切换到 db01 数据库,使其成为当前操作的数据库
  7. mysql> create table aa(id int,name varchar(20));
  8. Query OK, 0 rows affected (0.02 sec)
  9. #在当前数据库(db01)中创建一个名为 aa 的表,该表包含两个字段:id(整数类型)和 name(长度为20的可变字符类型)
  10. mysql> insert into aa values(1,'z3');
  11. Query OK, 1 row affected (0.01 sec)
  12. mysql> select * from aa;
  13. +------+------+
  14. | id   | name |
  15. +------+------+
  16. |    1 | z3   |
  17. +------+------+
  18. 1 row in set (0.00 sec)
  19. #向 aa 表中插入一条记录,id 为 1,name 为 'z3'
复制代码
2.3. 外部win 毗连并插入中文数据测试





出现错误:docker默认编码字符集隐患
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
默认环境下使用 latin1 字符集,而字符串包罗了中笔墨符,需要 utf8 或 utf8mb4 字符集来正确存储和表现。
以是这为简单版本(中笔墨符用不了)
2.4. 简单版本题目



  • 中文乱码 。启动docker容器后,可以正常的毗连、创建数据库,创建表,插入数据。但是插入中文则会报错。
  • 没有容器卷映射。没有设置容器卷映射,当容器不测被删时,数据无法找回。
3. 创建容器-实战版

3.1. 新建容器实列并挂载卷

启动 Mysql 容器,并设置容器卷映射:
  1. docker run -d -p 3306:3306 \
  2.            --privileged=true \
  3.            -v /app/mysql/log:/var/log/mysql \
  4.            -v /app/mysql/data:/var/lib/mysql \
  5.            -v /app/mysql/conf:/etc/mysql/conf.d \
  6.            -e MYSQL_ROOT_PASSWORD=root \
  7.            --name mysql \
  8.            mysql:5.7
复制代码
启动时将容器做了容器卷映射,将mysql的设置(映射到/app/mysql/conf)、数据(映射到/app/mysql/data)、日志(映射到/app/mysql/log)都映射到了宿主机实际目录,以是即使删除了容器,也不会产生太大影响。只需要再执行一下启动Mysql容器下令,容器卷还按雷同位置进行映射,所有的数据便都可以正常规复。
3.2. 新建my.cnf , 解决中文乱码

在/app/mysql/conf下新建 my.cnf,通过容器卷同步给mysql实例,解决中文乱码题目:
  1. [client]
  2. default_character_set=utf8
  3. [mysqld]
  4. collation_server = utf8_general_ci
  5. character_set_server = utf8
复制代码
3.3. 重启容器验证

重启mysql容器,使得容器重新加载设置文件:
  1. docker restart mysql
  2. [root@rockylinux conf]# docker exec -it 415f68bdf990 /bin/bash
  3. root@415f68bdf990:/# mysql -uroot -p
  4. Enter password:
  5. mysql>  SHOW VARIABLES LIKE 'character%';
  6. +--------------------------+----------------------------+
  7. | Variable_name            | Value                      |
  8. +--------------------------+----------------------------+
  9. | character_set_client     | utf8                       |
  10. | character_set_connection | utf8                       |
  11. | character_set_database   | utf8                       |
  12. | character_set_filesystem | binary                     |
  13. | character_set_results    | utf8                       |
  14. | character_set_server     | utf8                       |
  15. | character_set_system     | utf8                       |
  16. | character_sets_dir       | /usr/share/mysql/charsets/ |
  17. +--------------------------+----------------------------+
  18. 8 rows in set (0.01 sec)
  19. mysql>
复制代码
utf-8解决了中文乱码(中文插入报错)题目。
此时中文测试 ok


3.4. 总结

结论:docker安装完MySQL并run出容器后,建议请先修改完字符集编码后再新建mysql库-表-插数据

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

何小豆儿在此

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表