使用docker-compose部署MySQL三主六从半同步集群(MMM架构

           Until_Log_File: 
            Until_Log_Pos: 0
       Master_SSL_Allowed: No
       Master_SSL_CA_File: 
       Master_SSL_CA_Path: 
          Master_SSL_Cert: 
        Master_SSL_Cipher: 
           Master_SSL_Key: 
    Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1010
Master_UUID: 7410e8b2-e12b-11ee-9499-0242ac160002
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 0b986205-e1b3-11ee-adae-0242ac170002:1-3
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)

ERROR:
No query specified

mysql>


##### 在master3上配置master2为主节点



CHANGE MASTER TO
MASTER_HOST=‘192.168.80.102’,
MASTER_PORT=33062,
MASTER_USER=‘root’,
MASTER_PASSWORD=‘node2master2root’,
MASTER_LOG_FILE=‘mysql-bin.000003’,
MASTER_LOG_POS=196;


开启主从配置,查看从节点状态,命令如下:



START SLAVE;
show slave status\G;


只要Slave\_IO\_Running: Yes和Slave\_SQL\_Running: Yes主从同步配置就好了。



mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.80.102
Master_User: root
Master_Port: 33062
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 196
Relay_Log_File: 5393cf023082-relay-bin.000002
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 196
Relay_Log_Space: 540
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1020
Master_UUID: 0b986205-e1b3-11ee-adae-0242ac170002
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 2f0d2880-e12d-11ee-9b42-0242ac1b0002:1-3
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)

ERROR:
No query specified

mysql>


三主三从,互为主从节点。master1作为master2的主节点,master2作为master3的主节点,master3作为master1的主节点,接下来,就是将从节点进行扩容。


#### 部署node1节点的slave1


##### docker-compose.yaml文件


编辑docker-compose.yaml文件,代码如下:



mkdir /var/lib/mysqlslave
ls -ld /var/lib/mysqlslave/
chmod 755 /var/lib/mysqlslave/
ls -ld /var/lib/mysqlslave/
mkdir /opt/software/mysqlcluster/slave1
cd /opt/software/mysqlcluster/slave1
vi docker-compose.yaml


文件内容,代码如下:



version: ‘3’ # 使用docker-compose版本3
services: # 定义服务
mysql_master: # 定义一个名为mysql_master的服务
image: mysql:8.0.20 # 使用MySQL 8.0.20镜像
container_name: mysql_node1_slave1 # 指定容器名称为mysql_node2_slave1
restart: unless-stopped # 在容器退出时自动重新启动
ports: # 定义容器和主机之间的端口映射
- “33064:3309” # 将容器的3306端口映射到主机的33061端口
environment: # 定义环境变量
MYSQL_ROOT_PASSWORD: node1slave1root # 设置root用户的密码
volumes: # 定义数据卷
- /var/lib/mysqlslave:/var/lib/mysql # 数据目录
healthcheck:
test: [“CMD”, “mysqladmin” ,“ping”, “-h”, “localhost”, “-u”, “root”, “-pnode1slave1root”] # 设置容器健康检查命令
interval: 20s # 每隔20秒进行一次健康检查
timeout: 10s # 健康检查超时时间为10秒
retries: 3 # 健康检查失败时重试次数为3次


授权文件



sudo chmod 777 docker-compose.yaml
mkdir /opt/software/mysqlcluster/slave1/conf
vi /opt/software/mysqlcluster/slave1/conf/my.cnf


##### my.cnf文件



