docker-compose
使用Docker部署环境非常方便,Compose
项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
它允许用户通过一个单独的docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目。
部署mysql容器
根据我的习惯,我将容器放在/usr/local/docker
目录下:
$ mkdir mysql
$ cd mysql
$ vim docker-compose.yaml
文件内容如下:
version: '3.1'
services:
mysql:
hostname: "localhost"
network_mode: "bridge"
command:
--default-authentication-plugin=caching_sha2_password
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_USER: 'root'
MYSQL_PASS: '123456'
image: "mysql"
container_name: "mysql_1"
restart: always
volumes:
- "./db:/var/lib/mysql"
- "./conf/my.cnf:/etc/my.cnf"
- "./init:/docker-entrypoint-initdb.d/"
ports:
- "3306:3306"
编写完成后,在当前目录下运行命令:
$ docker-compose up -d
可能遇到的问题
由于mysql8.0版本性能提升明显,这里拉取的镜像直接使用latest版本,因此默认是mysql8.0
https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html
如果不加--default-authentication-plugin=caching_sha2_password
,在使用诸如pycharm直接连接数据库或pymysql都会遇到报错:
RuntimeError: cryptography is required for sha256_password or caching_sha2_p
这是因为MySQL8.0版本以后采用caching_sha2_password作为默认的身份验证插件
解决方案
- 还未创建容器,那么在docker-compose文件里提前设定好
default-authentication-plugin
- 如果已经创建好了,也可以进入数据库,查询数据库中user表plugin列的值
然后输入以下命令SELECT host, user, plugin, authentication_string FROM mysql.user;
这样就更改身份验证插件为ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; FLUSH PRIVILEGES;
mysql_native_password
,再重启服务