ubuntu基于docker-compose部署mysql5.7和mysql8.0

       docker-compose部署系统简单方便,出现问题也可以快速重来。mysql5.7和mysql8.0是两个比较流行的mysql版本。简单部署记录下来,供大家参考。

1、准备docker-compose环境

      安装docker.io和docker-compose

sudo apt install docker.io

sudo 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.7
    container_name: mysql
    ports:
      - 3306:3306
    volumes:
      - ./mysql:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    restart: always
    privileged: 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/mysql

default-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.0
    container_name: mysql80
    ports:
      - 13306:3306
    volumes:
      - ./mysql:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    restart: always
    privileged: 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。

上一篇:人工智能—机器学习-图像处理


下一篇:Matlab实现白鲸优化算法(BWO)求解路径规划问题