MySQL 集群部署

Wndexx / 2024-11-10 / 原文

MySQL 集群部署

环境

集群模式:双主集群

服务器:192.168.93.100、192.168.93.101

版本:mysql-5.7.44

配置

192.168.93.101

my.cnf

[mysqld]
skip-host-cache
skip-name-resolve
# 修改数据磁盘 data 目录
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
symbolic-links=0
pid-file=/var/run/mysqld/mysqld.pid
server-id=2
character-set-server=UTF8MB4
lower_case_table_names=1
default-time_zone='+8:00'
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log_bin=/var/lib/mysql/itpuxdb-binlog
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
# 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# 二进制日志过期清理时间,默认值 0,表示不自动清理
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断
# 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 设置步进值
auto-increment-offset=1
auto-increment-increment=2
[client]
socket=/var/run/mysqld/mysqld.sock

192.168.93.100

my.cnf

[mysqld]
skip-host-cache
skip-name-resolve
# 修改数据磁盘 data 目录
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
symbolic-links=0
pid-file=/var/run/mysqld/mysqld.pid
server-id=1
character-set-server=UTF8MB4
lower_case_table_names=1
default-time_zone='+8:00'
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log_bin=/var/lib/mysql/itpuxdb-binlog
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
# 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=row
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# 二进制日志过期清理时间,默认值 0,表示不自动清理
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断
# 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 设置步进值
auto-increment-offset=2
auto-increment-increment=2
[client]
socket=/var/run/mysqld/mysqld.sock

启动 MySQL 容器

192.168.93.100、192.168.93.101

docker run --name mysql1 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-p 13306:3306 -d mysql:5.7.44

配置主从关系

192.168.93.100

create user 'slave'@'%' identified by 'root';
grant replication slave,replication client on *.* to 'slave'@'%';

# 查看主节点 1 的日志文件名称和偏移量用于后面从节点配置使用
show master status;

mysql> create user 'slave'@'%' identified by 'root';
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave,replication client on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| itpuxdb-binlog.000004 |      627 |              | mysql            |                   |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

192.168.93.101

change master to master_host='192.168.93.100',master_user='slave',master_password='root',master_port=13306,master_log_file='itpuxdb-binlog.000004',master_log_pos=627,master_connect_retry=30,master_retry_count=3;

# 开启主从复制
start slave;

# 查看 slave 状态
show slave status\G;

192.168.93.101

create user 'slave'@'%' identified by 'root';
grant replication slave,replication client on *.* to 'slave'@'%';

# 查看主节点 1 的日志文件名称和偏移量用于后面从节点配置使用
show master status;

mysql> create user 'slave'@'%' identified by 'root';
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave,replication client on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| itpuxdb-binlog.000004 |      627 |              | mysql            |                   |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

192.168.93.100

change master to master_host='192.168.93.101',master_user='slave',master_password='root',master_port=13306,master_log_file='itpuxdb-binlog.000004',master_log_pos=627,master_connect_retry=30,master_retry_count=3;

# 开启主从复制
start slave;

# 查看 slave 状态
show slave status\G;

注意:从节点的 master_log_file 和 master_log_pos 要与主节点一致