docker实战教程(十四):docker上安装mysql

docker hub上查找mysql镜像

docker search mysql

从docker hub上拉取mysql镜像到本地(指定版本为5.7)

docker pull mysql:5.7


使用mysql 5.7镜像创建容器(也叫运行镜像)

简单版

1.使用mysql镜像

# -e:设置环境,这里设置的是密码
# -d:后台运行
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

如果执行过程中发现端口被占用,使用netstat -nplt找到对应的进程,kill -9杀掉进程即可

但是发现不起作用,因为再次使用netstat查看,发现mysqld服务还在,原来这个进程是服务器上的mysql,已经监听了服务器的3306端口,这时候把服务器mysqld服务关闭

这时候可以正常创建了

2.建库建表插入数据
进入容器

docker exec -it 2556d631382c /bin/bash

输入账号密码进入mysql

![](https://img2022.cnblogs.com/blog/1186367/202211/1186367-20221105175957018-1014353378.png)
创建数据库、数据表并插入数据
![](https://img2022.cnblogs.com/blog/1186367/202211/1186367-20221105180220989-1238589636.png)

3.外部window连接运行在docker上的mysql容器实例服务
如果连不成功,检查linux服务器上的防火墙是否关闭
![](https://img2022.cnblogs.com/blog/1186367/202211/1186367-20221105180722801-884982927.png)

4.问题
(1).插入中文数据试试,为什么会报错?
![](https://img2022.cnblogs.com/blog/1186367/202211/1186367-20221105181137033-967822841.png)

docker上默认字符集编码隐患
```linux
SHOW VARIABLES LIKE 'character%';

(2).删除容器后,里面的mysql数据怎么办

实战版

1.新建mysql容器实例

#  --privileged=true 容器数据卷的开启
# 挂了三个容器卷
docker run -d -p 3306:3306 --privileged=true -v /root/mysql/log:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7

2.新建my.cfg
通过容器卷同步给mysql容器实例

[root@k8scloude1 tmp]# cd /root/mysql/conf/
[root@k8scloude1 conf]# ls -l
total 0
[root@k8scloude1 conf]# vim my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8

3.重新启动mysql容器实例再重新进入并查看字符编码

docker restart mysql
docker exec -it mysql /bin/bash
mysql -u root -p

4.再新建库建表插入中文测试

5.结论
之前的DB无效,修改字符集操作+重启mysql容器实例之后的DB有效,需要重建
结论:docker安装完mysql并run出容器后,建议请先修改完字符集编码后再新建mysql库、表,插入数据

6.数据问题
假如把mysql容器删除,重新创建并启动一个新的容器

这时候进入mysql中,发现它里面的数据还在,这是因为数据已经挂载到了本地的/root/mysql/data目录下,实现了数据备份

posted @ 2022-11-05 18:53  cnhkzyy  阅读(304)  评论(0编辑  收藏  举报