Docker(九): 安裝MySQL主從複製
阿新 • • 發佈:2021-09-04
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
, 唯一值。開啟binlog
, log-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
配置是否正確。