Docker 安装 Mysql

1. 查找镜像

docker Hub https://hub.docker.com/_/mysql

docker search docker

2.拉取镜像

docker pull mysql

3.run mysql 镜像

docker run --name mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql

[root@192 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                                                  NAMES
f4540b780085   mysql     "docker-entrypoint.s…"   7 seconds ago   Up 5 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql1

 但是建议使用数据卷命令run容器,这样mysql的数据不会因为容器被删除而丢失。

[root@192 ~]# docker run -d --name=mysql1 -p 3306:3306 --privileged=true -v /dylan/mysql/log:/var/log/mysql -v /dylan/mysql/data:/var/lib/mysql -v /dylan/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root  mysql


冒号左边是主机路径,右边是容器路径

[root@192 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                                                  NAMES
f4540b780085   mysql     "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql1
[root@192 ~]# 



4. 进入mysql容器

docker exec -it f4540b780085 /bin/bash

5. 进入mysql

root@f4540b780085:/# mysql -uroot -p

5.1 在容器中 操作mysql

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.11 sec)

mysql> create database db01;
Query OK, 1 row affected (0.02 sec)

mysql> use db01;
Database changed
mysql> create table t1(id int,name varchar(20));
Query OK, 0 rows affected (0.05 sec)

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

mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | z3   |
+------+------+
1 row in set (0.00 sec)

6. 本地机器(win10)可视化工具连接容器mysql

6.1 查看容器所以机器的IP地址

[root@192 ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:2eff:fe77:ef29  prefixlen 64  scopeid 0x20<link>
        ether 02:42:2e:77:ef:29  txqueuelen 0  (Ethernet)
        RX packets 275  bytes 118272 (115.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 388  bytes 24786 (24.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.217.145  netmask 255.255.255.0  broadcast 192.168.217.255
        inet6 fe80::f541:190d:75c9:387d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:72:7e:cc  txqueuelen 1000  (Ethernet)
        RX packets 1976  bytes 136956 (133.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 390  bytes 190226 (185.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

6.2 可视化工具连接容器mysql

6.3 连接成功

7. 容器mysql 解决中文乱码问题

注:在本机插入中文,在容器中读取显示乱码 (继步骤6完成之后)

mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | z3   |
|    2 | li4  |
|    3 | ??   |
+------+------+
3 rows in set (0.00 sec)

 此时查看编码不是utf8

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)

解决:

新建在/dylan/mysql/conf 目录下创建 my.cnf 文件(需要用容器数据卷映射路径),内容为

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

 重启mysql 容器:

docker restart mysql1

再次查看编码变成utf8

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb3                        |
| character_set_connection | utf8mb3                        |
| character_set_database   | utf8mb3                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb3                        |
| character_set_server     | utf8mb3                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.18 sec)

再次查看表内容,此时没有乱码

mysql> select * from t1;
+------+--------+
| id   | name   |
+------+--------+
|    1 | z3     |
|    2 | 王五   |
+------+--------+
2 rows in set (0.00 sec)

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值