1. 程式人生 > 其它 >Docker(九): 安裝MySQL主從複製

Docker(九): 安裝MySQL主從複製

Docker安裝MySQL主從複製

Docker(三):Docker安裝MySQL

編輯docker-compose

建立mysql-ms-docker-compose.yml

version: '3'
services:
  mysql:
    container_name: mysql
    image: mysql:5.7
    hostname: master
    ports:
      - "3306:3306"
    networks:
      - mysql-network
    volumes:
      - /mydata/mysql/log:/var/log/mysql
      - /mydata/mysql/data:/var/lib/mysql
      - /mydata/mysql/conf:/etc/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - COMPOSE_PROJECT_NAME=mysql-server

  mysql-slave:
    container_name: mysql-slave
    image: mysql:5.7
    hostname: slave
    ports:
      - "3307:3306"
    networks:
      - mysql-network
    volumes:
      - /mydata/mysql-slave/log:/var/log/mysql
      - /mydata/mysql-slave/data:/var/lib/mysql
      - /mydata/mysql-slave/conf:/etc/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - COMPOSE_PROJECT_NAME=mysql-serverps

networks:
  mysql-network:
    driver: bridge

修改主配置檔案

新增server-id=3306, 唯一值。開啟binloglog-bin=mysql-bin

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
server-id=3306
log-bin=mysql-bin
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
default-time-zone='+08:00'

修改從配置檔案

新增server-id=3307, 唯一值。

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
server-id=3307
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
default-time-zone='+08:00'

啟動mysql

docker-compose -f mysql-ms-docker-compose.yml up -d

主從關聯

建立從庫訪問主庫的使用者並授權

主庫中執行sql指令碼

create user "slave_admin"@"%" identified by "123456";
grant replication slave on *.* to 'slave_admin'@'%' IDENTIFIED BY '123456' with grant option ;
flush privileges;

檢視master狀態

show master status;

配置slave

從庫執行指令碼, master_log_file對映上圖File, master_log_pos對映上圖Position

change master to master_host = 'master', master_port = 3306, master_user ='slave_admin', master_password = '123456', master_log_file  = 'mysql-bin.000003', master_log_pos = 903;
start slave ;

檢視slave狀態

show slave status;

錯誤排查

Slave_IO_Running != YES, 檢查從庫是否可以連線到主庫及master_host = 'master', master_port = 3306, master_user ='slave_admin', master_password = '123456'是否正確。

Slave_SQL_Running != YES, 檢查master_log_file = 'mysql-bin.000003', master_log_pos = 903配置是否正確。