一、mysql master配置

项目结构

项目结构

说明:本文没用到master.sh

修改master的my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[mysqld]
## 设置server_id,同一局域网中需要唯一
server-id=100
## 端口
port=3306
## 加密方法
default-authentication-plugin=mysql_native_password
## 最大连接数
max_connections=800
## 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接
max_connect_errors=1000
## 开启binlog
log_bin=ON
## 慢查询
slow_query_log=ON
## 慢查询日志
slow_query_log_file=/var/lib/mysql/slow.log
## 错误日志路径
log_error=/var/lib/mysql/mysql.err

## slave复制的数据会写入log-bin日志文件里
log-slave-updates=ON
## 保证事务安全完整性的
enforce-gtid-consistency=ON
## slave进行同步复制的时候,无须找到binlog日志和POS点
gtid_mode=ON

## 不记录information_schema的二进制日志
binlog-ignore-db=information_schema
## 不记录mysql
binlog-ignore-db=mysql
## 不记录sys
binlog-ignore-db=sys
## 不记录performance_schema
binlog-ignore-db=performance_schema

## STRICT_TRANS_TABLES:如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
## NO_ZERO_IN_DATE:不允许日期和月份为零
## NO_ZERO_DATE:不允许插入零日期,插入零日期会抛出错误而不是警告
## ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告
## NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

编写Dockerfile

1
2
3
FROM mysql:8.0.32
COPY ./conf.d/my.cnf /etc/mysql/conf.d
CMD ["mysqld"]

编写master的docker-comnpose.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3'
services:
mysql-master:
container_name: mysql-master
environment:
MYSQL_ROOT_PASSWORD: admin123456
TZ: Asia/Shanghai
image: mysql8_master:latest
build:
context: ./
ports:
- "3301:3306"
# volumes:
# - ./data:/var/lib/mysql
restart: always

连接上master数据库运行SQL配置同步用户

1
2
3
CREATE USER 'sync_admin'@'%' IDENTIFIED BY 'sync_admin123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'sync_admin'@'%';
FLUSH PRIVILEGES;

在Master进入mysql,执行SQL检查状态

1
show master status;

说明:当slave没有连接上时,以下为空

检查状态

二、mysql slave 配置

项目结构

项目结构
说明:本文没用到slave.sh

修改slave的my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 端口
port=3306
## 加密方法
default-authentication-plugin=mysql_native_password
## 最大连接数
max_connections=800
## 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接
max_connect_errors=1000
## 开启binlog
log_bin=ON
## 慢查询
slow_query_log=ON
## 慢查询日志
slow_query_log_file=/var/lib/mysql/slow.log
## 错误日志路径
log_error=/var/lib/mysql/mysql.err

## slave从m复制的数据会写入log-bin日志文件里
log-slave-updates=ON
## 保证事务安全完整性的
enforce-gtid-consistency=ON
## slave进行同步复制的时候,无须找到binlog日志和POS点
gtid_mode=ON

## 不记录information_schema的二进制日志
binlog-ignore-db=information_schema
## 不记录mysql
binlog-ignore-db=mysql
## 不记录sys
binlog-ignore-db=sys
## 不记录performance_schema
binlog-ignore-db=performance_schema

## STRICT_TRANS_TABLES:如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
## NO_ZERO_IN_DATE:不允许日期和月份为零
## NO_ZERO_DATE:不允许插入零日期,插入零日期会抛出错误而不是警告
## ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告
## NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

编写Dockerfile

1
2
3
FROM mysql:8.0.32
COPY ./conf.d/my.cnf /etc/mysql/conf.d
CMD ["mysqld"]

编写slave的docker-comnpose.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3'
services:
mysql-slave:
container_name: mysql-slave
environment:
MYSQL_ROOT_PASSWORD: admin123456
TZ: Asia/Shanghai
image: mysql8_slave:latest
build:
context: ./
ports:
- "3302:3306"
# volumes:
# - ./data:/var/lib/mysql
restart: always

连接上slave数据库运行SQL配置msater

1
2
3
change master to master_host='10.119.92.XXX', master_port=3306, master_user='sync_admin',master_password='sync_admin123456',master_log_file='';
start slave;

在salve进入mysql,执行SQL检查状态

1
show slave status;

检查状态