基于Docker的Mysql使用过程(一)——安装

1.启动

1
2
3
4
5

[root@dev001 vhost]# docker run --name mysql -p 3308:3306 -itd -e MYSQL_ROOT_PASSWORD=xx mysql:8.0

67a5025a3a14ab815bd04e08a4c357d6e235db8f7c59f0432dc102ea2f2f2525

2.查看容器IP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

[root@dev001 vhost]# docker inspect mysql
//找到networks字段
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "244a2f6355b609ede5c8311c530516b7493175881d7777c53f497d3fbc56110f",
"EndpointID": "90a9071b14f938083b807ae78d5bf88e292a3bc52286757929adedb0473d6693",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}

3.在宿主机连接容器的mysql,发生错误

1
2
3
4
[root@dev001 vhost]# mysql -h172.17.0.2 -uroot -p

Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/local/mysql/lib/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

错误原因:

在宿主机使用的mysql版本和容器内的mysql版本不一致,在mysql8中,mysql的密码的加密方式不一致,mysql8中的默认加密方式为:caching_sha2_password,而宿主机中找不到这种加密方式的库,所以报错。

解决方式:

1
2
3
4
5
6
docker exec -it mysql2 /bin/bash # 进入mysql容器:
mysql -uroot -pmima #进入mysql
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; #修改密码和加密方式
flush privileges; #刷新权限
exit # 退出mysql
exit # 退出容器

4.使用宿主机映射的端口登录

启动容器的时候将宿主机的3307映射到了容器的3306,这个时候是可以使用宿主机的3307端口登录

1
2
3
4
[root@dev001 zhangweixi]# mysql -uroot -P 3307 -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

然而,却登录失败了,这是因为使用本机登录的时候,mysql将默认host为localhost,此时对应的加密方式还是caching_sha2_password

5.其他

不要忘记了服务器的防火墙端口设置和阿里云的安全组端口设置