docker-compos mysql5.7主從配置
docker-compose目錄結構
配置文件
master/my.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
nice = 0[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
secure-file-priv=/var/lib/mysql-files
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamplog-bin = mysql-bin
server-id = 1
slave/my.cn
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
nice = 0[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
secure-file-priv=/var/lib/mysql-files
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamplog-bin = mysql-bin
server-id = 2
docker-compose.yml文件
version: '3.2'
services:mysql-master:image: "mysql:5.7"container_name: mysql-masterrestart: alwaysprivileged: trueenvironment:MYSQL_ROOT_PASSWORD: 123456 #主庫root用戶的密碼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--max_allowed_packet=128M;ports:- 3306:3306 #映射宿主機端口:容器端口volumes: #宿主機配置目錄或文件掛載到容器- ./master/my.cnf:/etc/mysql/my.cnf- ./master/mysql-files:/var/lib/mysql-files- ./master/data:/var/lib/mysql- ./master/log:/var/log/networks:mysql-network:ipv4_address: 10.2.0.2mysql-slave:image: "mysql:5.7"container_name: mysql-slaverestart: alwaysprivileged: trueenvironment:MYSQL_ROOT_PASSWORD: 123456 #從庫root用戶的密碼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--max_allowed_packet=128M;ports:- 3307:3306 #映射宿主機端口:容器端口volumes: #宿主機配置目錄或文件掛載到容器- ./slave/my.cnf:/etc/mysql/my.cnf- ./slave/mysql-files:/var/lib/mysql-files- ./slave/data:/var/lib/mysql- ./slave/log:/var/log/networks:mysql-network:ipv4_address: 10.2.0.3
networks: #定義容器連接網絡mysql-network:driver: bridgeipam:driver: defaultconfig:- subnet: 10.2.0.0/24
運行
在配置文件目錄下使用docker compose up -d
運行
主節點的mysql配置:
進入主節點docker容器
docker exec -it mysql-master bash
mysql -uroot -p123456
#創建賬號用于從機連接主機
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' identified by '123456';
權限立刻生效
flush privileges;
查看binglog信息
show master status \G;
從節點的mysql配置:
進入從節點
docker exec -it mysql-slave bash
mysql -uroot -p123456
配置連接
下面幾個參數需要與主節點的信息對應
CHANGE MASTER TO MASTER_HOST='10.2.0.2', MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=589;
啟動服務
start slave;
查看狀態
show slave status \G;