docker-compose MySQL 8.0 GTID主从复制 主从架构 集群方案



---准备2台机器

192.168.0.121  (安装master)

192.168.0.122  (安装slave)


---192.168.0.121 master 机器

cd  /data/db/mysql

mkdir data logs


-master.cnf

[mysqld]
max_connections = 2000
default-time_zone='+8:00'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#gtid:
server_id = 1                   #服务器id
gtid_mode = on                  #开启gtid模式
enforce_gtid_consistency = on   #强制gtid一致性,开启后对于特定create table不被支持
#binlog
log_bin = mysql-binlog
log_slave_updates = on
binlog_format = row             #强烈建议,其他格式可能造成数据不一致
# 指定同步哪个数据库
binlog-do-db=d_sun
# 忽略以下数据库的同步
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#relay log
skip_slave_start = 1
default_authentication_plugin = 'mysql_native_password'  #更改加密方式

-docker-compose.yaml

version: "3.9"
services:
  mysql:
    restart: always
    image: mysql:latest
    container_name: mysql
    ports:
      - 3306:3306
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ${PWD}/data:/var/lib/mysql
      - ${PWD}/logs:/var/log/mysql
      - ${PWD}/master.cnf:/etc/my.cnf


---192.168.0.122 slave 机器

-slave.cnf

[mysqld]
max_connections = 2000
default-time_zone = '+8:00'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#GTID:
server_id = 2                  #服务器id(注意这里的servier_id不能master一样,另外每启动一台slave,都需要改动)
gtid_mode = on                 #开启gtid模式
enforce_gtid_consistency = on  #强制gtid一致性,开启后对于特定create table不被支持
#binlog
log_bin =mysql-binlog
log_slave_updates = on
binlog_format = row            #强烈建议,其他格式可能造成数据不一致
# 以下为多余配置,slave机器不需要配置,否则会导致mysql服务无法启动
# 指定同步哪个数据库
# binlog-do-db=d_sun
# 忽略以下数据库的同步
# binlog-ignore-db=mysql
# binlog-ignore-db=sys
# binlog-ignore-db=information_schema
# binlog-ignore-db=performance_schema
#relay log
skip_slave_start = 1
default_authentication_plugin = 'mysql_native_password'  #更改加密方式
read_only = on                   #设置只读
super_read_only = on    # 设置超级管理员也只允许读,不允许写
# mysql8.0以上版本,binlog保存时间 以秒为单位;默认2592000 30天
# mysql8.0以下版本,使用expire_logs_days,以天为单位
binlog_expire_logs_seconds=604800

-docker-compose.yaml

version: "3.9"
services:
  mysql:
    restart: always
    image: mysql:latest
    container_name: mysql
    ports:
      - 3306:3306
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ${PWD}/data:/var/lib/mysql
      - ${PWD}/logs:/var/log/mysql
      - ${PWD}/slave.cnf:/etc/my.cnf


---启动mysql服务

docker-compose up -d


---查看server_id是否生效

show variables like '%server_id%';


# mysql 主从复制:   https://abc.htmltoo.com/thread-46258.htm


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回