docker-compose部署系统简单方便,出现问题也可以快速重来。mysql5.7和mysql8.0是两个比较流行的mysql版本。简单部署记录下来,供大家参考。
1、准备docker-compose环境
安装docker.io和docker-compose
sudo apt install docker.iosudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# Apply executable permissions to the binary
sudo chmod +x /usr/local/bin/docker-compose# Verify the installation
docker-compose version
mysql的docker-compose安装需要my.cnf配置文件和docker-compose.yml文件,下面分别介绍
2、mysql 5.7的安装
my.cnf文件如下
[mysql]
#mysql客户端默认字符集
default-character-set=utf8[mysqld]
# 设置3306端口
port = 3306
# 允许最大连接数
max_connections=1000
# 设置mysql服务端默认字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 缓存大小
sort_buffer_size=256MB
#设置为东八区(北京时间)
explicit_defaults_for_timestamp=true
default-time_zone='+8:00'
docker-compose.yml文件如下
services:mysql:image: mysql:5.7container_name: mysqlports:- 3306:3306volumes:- ./mysql:/var/lib/mysql- ./my.cnf:/etc/mysql/my.cnfenvironment:MYSQL_ROOT_PASSWORD: "root"restart: alwaysprivileged: true
ports的端口映射,第一个是主机端口,第二个是容器内的端口(my.cnf中的port指定),容器内的端口尽量使用默认值,根据需要调整主机端口即可。
volumes用于挂载配置文件和数据目录,./mysql表示当前目录下的mysql子目录,也可以用绝对路径指定
保存编辑后,执行sudo docker-compose up -d中后台启动容器。
也可以分步骤,先执行docker-compose pull拉取,然后执行docker-compose up执行,没问题了再转为后台运行。
3、mysql8.0的安装
my.cnf文件如下
[mysqld]
default-time_zone='Asia/Shanghai'
datadir=/var/lib/mysqldefault-storage-engine=INNODB
character_set_server=utf8
lower_case_table_names=1
table_open_cache=128
max_connections=2000
max_connect_errors=6000
innodb_file_per_table=1
innodb_buffer_pool_size=1G
max_allowed_packet=64M
transaction_isolation=READ-COMMITTED
innodb_flush_method=O_DIRECT
innodb_lock_wait_timeout=1800
innodb_flush_log_at_trx_commit=0
sync_binlog=0
group_concat_max_len=1024000
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
skip-name-resolve[mysql]
default-character-set=utf8[mysql.server]
default-character-set=utf8
docker-compose.yml文件如下
services:mysql:image: mysql:8.0container_name: mysql80ports:- 13306:3306volumes:- ./mysql:/var/lib/mysql- ./my.cnf:/etc/mysql/my.cnfenvironment:MYSQL_ROOT_PASSWORD: "root"restart: alwaysprivileged: true
升级到8.0后连接MySQL数据库的时候,如果报错内容如下:“Public Key Retrieval is not allowed”,原因是mysql 8.0 默认使用 caching_sha2_password 身份验证机制 (即从原来mysql_native_password 更改为 caching_sha2_password。)
从 5.7 升级 8.0 版本的不会改变现有用户的身份验证方法,但新用户会默认使用新的 caching_sha2_password 。 客户端不支持新的加密方式。 修改用户的密码和加密方式。
方案一:
在命令行模式下进入mysql,输入以下命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
或者
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
方案二:
在配置数据源的时候直接将属性allowPublicKeyRetrieval设置为true即可
4、其他
外部访问需要开放对应的防火墙端口
如果有多个版本mysql运行,docker-compose.yml中的container_name名称不能重复,可以加上版本,如mysql80。多个mysql的主机端口也不能重复,上面示例中一个使用3306,一个使用13306。