1、创建conf.ddatalogs 目录,我们要把mysql的数据挂载出来
conf.d目录中创建custom.cnf文件,内容如下:

[mysqld]
#标识该服务器的唯一ID,应该在主从服务器中分别设置不同的值
server-id=1

#启用二进制日志记录,将所有的更新操作以二进制格式记录到指定的文件中。
#在 MySQL 8.0 版本中,启用 GTID 模式进行主从复制时,log-bin 参数可以不设置。
#因为 GTID 模式在实现主从复制时不再需要二进制日志文件名(log filename)和偏移量(log position),
#而是通过 GTID 来确保数据的一致性,因此 log-bin 参数可以省略。
#不过,如果想要启用基于二进制日志的备份或恢复,则仍然需要设置 log-bin 参数。
log_bin=mysql-bin

#开启GTID特性。
gtid_mode=ON

#保证复制的数据一致性。
enforce_gtid_consistency=ON

#指定二进制日志格式为ROW模式,可以记录每一行数据的变更情况,从而减少数据冲突和错误
#STATEMENT
#ROW
#MIXED
#ROW格式是比较推荐的,因为它可以减少数据冲突和错误,并提高复制性能和稳定性。
binlog_format=ROW

# 排除information_schema和mysql数据库中的SQL语句。
# 多个库,逗号隔开
binlog_ignore_db=information_schema,mysql

default_authentication_plugin=mysql_native_password
lower_case_table_names=1
skip_name_resolve=ON
#skip-grant-tables
max_connections=1000
max_user_connections=850
max_connect_errors=1000
max_allowed_packet=100M
innodb_log_file_size=256M
binlog_expire_logs_seconds=259200
#innodb_force_recovery=1


log_error=/var/log/mysql_error.log
log_timestamps=SYSTEM

然后创建文件 logs/mysql_error.log,并使用 chmod 777 mysql_error.log 设置文件权限。

2、将下面的内容配置到 docker-compose.yml 中

version: '3'
services:
  mysql8:
    image: docker.io/mysql8:8.0.16
    container_name: mysql8
    volumes:
      - ./mysql8/conf.d:/etc/mysql/conf.d
      - ./mysql8/data:/var/lib/mysql
      - ./mysql8/logs/mysql_error.log:/var/log/mysql_error.log # 这个应在 cnf 配置文件中通过 log_error 配置路径
    ports:
      - 3306:3306
      - 33060:33060
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 'root@123'
    command: --default-authentication-plugin=mysql_native_password --lower-case-table-names=1
    networks:
      - shanhy-ci
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"
networks:
  shanhy-ci:
    driver: bridge

其中--lower-case-table-names设定数据库不区分大小写,--default-authentication-plugin使mysql8的密码存储方式保留为传统普通密码方式。

最后使用 docker-compose up -d 启动容器即可。


(END)

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