1 背景
最近工作需要对比几种数据库技术方案,主从读写分离集群也是其中之一。现将该集群搭建过程记录下来,以便后面查看回忆。
2 主从集群
2.1 原理
主从复制的原理如下图所示:
2.2 集群划分
我在搭建主从集群时已经使用用虚拟机安装了docker环境,制作了MySQL镜像,虚拟出来2个MySQL数据库节点。我用的MySQL数据库版本是5.7.26版本。
具体集群划分如下:
序号 | 角色 | IP地址 |
---|---|---|
1 | master | 172.16.17.231 |
2 | slave | 172.16.17.232 |
2.3 配置
修改数据库配置文件和配置信息
2.3.1 主节点
修改主节点my.cnf配置文件
[mysqld]
# 设置字符集
character-set-server=utf8mb4
# 设置排序规则
collation-server=utf8mb4_general_ci
# 允许最大连接数
max_connections=200
# 设置临时表最大大小
tmp_table_size=128M
# 设置最大内存使用量
max_heap_table_size=128M
server-id=1
log-bin=mysql-bin
binlog-do-db=db1
binlog-ignore-db=mysql
binlog-ignore-db=information-schema
binlog_format=statement
2.3.2 从节点
修改从节点my.cnf配置文件
[mysqld]
server-id=2
relay-log=mysql-relay
2.3.3 重启主从节点数据库服务
docker restart mysql
2.3.4 修改配置参数
步骤1:登录主节点,查询master的状态
msql -uroot -p123456
show master status
执行结果如下:
记录File和Position两列的值。用以配置从节点
步骤2:登录从节点,配置需要复制的主机
登录从节点
msql -uroot -p123456
CHANGE MASTER TO MASTER_HOST='主节点IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='刚刚记录的File值',MASTER_LOG_POS=刚刚记录的Position值;
示例:
CHANGE MASTER TO MASTER_HOST='172.16.17.231',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;
步骤3:查看从节点状态
show slave status\G
执行结果:
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 172.16.17.231Master_User: slaveMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 154Relay_Log_File: mysql-relay.000003Relay_Log_Pos: 367Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 154Relay_Log_Space: 570Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_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: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1Master_UUID: be75605d-4620-11ee-8b15-0242ac110002Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version:
1 row in set (0.00 sec)
查看Slave_IO_Running、Slave_SQL_Running属性都是Yes,则说明主从配置成功。
3 测试
主数据库创建一张表并插入一条数据,从节点也做出了相应的变更即代表成功。