10 docker 安装 mysql详解

目录

一、安装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. 镜像获取

docker search mysql #搜索镜像
docker pull mysql:5.7 #拉取镜像
docker images #查看结果

2. 简单版

2.1. 使用mysql镜像
[root@rockylinux ~]# 
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 
docker ps #查看容器ID
docker exec -it  a84b91d0b7f3 /bin/bash
------------------------------------------------------------------
root@a84b91d0b7f3:/# mysql -uroot -p
Enter password:(123456)
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. 建库建表插入数据
mysql> create database db01;
Query OK, 1 row affected (0.00 sec)
#创建名为 db01 的数据库

mysql> use db01;
Database changed
#切换到 db01 数据库,使其成为当前操作的数据库

mysql> create table aa(id int,name varchar(20));
Query OK, 0 rows affected (0.02 sec)
#在当前数据库(db01)中创建一个名为 aa 的表,该表包含两个字段:id(整数类型)和 name(长度为20的可变字符类型)

mysql> insert into aa values(1,'z3');
Query OK, 1 row affected (0.01 sec)

mysql> select * from aa;
+------+------+
| id   | name |
+------+------+
|    1 | z3   |
+------+------+
1 row in set (0.00 sec)
#向 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 容器,并配置容器卷映射:

docker run -d -p 3306:3306 \
           --privileged=true \
           -v /app/mysql/log:/var/log/mysql \
           -v /app/mysql/data:/var/lib/mysql \
           -v /app/mysql/conf:/etc/mysql/conf.d \
           -e MYSQL_ROOT_PASSWORD=root \
           --name mysql \
           mysql:5.7

启动时将容器做了容器卷映射,将mysql的配置(映射到/app/mysql/conf)、数据(映射到/app/mysql/data)、日志(映射到/app/mysql/log)都映射到了宿主机实际目录,所以即使删除了容器,也不会产生太大影响。只需要再执行一下启动Mysql容器命令,容器卷还按相同位置进行映射,所有的数据便都可以正常恢复。

3.2. 新建my.cnf , 解决中文乱码

/app/mysql/conf下新建 my.cnf,通过容器卷同步给mysql实例,解决中文乱码问题:

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
3.3. 重启容器验证

重启mysql容器,使得容器重新加载配置文件:

docker restart mysql

[root@rockylinux conf]# docker exec -it 415f68bdf990 /bin/bash
root@415f68bdf990:/# mysql -uroot -p
Enter password:
mysql>  SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql>

utf-8解决了中文乱码(中文插入报错)问题。

此时中文测试 ok

3.4. 总结

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

相关推荐

  1. 使用docker安装mysql详细教程

    2024-07-10 23:32:03       26 阅读
  2. dockerdocker安装Mysql

    2024-07-10 23:32:03       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 23:32:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 23:32:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 23:32:03       45 阅读
  4. Python语言-面向对象

    2024-07-10 23:32:03       55 阅读

热门阅读

  1. windows node降级到指定版本

    2024-07-10 23:32:03       18 阅读
  2. 153. 寻找旋转排序数组中的最小值

    2024-07-10 23:32:03       16 阅读
  3. ArduPilot开源代码之AP_OpticalFlow_UPFLOW

    2024-07-10 23:32:03       18 阅读
  4. 【算法】十进制转换为二进制

    2024-07-10 23:32:03       21 阅读
  5. 精通Vim的艺术:Ex命令的深度指南

    2024-07-10 23:32:03       21 阅读
  6. MySQL篇:日志

    2024-07-10 23:32:03       20 阅读
  7. python库 - sentencepiece

    2024-07-10 23:32:03       20 阅读
  8. drawio打开不显示,不在当前屏幕的解决方案

    2024-07-10 23:32:03       18 阅读
  9. 贪心算法-以高校教师信息管理系统为例

    2024-07-10 23:32:03       19 阅读
  10. 2024百度之星第三场第一题 数星星

    2024-07-10 23:32:03       22 阅读
  11. 【安卓学习】复选框CheckBox

    2024-07-10 23:32:03       22 阅读
  12. 人机交互中信息之间的距离

    2024-07-10 23:32:03       22 阅读