[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
default-storage-engine = InnoDB # 默认存储引擎
server_id = 1011 # 服务器的唯一标识符
bind-address = 0.0.0.0 # 服务器监听的IP地址
port = 3309 # 服务器监听的端口号
character-set-server = utf8mb4 # 服务器使用的字符集
skip-external-locking # 不使用外部锁定
skip-name-resolve # 不进行域名解析
relay_log = relay-log # 开启中继日志
relay_log_index = slave-relay-bin.index # 设置中继日志索引的文件名
read_only = ON # 启用只读属性
relay_log_purge = 0 # 是否自动清空不再需要中继日志
log_slave_updates=1 # 开启从服务器记录二进制日志更新的功能
max_connections = 2000 # 最大连接数
max_user_connections = 1000 # 单个用户最大连接数
max_connect_errors = 4000 # 最大连接错误数
wait_timeout = 300 # 空闲连接的超时时间
interactive_timeout = 600 # 交互式连接的超时时间
table_open_cache = 512 # 表缓存大小
max_allowed_packet = 32M # 最大允许的数据包大小
sort_buffer_size = 2M # 排序缓冲区大小
join_buffer_size = 2M # 连接缓冲区大小
thread_cache_size = 8 # 线程缓存大小
sync_binlog = 0 # 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大
gtid_mode = ON # 开启GTID模式,用于自动处理复制中的事务
enforce_gtid_consistency = ON # GTID_MODE 和 ENFORCE_GTID_CONSISTENCY 的设置是一致的,强制全局事务标识的一致性

日志设置

log-short-format = 1 # 使用短格式记录日志
slow_query_log # 启用慢查询日志
long_query_time = 2 # 慢查询的时间阈值

二进制日志设置

binlog_format = MIXED # 二进制日志格式
binlog_expire_logs_seconds = 864000 # 二进制日志过期时间(单位:秒)

InnoDB特定选项

innodb_buffer_pool_size = 4G # InnoDB缓冲池大小
innodb_thread_concurrency = 8 # InnoDB线程并发数
innodb_flush_method = O_DIRECT # InnoDB刷新日志的方法
innodb_flush_log_at_trx_commit = 1 # 控制事务日志的同步方式
innodb_log_buffer_size = 128M # InnoDB日志缓冲区大小
innodb_log_file_size = 256M # InnoDB日志文件大小
innodb_log_files_in_group = 3 # InnoDB日志文件组中的文件数
innodb_max_dirty_pages_pct = 90 # InnoDB脏页的最大比例
innodb_lock_wait_timeout = 50 # InnoDB锁等待超时时间(单位:秒)
innodb_file_per_table = 1 # 每个表使用独立的表空间文件
plugin-load = semisync_slave.so # 半同步复制
rpl_semi_sync_slave_enabled = 1 # 开启半同步复制
[mysqldump]
quick # 快速导出数据
max_allowed_packet = 16M # 最大允许的数据包大小
[myisamchk]
key_buffer_size = 256M # MyISAM键缓冲区大小
sort_buffer_size = 256M # MyISAM排序缓冲区大小
read_buffer = 2M # MyISAM读缓冲区大小
write_buffer = 2M # MyISAM写缓冲区大小
[mysqlhotcopy]
interactive-timeout = 3600 # 交互式超时时间,超时时间设置为 1 小时


##### 授权启动



sudo chmod 644 /opt/software/mysqlcluster/slave1/conf/my.cnf


启动运行,命令如下:



docker-compose up -d
docker-compose ps


复制配置文件my.cnf到容器中



docker cp /opt/software/mysqlcluster/slave1/conf/my.cnf mysql_node1_slave1:/etc/mysql/my.cnf


重启容器



docker restart mysql_node1_slave1


进入主节点容器,命令如下:



docker exec -it mysql_node1_slave1 bash


登录mysql,命令如下:



mysql -u root -pnode1slave1root


参考server\_id是否配置正确,判断my.cnf是否生效



SHOW VARIABLES LIKE ‘server_id’;


安装smeisync\_slave模块,命令如下:



install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
set global rpl_semi_sync_slave_enabled = on;


查看效果,命令如下:



show global variables like ‘rpl_semi%’;


输出结果:



mysql> show global variables like ‘rpl_semi%’;
±--------------------------------±------+
| Variable_name | Value |
±--------------------------------±------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
±--------------------------------±------+
2 rows in set (0.01 sec)


rpl\_semi\_sync\_slave\_enabled为ON表示设置成功。


授权,命令如下:



ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘node1slave1root’;
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘node1slave1root’;
FLUSH PRIVILEGES;


重启从节点1的mysql服务,命令如下:



docker restart mysql_node1_slave1


#### 部署node2节点的slave2


##### docker-compose.yaml文件


编辑docker-compose.yaml文件,代码如下:



mkdir /var/lib/mysqlslave
ls -ld /var/lib/mysqlslave/
chmod 755 /var/lib/mysqlslave/
ls -ld /var/lib/mysqlslave/
mkdir /opt/software/mysqlcluster/slave2
cd /opt/software/mysqlcluster/slave2
vi docker-compose.yaml


文件内容,代码如下:



version: ‘3’ # 使用docker-compose版本3
services: # 定义服务
mysql_master: # 定义一个名为mysql_master的服务
image: mysql:8.0.20 # 使用MySQL 8.0.20镜像
container_name: mysql_node2_slave2 # 指定容器名称为mysql_node3_slave2
restart: unless-stopped # 在容器退出时自动重新启动
ports: # 定义容器和主机之间的端口映射
- “33065:3310” # 将容器的3306端口映射到主机的33061端口
environment: # 定义环境变量
MYSQL_ROOT_PASSWORD: node2slave2root # 设置root用户的密码
volumes: # 定义数据卷
- /var/lib/mysqlslave:/var/lib/mysql # 数据目录
healthcheck:
test: [“CMD”, “mysqladmin” ,“ping”, “-h”, “localhost”, “-u”, “root”, “-pnode2slave2root”] # 设置容器健康检查命令
interval: 20s # 每隔20秒进行一次健康检查
timeout: 10s # 健康检查超时时间为10秒
retries: 3 # 健康检查失败时重试次数为3次


授权文件



sudo chmod 777 docker-compose.yaml
mkdir /opt/software/mysqlcluster/slave2/conf
vi /opt/software/mysqlcluster/slave2/conf/my.cnf


##### my.cnf文件



[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
default-storage-engine = InnoDB # 默认存储引擎
server_id = 1021 # 服务器的唯一标识符
bind-address = 0.0.0.0 # 服务器监听的IP地址
port = 3310 # 服务器监听的端口号
character-set-server = utf8mb4 # 服务器使用的字符集
skip-external-locking # 不使用外部锁定
skip-name-resolve # 不进行域名解析
relay_log = relay-log # 开启中继日志
relay_log_index = slave-relay-bin.index # 设置中继日志索引的文件名
read_only = ON # 启用只读属性
relay_log_purge = 0 # 是否自动清空不再需要中继日志
log_slave_updates=1 # 开启从服务器记录二进制日志更新的功能
max_connections = 2000 # 最大连接数
max_user_connections = 1000 # 单个用户最大连接数
max_connect_errors = 4000 # 最大连接错误数
wait_timeout = 300 # 空闲连接的超时时间
interactive_timeout = 600 # 交互式连接的超时时间
table_open_cache = 512 # 表缓存大小
max_allowed_packet = 32M # 最大允许的数据包大小
sort_buffer_size = 2M # 排序缓冲区大小
join_buffer_size = 2M # 连接缓冲区大小
thread_cache_size = 8 # 线程缓存大小
sync_binlog = 0 # 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大
gtid_mode = ON # 开启GTID模式,用于自动处理复制中的事务
enforce_gtid_consistency = ON # GTID_MODE 和 ENFORCE_GTID_CONSISTENCY 的设置是一致的,强制全局事务标识的一致性

日志设置

log-short-format = 1 # 使用短格式记录日志
slow_query_log # 启用慢查询日志
long_query_time = 2 # 慢查询的时间阈值

二进制日志设置

binlog_format = MIXED # 二进制日志格式
binlog_expire_logs_seconds = 864000 # 二进制日志过期时间(单位:秒)

InnoDB特定选项

innodb_buffer_pool_size = 4G # InnoDB缓冲池大小
innodb_thread_concurrency = 8 # InnoDB线程并发数
innodb_flush_method = O_DIRECT # InnoDB刷新日志的方法
innodb_flush_log_at_trx_commit = 1 # 控制事务日志的同步方式
innodb_log_buffer_size = 128M # InnoDB日志缓冲区大小
innodb_log_file_size = 256M # InnoDB日志文件大小
innodb_log_files_in_group = 3 # InnoDB日志文件组中的文件数
innodb_max_dirty_pages_pct = 90 # InnoDB脏页的最大比例
innodb_lock_wait_timeout = 50 # InnoDB锁等待超时时间(单位:秒)
innodb_file_per_table = 1 # 每个表使用独立的表空间文件
plugin-load = semisync_slave.so # 半同步复制
rpl_semi_sync_slave_enabled = 1 # 开启半同步复制
[mysqldump]
quick # 快速导出数据
max_allowed_packet = 16M # 最大允许的数据包大小
[myisamchk]
key_buffer_size = 256M # MyISAM键缓冲区大小
sort_buffer_size = 256M # MyISAM排序缓冲区大小
read_buffer = 2M # MyISAM读缓冲区大小
write_buffer = 2M # MyISAM写缓冲区大小
[mysqlhotcopy]
interactive-timeout = 3600 # 交互式超时时间,超时时间设置为 1 小时


##### 授权启动



sudo chmod 644 /opt/software/mysqlcluster/slave2/conf/my.cnf


启动运行,命令如下:



docker-compose up -d
docker-compose ps


复制配置文件my.cnf到容器中



docker cp /opt/software/mysqlcluster/slave2/conf/my.cnf mysql_node2_slave2:/etc/mysql/my.cnf


重启容器



docker restart mysql_node2_slave2


进入主节点容器,命令如下:



docker exec -it mysql_node2_slave2 bash


登录mysql,命令如下:



mysql -u root -pnode2slave2root


参考server\_id是否配置正确,判断my.cnf是否生效



SHOW VARIABLES LIKE ‘server_id’;


安装smeisync\_slave模块,命令如下:



install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
set global rpl_semi_sync_slave_enabled = on;


查看效果,命令如下:



show global variables like ‘rpl_semi%’;


输出结果:



mysql> show global variables like ‘rpl_semi%’;
±--------------------------------±------+
| Variable_name | Value |
±--------------------------------±------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
±--------------------------------±------+
2 rows in set (0.01 sec)


rpl\_semi\_sync\_slave\_enabled为ON表示设置成功。


授权,命令如下:



ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘node2slave2root’;
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘node2slave2root’;
FLUSH PRIVILEGES;


重启从节点2的mysql服务,命令如下:



docker restart mysql_node2_slave2


#### 部署node3节点的slave3


##### docker-compose.yaml文件


编辑docker-compose.yaml文件,代码如下:



mkdir /var/lib/mysqlslave
ls -ld /var/lib/mysqlslave/
chmod 755 /var/lib/mysqlslave/
ls -ld /var/lib/mysqlslave/
mkdir /opt/software/mysqlcluster/slave3
cd /opt/software/mysqlcluster/slave3
vi docker-compose.yaml


文件内容,代码如下:



version: ‘3’ # 使用docker-compose版本3
services: # 定义服务
mysql_master: # 定义一个名为mysql_master的服务
image: mysql:8.0.20 # 使用MySQL 8.0.20镜像
container_name: mysql_node3_slave3 # 指定容器名称为mysql_node3_slave3
restart: unless-stopped # 在容器退出时自动重新启动
ports: # 定义容器和主机之间的端口映射
- “33066:3311” # 将容器的3306端口映射到主机的33061端口
environment: # 定义环境变量
MYSQL_ROOT_PASSWORD: node3slave3root # 设置root用户的密码
volumes: # 定义数据卷
- /var/lib/mysqlslave:/var/lib/mysql # 数据目录
healthcheck:
test: [“CMD”, “mysqladmin” ,“ping”, “-h”, “localhost”, “-u”, “root”, “-pnode3slave3root”] # 设置容器健康检查命令
interval: 20s # 每隔20秒进行一次健康检查
timeout: 10s # 健康检查超时时间为10秒
retries: 3 # 健康检查失败时重试次数为3次


授权文件



sudo chmod 777 docker-compose.yaml
mkdir /opt/software/mysqlcluster/slave3/conf
vi /opt/software/mysqlcluster/slave3/conf/my.cnf


##### my.cnf文件



[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
default-storage-engine = InnoDB # 默认存储引擎
server_id = 1031 # 服务器的唯一标识符
bind-address = 0.0.0.0 # 服务器监听的IP地址
port = 3311 # 服务器监听的端口号
character-set-server = utf8mb4 # 服务器使用的字符集
skip-external-locking # 不使用外部锁定
skip-name-resolve # 不进行域名解析
relay_log = relay-log # 开启中继日志
relay_log_index = slave-relay-bin.index # 设置中继日志索引的文件名
read_only = ON # 启用只读属性
relay_log_purge = 0 # 是否自动清空不再需要中继日志
log_slave_updates=1 # 开启从服务器记录二进制日志更新的功能
max_connections = 2000 # 最大连接数
max_user_connections = 1000 # 单个用户最大连接数
max_connect_errors = 4000 # 最大连接错误数
wait_timeout = 300 # 空闲连接的超时时间
interactive_timeout = 600 # 交互式连接的超时时间
table_open_cache = 512 # 表缓存大小
max_allowed_packet = 32M # 最大允许的数据包大小
sort_buffer_size = 2M # 排序缓冲区大小
join_buffer_size = 2M # 连接缓冲区大小
thread_cache_size = 8 # 线程缓存大小
sync_binlog = 0 # 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大
gtid_mode = ON # 开启GTID模式,用于自动处理复制中的事务
enforce_gtid_consistency = ON # GTID_MODE 和 ENFORCE_GTID_CONSISTENCY 的设置是一致的,强制全局事务标识的一致性

日志设置

log-short-format = 1 # 使用短格式记录日志
slow_query_log # 启用慢查询日志
long_query_time = 2 # 慢查询的时间阈值

二进制日志设置

binlog_format = MIXED # 二进制日志格式
binlog_expire_logs_seconds = 864000 # 二进制日志过期时间(单位:秒)

InnoDB特定选项

innodb_buffer_pool_size = 4G # InnoDB缓冲池大小
innodb_thread_concurrency = 8 # InnoDB线程并发数
innodb_flush_method = O_DIRECT # InnoDB刷新日志的方法
innodb_flush_log_at_trx_commit = 1 # 控制事务日志的同步方式
innodb_log_buffer_size = 128M # InnoDB日志缓冲区大小
innodb_log_file_size = 256M # InnoDB日志文件大小
innodb_log_files_in_group = 3 # InnoDB日志文件组中的文件数
innodb_max_dirty_pages_pct = 90 # InnoDB脏页的最大比例
innodb_lock_wait_timeout = 50 # InnoDB锁等待超时时间(单位:秒)
innodb_file_per_table = 1 # 每个表使用独立的表空间文件
plugin-load = semisync_slave.so # 半同步复制
rpl_semi_sync_slave_enabled = 1 # 开启半同步复制
[mysqldump]
quick # 快速导出数据
max_allowed_packet = 16M # 最大允许的数据包大小
[myisamchk]
key_buffer_size = 256M # MyISAM键缓冲区大小
sort_buffer_size = 256M # MyISAM排序缓冲区大小
read_buffer = 2M # MyISAM读缓冲区大小
write_buffer = 2M # MyISAM写缓冲区大小
[mysqlhotcopy]
interactive-timeout = 3600 # 交互式超时时间,超时时间设置为 1 小时


##### 授权启动



sudo chmod 644 /opt/software/mysqlcluster/slave3/conf/my.cnf


启动运行,命令如下:



docker-compose up -d
docker-compose ps


复制配置文件my.cnf到容器中



docker cp /opt/software/mysqlcluster/slave3/conf/my.cnf mysql_node3_slave3:/etc/mysql/my.cnf


重启容器



docker restart mysql_node3_slave3


进入主节点容器,命令如下:



docker exec -it mysql_node3_slave3 bash


登录mysql,命令如下:



mysql -u root -pnode3slave3root


参考server\_id是否配置正确,判断my.cnf是否生效



SHOW VARIABLES LIKE ‘server_id’;


安装smeisync\_slave模块,命令如下:



install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
set global rpl_semi_sync_slave_enabled = on;


查看效果,命令如下:



show global variables like ‘rpl_semi%’;


输出结果:



mysql> show global variables like ‘rpl_semi%’;
±--------------------------------±------+
| Variable_name | Value |
±--------------------------------±------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
±--------------------------------±------+
2 rows in set (0.01 sec)


rpl\_semi\_sync\_slave\_enabled为ON表示设置成功。


授权,命令如下:



ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘node3slave3root’;
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘node3slave3root’;
FLUSH PRIVILEGES;


重启从节点2的mysql服务,命令如下:



docker restart mysql_node3_slave3


#### 配置三个从节点的主从同步配置


前文提到master1作为master2的主节点,master2作为master3的主节点,master3作为master1的主节点。




| node1 | node2 | node3 |
| --- | --- | --- |
| master1 | master2 | master3 |
| slave1 | slave2 | slave3 |


三台机器部署了六个mysql,且三个主节点也都互为主从,接下来就是规划,每个主节点下,除了已经配置好的从节点,再新增一个从节点。


主节点对应的从节点,规划如下:




| master1 | master2 | master3 |
| --- | --- | --- |
| master2 | master3 | master1 |
| slave3 | slave1 | slave2 |


##### 在slave3上配置master1为主节点



CHANGE MASTER TO
MASTER_HOST=‘192.168.80.101’,
MASTER_PORT=33061,
MASTER_USER=‘root’,
MASTER_PASSWORD=‘node1master1root’,
MASTER_LOG_FILE=‘mysql-bin.000003’,
MASTER_LOG_POS=196;


开启主从配置,查看从节点状态,命令如下:



START SLAVE;
show slave status\G;


只要Slave\_IO\_Running: Yes和Slave\_SQL\_Running: Yes主从同步配置就好了。



[root@node3 slave3]# docker restart mysql_node3_slave3
mysql_node3_slave3
[root@node3 slave3]# docker exec -it mysql_node3_slave3 bash
root@670b9cf24960:/# mysql -u root -pnode3slave3root
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.20 MySQL Community Server - GPL

Copyright © 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> CHANGE MASTER TO
-> MASTER_HOST=‘192.168.80.101’,
-> MASTER_PORT=33061,
-> MASTER_USER=‘root’,
-> MASTER_PASSWORD=‘node1master1root’,
-> MASTER_LOG_FILE=‘mysql-bin.000003’,
-> MASTER_LOG_POS=196;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect…
Connection id: 47
Current database: *** NONE ***

Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> START SLAVE;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.80.101
Master_User: root
Master_Port: 33061
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 196
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 196
Relay_Log_Space: 527
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1010
Master_UUID: 7410e8b2-e12b-11ee-9499-0242ac160002
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: fc16cfd5-e1b8-11ee-8a7c-0242ac1c0002:1-8
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)

ERROR:
No query specified

mysql>


##### 在slave1上配置master2为主节点



CHANGE MASTER TO
MASTER_HOST=‘192.168.80.102’,
MASTER_PORT=33062,
MASTER_USER=‘root’,
MASTER_PASSWORD=‘node2master2root’,
MASTER_LOG_FILE=‘mysql-bin.000003’,
MASTER_LOG_POS=196;


开启主从配置,查看从节点状态,命令如下:



START SLAVE;
show slave status\G;


只要Slave\_IO\_Running: Yes和Slave\_SQL\_Running: Yes主从同步配置就好了。



[root@node1 slave1]# docker exec -it mysql_node1_slave1 bash
root@561ba1f60c85:/# mysql -u root -pnode1slave1root
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.20 MySQL Community Server - GPL

Copyright © 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> CHANGE MASTER TO
-> MASTER_HOST=‘192.168.80.102’,
-> MASTER_PORT=33062,
-> MASTER_USER=‘root’,
-> MASTER_PASSWORD=‘node2master2root’,
-> MASTER_LOG_FILE=‘mysql-bin.000003’,
-> MASTER_LOG_POS=196;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect…
Connection id: 62
Current database: *** NONE ***

Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.80.102
Master_User: root
Master_Port: 33062
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 196
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 196
Relay_Log_Space: 527
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1020
Master_UUID: 0b986205-e1b3-11ee-adae-0242ac170002
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 00d129c2-e1b8-11ee-9b95-0242ac190002:1-3
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)

ERROR:
No query specified

mysql>

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
img

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

public_key: 0
Network_Namespace:
1 row in set (0.00 sec)

ERROR:
No query specified

mysql>

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-LYolt8yt-1712607670806)]
[外链图片转存中…(img-GW8x98Ea-1712607670807)]
[外链图片转存中…(img-xiizIGkb-1712607670807)]
[外链图片转存中…(img-UXgoY032-1712607670807)]
[外链图片转存中…(img-Kw5x25a1-1712607670808)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
[外链图片转存中…(img-5LqhgnOf-1712607670808)]

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

[外链图片转存中…(img-mD9QDvdo-1712607670808)]

给大家整理的电子书资料:

[外链图片转存中…(img-7qBANlYm-1712607670809)]

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-nSvgyowr-1712607670809)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值