公众号怎么制作横屏长图文,东莞网站排名优化seo,知名网站建设公司排名,做娱乐网站被坑1 引言 在之前的文章中提到过相关搭建方法#xff0c;具体请参考《MySQL主从数据库搭建》这篇文章#xff0c;本文主要讲述双主双从#xff0c;双主多从集群的搭建方式。 这里要问一个问题#xff0c;为什么MySQL要搭建数据库集群呢#xff1f;我想应该有以下几点原因具体请参考《MySQL主从数据库搭建》这篇文章本文主要讲述双主双从双主多从集群的搭建方式。 这里要问一个问题为什么MySQL要搭建数据库集群呢我想应该有以下几点原因
提高性能通过搭建数据库集群可以将负载分散到多个服务器上从而提高了数据库的整体性能。这主要是因为集群的每个节点都可以独立地处理请求减轻了单个服务器的负担。高可用性在数据库集群中如果一个节点发生故障其他的节点可以接管并继续处理请求。这种故障转移能力可以大大提高系统的可用性和稳定性。可扩展性数据库集群可以方便地增加或减少节点以适应业务需求的变化。这种可扩展性使得系统能够灵活地应对不同的情况。数据备份与恢复在数据库集群中可以设置多个节点来存储相同的数据从而实现数据备份和冗余。这样即使某个节点发生故障也可以从其他节点获取数据。负载均衡通过集群可以在多个节点之间分配用户请求从而实现负载均衡。这有助于确保每个节点都保持合理的负载避免过载的情况。安全性集群环境中的多个节点可以提供更好的数据安全保护例如如果某个节点受到攻击或发生故障其他节点可以继续处理数据降低安全风险。容错性在集群中如果某个节点发生故障其他节点可以接管并继续提供服务。这种容错能力可以提高系统的稳定性和可用性。 总的来说MySQL搭建数据库集群可以带来很多好处如提高性能、高可用性、可扩展性、数据备份与恢复、负载均衡等。这些优点有助于确保系统的稳定运行和满足不断增长的业务需求。 在《文章》这篇文章中主要讲述的是单主单从的搭建方式。
2 双主双从 搭建双主双从需要使用6台服务器两个主节点每个主节点各自有两个从节点这里采用的是docker的部署方式如果缺乏docker运行环境请参考《CentOS7安装Docker运行环境》这篇文章进行配置配置完成后使用下列语句拉去MySQL镜像并创建运行MySQL镜像这里采用了MySQL5.7.26版本进行创建。创建语句如下
docker run -p 3306:3306 --name mysql --restartalways --privilegedtrue -v /mnt/mysql/log:/var/log/mysql -v /mnt/mysql/data:/var/lib/mysql -v /mnt/mysql/conf:/etc/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7.26使用docker ps 查看一下执行结果 这6台服务器都按照上述方法配置后就可以开始搭建集群了。
2.1 集群划分 6台服务器如下表所示读者可根据自己的实际情况选择其他的固定IP。
序号角色IP地址1master1172.16.17.2312master2172.16.17.2323slave1172.16.17.2334slave2172.16.17.2345slave3172.16.17.2356slave4172.16.17.236
2.2 集群架构图 其中一个主机master1负责处理所有写请求当master1宕机后master2负责接替master1对外恢复数据库服务。slave1、slave2、slave3、slave4负责所有读请求分摊读请求的压力。
2.3 配置 根据前文提到的目录/mnt/mysql/conf下创建my.cnf文件
2.3.1 主节点 在my.cnf文件中添加如下配置
[mysqld]
# 设置字符集
character-set-serverutf8mb4
# 设置排序规则
collation-serverutf8mb4_general_ci
# 允许最大连接数
max_connections200
# 设置临时表最大大小
tmp_table_size128M
# 设置最大内存使用量
max_heap_table_size1024M
# 服务器唯一ID
server-id1
# 启用二进制日志
log-binmysql-bin
# 设置需要复制的数据库,这里以test为例
binlog-do-dbdb1
# 设置不需要复制的数据库可以设置多个
binlog-ignore-dbmysql
binlog-ignore-dbinformation-schema
# 设置logbin格式
binlog_formatstatement
# 在作为从数据库的时候有写入操作也要更新二进制日志文件
log-slave-updates
[client]
default-character-setutf8mb4以db1作为需要同步的数据库binlog-do-db这个属性也可以根据读者需要改成自己需要同步的数据库名称。注意log-slave-updates这个属性一定要添加不然修改master1的数据master读取到之后它的从机无法同步到数据。
2.3.2 从节点 修改配置文件
vi /mnt/mysql/conf/my.cnf具体配置如下
[mysqld]
# 设置字符集
character-set-serverutf8mb4
# 设置排序规则
collation-serverutf8mb4_general_ci
# 允许最大连接数
max_connections200
# 设置临时表最大大小
tmp_table_size128M
# 设置最大内存使用量
max_heap_table_size1024M
server-id3
relay-logmysql-relay
[client]
default-character-setutf8mb4按照上面对主从节点的配置根据架构图中标识的server-id分别修改6台服务器的MySQL配置文件。
2.3.3 重启服务 使用下述命令分别重启6台服务器的MySQL容器
docker restart mysql2.3.4 创建同步slave账号并授权
步骤1 分别进入master1和master2服务器docker容器登录MySQL
docker exec -it mysql /bin/bash
mysql -uroot -p123456步骤2 创建slave账号并授权
create user slave% IDENTIFIED by 123456;
GRANT REPLICATION SLAVE ON *.* TO slave% IDENTIFIED BY 123456;2.3.5 主从配置
步骤1 登录主节点查询master1的状态
msql -uroot -p123456show master status执行结果如下 记录File和Position两列的值。用以配置从节点 步骤2登录从节点配置需要复制的主机 登录从节点
msql -uroot -p123456CHANGE MASTER TO MASTER_HOST主节点IP地址,
MASTER_USERslave,
MASTER_PASSWORD123456,
MASTER_LOG_FILE刚刚记录的File值,MASTER_LOG_POS刚刚记录的Position值;示例
CHANGE MASTER TO MASTER_HOST172.16.17.231,
MASTER_USERslave,
MASTER_PASSWORD123456,
MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS154;步骤3启动从节点复制功能
start slave;步骤4查看从节点状态
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则说明主从配置成功。 slave3 重复步骤1-5进行配置slave2、salve4与slave1、slave3类似只不过登录主机换成master2步骤2中的ip需要换成master2的IP172.16.17.232
2.3.6 双主配置 与主从配置类似master2需要复制master1、master1需要复制master2 master2复制master1
CHANGE MASTER TO MASTER_HOST172.16.17.231,
MASTER_USERslave,
MASTER_PASSWORD123456,
MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS154;master1复制master2
CHANGE MASTER TO MASTER_HOST172.16.17.232,
MASTER_USERslave,
MASTER_PASSWORD123456,
MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS154;主节点启动从服务器复制功能
start slave;查看主节点从服务状态
show slave status\G;具体细节语句会和实际略有出入读者根据自己的环境调整一下IP和端口之类的参数。
额外的一些命令如无需要可以跳过
# 停止从服务复制功能
stop slave;
# 重新配置主从
stop slave;
reset master;3 测试 master1创建一张表并插入一条数据master2、slave1、slave2、slave3、slave4也做出了相应的变更即代表成功master2反之亦然。