docker-compose mysql8.0 主从同步
·
目的
数据安全
原理
利用二进制日志作为主从同步的信使
主库
my.cnf
# 创建目录
sudo mkdir -p /srv/mysql/master
# 创建文件
sudo vim /srv/mysql/master/my.cnf
/srv/mysql/master/my.cnf
[mysql]
# mysql默认字符集
default-character-set=utf8mb4
[mysqld]
# mysqld默认字符集
character-set-server=utf8mb4
# 新建表默认存储引擎
default-storage-engine=INNODB
# 认证方式
default_authentication_plugin=mysql_native_password
# 禁止域名解析,只能使用ip,可以提高性能
# skip-name-resolve
# !mysql的数据存放目录
datadir=/var/lib/mysql
# 表名不区分大小写
lower_case_table_names=1
# 最大允许数据包大小
max_allowed_packet=128M
# !设置唯一库ID
server-id=1
# !开启二进制日志并指定日志名前缀
log-bin=/var/lib/mysql/mysql-bin
# 二进制日志格式
## STATEMENT(默认):基于SQL语句的模式,binlog小,可能出错
## MIXED:混合模式,binlog大
## ROW:基于行的模式,记录行的变化,binlog最大,不出错
# binlog_format=ROW
# 最大二进制日志文件大小
max_binlog_size=100M
# 清除过期日志的时间(7天,单位s)
binlog_expire_logs_seconds=604800
mysql-master-compose.yaml
# 创建目录
sudo mkdir -p /srv/compose-file /srv/mysql/master/data /srv/mysql/master/mysql-files /srv/mysql/master/sql
# 创建文件mysql-master-compose.yaml,把mysql-master-compose.yaml中的内容放入
sudo vim /srv/compose-file/mysql-master-compose.yaml
# 运行文件mysql-master-compose.yaml
sudo docker-compose -f /srv/compose-file/mysql-master-compose.yaml up -d
# 检查
sudo docker logs -f mysql8-master
/srv/compose-file/mysql-master-compose.yaml
version: '3'
services:
mysql8:
image: mysql:8.0
container_name: mysql8-master
restart: always
environment:
MYSQL_ROOT_PASSWORD: xcrj_pwd
TZ: Asia/Shanghai
ports:
- 3306:3306
volumes:
- /srv/mysql/master/my.cnf:/etc/mysql/my.cnf
- /srv/mysql/master/data:/var/lib/mysql
- /srv/mysql/master/mysql-files:/var/lib/mysql-files
- /srv/mysql/master/conf.d:/etc/mysql/conf.d
- /srv/mysql/master/sql:/sql
- /srv/mysql/master/error.log:/var/log/mysql/error.log
# ro只读模式
- /etc/localtime:/etc/localtime:ro
配置
# 进入mysql8-master容器
sudo docker exec -it mysql8-master
# 进入mysql
mysql -u root -p
# 创建用户repl
mysql> CREATE USER 'replymeee'@'%' IDENTIFIED WITH mysql_native_password BY 'replymeee';
# 授予用户repl从库相关权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replymeee'@'%';
# 刷新权限
mysql> flush privileges;
# 获取主库二进制日志文件(binary log)文件名(File)和位置(Position)
mysql> SHOW MASTER STATUS;

从库
my.cnf
# 创建目录
sudo mkdir -p /srv/mysql/slave
# 创建文件
sudo vim /srv/mysql/slave/my.cnf
my.cnf
[mysql]
# mysql默认字符集
default-character-set=utf8mb4
[mysqld]
# mysqld默认字符集
character-set-server=utf8mb4
# 新建表默认存储引擎
default-storage-engine=INNODB
# 认证方式
default_authentication_plugin=mysql_native_password
# 禁止域名解析,只能使用ip,可以提高性能
# skip-name-resolve
# !mysql的数据存放目录
datadir=/var/lib/mysql
# 表名不区分大小写
lower_case_table_names=1
# 最大允许数据包大小
max_allowed_packet=128M
# !设置唯一库ID
server-id=2
# !开启二进制日志并指定日志名前缀
log-bin=/var/lib/mysql/mysql-bin
# 二进制日志格式
## STATEMENT(默认):基于SQL语句的模式,binlog小,可能出错
## MIXED:混合模式,binlog大
## ROW:基于行的模式,记录行的变化,binlog最大,不出错
# binlog_format=ROW
# 最大二进制日志文件大小
max_binlog_size=100M
# 清除过期日志的时间(7天,单位s)
binlog_expire_logs_seconds=604800
mysql-slave-compose.yaml
# 创建目录
sudo mkdir -p /srv/compose-file /srv/mysql/slave/data /srv/mysql/slave/mysql-files /srv/mysql/slave/sql
# 创建文件mysql-slave-compose.yaml,把mysql-slave-compose.yaml中的内容放入
sudo vim /srv/compose-file/mysql-slave-compose.yaml
# 运行文件mysql-slave-compose.yaml
sudo docker-compose -f /srv/compose-file/mysql-slave-compose.yaml up -d
# 检查
sudo docker logs -f mysql8-slave
mysql-slave-compose.yaml
version: '3'
services:
mysql8:
image: mysql:8.0
container_name: mysql8-slave
restart: always
environment:
MYSQL_ROOT_PASSWORD: xcrj_pwd
TZ: Asia/Shanghai
ports:
- 3306:3306
volumes:
- /srv/mysql/slave/my.cnf:/etc/mysql/my.cnf
- /srv/mysql/slave/data:/var/lib/mysql
- /srv/mysql/slave/mysql-files:/var/lib/mysql-files
- /srv/mysql/slave/conf.d:/etc/mysql/conf.d
- /srv/mysql/slave/sql:/sql
- /srv/mysql/slave/error.log:/var/log/mysql/error.log
# ro只读模式
- /etc/localtime:/etc/localtime:ro
配置
# 登录mysql
mysql -u root -p
# 设置主库参数,根据主库SHOW MASTER STATUS;修改
mysql> CHANGE MASTER TO
MASTER_HOST='xxx.xxx.xxx.xxx',
MASTER_USER='replymeee',
MASTER_PASSWORD='replymeee',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=836;
# 开启主从同步
mysql> start slave;
# 查看同步状态
mysql> show slave status\G;

更多推荐
所有评论(0)