当前位置:首页 > 10 docker 安装 mysql详解 >

10 docker 安装 mysql详解

来源 德薄能鲜网
2025-06-24 12:57:46

目录

一、安装mysql

1. 镜像获取。

2. 简单版。

2.1. 使用mysql镜像

2.2. 插入数据建库建表

2.3. 外部win 连接并插入中文数据测试

2.4. 简单版本问题。

3. 创建容器-实战版本

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

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

3.3. 重启容器验证

3.4. 总结。


1.安装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 #查看容器IDdocker exec -it  a84b91d0b7f3 /bin/bash------------------------------------------------------------------root@a84b91d0b7f3:/# mysql -uroot -pEnter 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)#当前数据库(#xfff09db01￰中间创建了一个名字 aa 表,该表包含两个字段:id(#xfff09整数类型;和 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 将记录插入表中,#xff0c;id 为 1,name 为 'z3'
2.3. 外部win 连接并插入中文数据测试。

错误:默认编码字符集隐患docker。

mysql> SHOW VARIABLES LIKE 'character%';

+--------------------------+----------------------------+

| Variable_name | Value |。

+--------------------------+----------------------------+

| character_set_client | latin1 |。

+--------------------------+----------------------------+

| 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容器启动后,数据库࿰可以正常连接和创建c;创建表,插入数据。但是插入中文会报错。

没有容器卷映射。没有配置容器卷映射#xff0c;当容器意外被删除时,#xff0c;无法找回数据。

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配置(映射到。启动容器时,容器卷映射,mysql配置(//app/mysql/conf。)、数据(映射到。/app/mysql/data。

)、日志(映射到。

/app/mysql/log。)都映射到宿主机实际目录,因此,即使删除了容器,也不会产生太大的影响。只需执行启动Mysql容器命令,容器卷也在同一位置映射,所有数据都可以正常恢复。3.2. 新建my.cnf , 解决中文乱码问题。 在。/app/mysql/conf。

下新建。
my.cnf。

,Mysql实例࿰通过容器卷同步c;解决中文乱码问题:

[client]default_character_set=utf8[mysqld]collation_server = utf8_general_cicharacter_set_server = utf8。

3.3. 重启容器验证。

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

docker restart mysql[root@rockylinux conf]# docker exec -it 415f68bdf990 /bin/bashroot@415f68bdf990:/# mysql -uroot -pEnter 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-解决了中文乱码(中文插入错误)问题。

此时,中文测试 ok。此时,中文测试 ok。3.4. 总结。结论:docker安装MySQL,run出容器后󿼌在新建mysql库-表-插入数据之前,请先修改字符集编码。