docker-compose搭建mysql8.0 集群

1,141 阅读2分钟

docker-compose搭建mysql8.0 集群

1.  规划目录环境

整体规划如下,1个docker-compose文件,1主1从数据库数据映射卷

创建数据映射卷文件夹

mkdir -p data/master && mkdir -p data/slave 

docker-compose.yaml文件内容如下:

version: "3.7"
services:
  db_master:
    image: mysql:8.0.32
    container_name: db_master
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: test
      MYSQL_USER: developer
      MYSQL_PASSWORD: 123456
      TZ: Asia/Shanghai
    command: 
      --character-set-server=utf8mb4 
      --collation-server=utf8mb4_unicode_ci
      --default-authentication-plugin=mysql_native_password
      --server-id=1
      --log-bin=mysql-bin
      --binlog-do-db=test
    volumes:
      - ./data/master:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - db_network
  db_slave:
    image: mysql:8.0.32
    container_name: db_slave
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: test
      MYSQL_USER: developer
      MYSQL_PASSWORD: 123456
      TZ: Asia/Shanghai
      MYSQL_MASTER_HOST: db_master
      MYSQL_MASTER_PORT: 3306
      MYSQL_MASTER_USER: developer
      MYSQL_MASTER_PASSWORD: 123456
      MYSQL_REPLICA_USER: developer
      MYSQL_REPLICA_PASSWORD: 123456
    command: 
      --character-set-server=utf8mb4 
      --collation-server=utf8mb4_unicode_ci  
      --default-authentication-plugin=mysql_native_password
      --server-id=2
      --relay-log=mysql-relay-bin
      --log-slave-updates
      --read-only=1
      --replicate-do-db=test
    volumes:
      - ./data/slave:/var/lib/mysql
    ports:
      - "3307:3306"
    networks:
      - db_network
networks:
  db_network:
    driver: bridge

2.  启动容器实例

docker-compose up -d

3.  详细配置

3.1.  主库配置

进入主库执行以下命令,为developer(根据实际情况)用户授予 REPLICATION 权限

GRANT REPLICATION SLAVE ON *.* TO 'developer'@'%';
SHOW MASTER STATUS; #binlog.000002	 1454

输出信息做好记录,后续会用到

3.2.  从库配置

进入从库配置

STOP SLAVE;
#需要根据实际情况进行调整
change master to master_host='db_master',master_port=3306,master_user='developer',master_password='123456',master_log_file='binlog.000002',master_log_pos=1454,master_connect_retry=30;
START SLAVE USER='developer' PASSWORD='123456';
SHOW SLAVE STATUS;

4 额外需求

在工作中遇到一个需求,其它团队需要写入数据到主库中,但要同步到从库。我们的方案是在主库中建一个data_pusher用户,只赋予写入和查询aaa表权限,具体脚本如下:

  • 主库root帐号创建新表aaa;
  • 主库root帐号新建 data_pusher用户,并赋予读写查权限;
CREATE USER 'data_pusher'@'%' IDENTIFIED BY '654321'; GRANT INSERT, SELECT, UPDATE ON test.aaa TO 'data_pusher'@'%'; FLUSH PRIVILEGES;

经过测试,使用data_pusher用户连接主库,并在test.aaa表中插入数据,主库root帐号和从库root帐号都可以看到新加入的数据。