多主多从
主从配置文件
MySQL:5.6镜像启动之后,容器中没有vim等工具,所以无法在容器中创建编辑MySQL配置文件。但是通过复制命令,我们可以把宿主机(容器的载体)中编辑好的配置文件复制到容器中,重启容器即可生效。
touch group.cnf
vim group.cnf
通用配置
[mysqld]
port=3306
skip_name_resolve = 1
skip_symbolic_links = yes
lower_case_table_names = 1
explicit_defaults_for_timestamp = ON
character_set_server = utf8
collation_server = utf8_general_ci
M1
# ***作为主库时的配置***
server_id = 1
# 开启binlog日志
log_bin = mysql-bin
binlog_format = STATEMENT
# 指定不记录日志的库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 自增长的数量
auto-increment-increment=2
# 偏移量
auto-increment-offset=1
# 一般情况下,从库不会将从主库获取的更新写入binlog日志,这样在做级联的时候数据不能更新,开启此项后,从库会把更新写进binlog日志。
log-slave-updates
M2
# ***作为主库时的配置***
server_id = 2
# 开启binlog日志
log_bin = mysql-bin
binlog_format = STATEMENT
# 指 定不记录日志的库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 自增长的数量
auto-increment-increment=2
# 偏移量
auto-increment-offset=2
# 一般情况下,从库不会将从主库获取的更新写入binlog日志,这样在做级联的时候数据不能更新,开启此项后,从库会把更新写进binlog日志。
log-slave-updates
S1
# ***作为从库时的配置***
server_id = 3
# 开启中继日志
relay-log = mysql-relay
S2
# ***作为从库时的配置***
server_id = 4
# 开启中继日志
relay-log = mysql-relay
使用如下命令将配置文件复制到 “配置文件能生效的文件夹” 下,哪些文件夹有效可从容器中MySQL自带的my.cnf中查看
一般,把.cnf的文件拷贝到conf.d或mysql.conf.d下,新配置文件的内容就会覆盖原先的配置
# 进入容器
docker exec -it mysql01 /bin/bash
# 找到my.cnf所在位置,一般在下面这个文件夹
cd /etc/mysql
# 容器内无法使用vim查看文件内容,退出容器
exit
# 用下面的命令将group.cnf复制到容器中
docker cp group.cnf mysql01:/etc/mysql/mysql.conf.d/
# 重启MySQL或容器
docker restart mysql01
登录MySQL完成主从配置
M1、M2
# 创建slave用户并授权
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
# 查看master状态
show master status;
S1、S2
# M1的IP:172.22.33.6,M2的IP:172.22.33.7
# 登录S1,配置与主库的连接,S2的类似
CHANGE MASTER TO
MASTER_HOST='172.22.33.6',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=120;
# 开始slave
start slave;
# 查看slave状态
show slave status/G;
看到这两项为Yes证明配置成功