创建挂载目录和配置文件
mkdir -p /mysql_master/mysql/log
mkdir -p /mysql_master/mysql/data
mkdir -p /mysql_master/mysql/conf
vim /mysql_master/mysql/conf/my.cnf
[ mysqld]
datadir = /var/lib/mysql
server_id = 1
log-bin= mysql-bin
binlog_ignore_db = mysql
binlog_ignore_db = sys
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema
relay_log_recovery = on
read-only= 0
relay_log = mysql-relay-bin
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
log-slave-updates= on
auto-increment-offset= 1
auto-increment-increment= 2
binlog_cache_size = 100M
binlog_format = mixed
expire_logs_days = 7
slave_skip_errors = ddl_exist_errors,1032
master_info_repository = table
relay_log_info_repository = table
slave-parallel-type= LOGICAL_CLOCK
slave-parallel-workers= 20
max_allowed_packet = 1024M
log-bin-trust-function-creators= 1
max_connections = 1000
max_user_connections = 500
wait_timeout = 31536000
interactive_timeout = 31536000
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
! includedir /etc/mysql/conf.d/
! includedir /etc/mysql/mysql.conf.d/
mkdir -p /mysql_slave/mysql/log
mkdir -p /mysql_slave/mysql/data
mkdir -p /mysql_slave/mysql/conf
vim /mysql_slave/mysql/conf/my.cnf
[ mysqld]
datadir = /var/lib/mysql
server_id = 2
log-bin= mysql-bin
replicate_ignore_db = mysql
replicate_ignore_db = sys
replicate_ignore_db = information_schema
replicate_ignore_db = performance_schema
relay_log_recovery = on
read-only= 1
relay_log = mysql-relay-bin
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
log-slave-updates= on
auto-increment-offset= 1
auto-increment-increment= 2
binlog_cache_size = 100M
binlog_format = mixed
expire_logs_days = 7
slave_skip_errors = ddl_exist_errors,1032
master_info_repository = table
relay_log_info_repository = table
slave-parallel-type= LOGICAL_CLOCK
slave-parallel-workers= 20
max_allowed_packet = 1024M
log-bin-trust-function-creators= 1
max_connections = 1000
max_user_connections = 500
wait_timeout = 31536000
interactive_timeout = 31536000
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
! includedir /etc/mysql/conf.d/
! includedir /etc/mysql/mysql.conf.d/
Mysql 容器启动
docker pull mysql:5.7
docker run -p 33061 :3306 --name mysql_master \
-v /mysql_master/mysql/log:/var/log/mysql \
-v /mysql_master/mysql/data:/var/lib/mysql \
-v /mysql_master/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
--restart = always \
-e MYSQL_ROOT_PASSWORD = 123456 \
-d mysql:5.7
docker run -p 33062 :3306 --name mysql_slave \
-v /mysql_slave/mysql/log:/var/log/mysql \
-v /mysql_slave/mysql/data:/var/lib/mysql \
-v /mysql_slave/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
--restart = always \
-e MYSQL_ROOT_PASSWORD = 123456 \
-d mysql:5.7
Mysql主从复制设置
主节点设置
docker exec -it mysql_master /bin/bash
mysql -uroot -p123456
GRANT REPLICATION SLAVE ON *.* TO 'slave' @'%' IDENTIFIED BY '123456' ;
flush privileges;
SELECT DISTINCT CONCAT( 'User: ' '',user,' ''@' '',host,' '';' ) AS query FROM mysql.user;
查询master的状态,记录File、Position的值,File表示当前日志文件名称,Position表示当前日志的位置,用于从节点日志同步
show master status;
从节点设置
docker exec -it mysql_slave /bin/bash
mysql -uroot -p123456
设置主节点连接,master_host为主节点容器IP(docker inspect mysql_master查看ip),master_user为主备账号,master_password为主备账号密码,master_log_file和master_log_pos为主节点容器中通过show master status查出来的File和Position值
change master to master_host = '172.18.0.2' ,master_port= 3306 ,master_user= 'slave' ,master_password= '123456' ,master_log_file= 'mysql-bin.000003' ,master_log_pos= 600 ;
start slave;
show slave status\ G;