MySQL集群搭建

1、主从复制原理

从机会从主机 读取binlog 来进行数据同步。

1.1 原理剖析

实际上主从同步的原理就是基于 binlog 进行数据同步的。在主从复制过程中,会基于 3 个线程来操作,一个主库线程,两个从库线程。
在这里插入图片描述

  • 二进制日志转储线程(Binlog dump thread)是一个主库线程。当从库线程连接的时候, 主库可以将二进制日志发送给从库,当主库读取事件(Event)的时候,会在 Binlog 上加锁,读取完成之后,再将锁释放掉。
  • 从库 I/O 线程会连接到主库,向主库发送请求更新 Binlog。这时从库的 I/O 线程就可以读取到主库的二进制日志转储线程发送的 Binlog 更新部分,并且拷贝到本地的中继日志 (Relay log)。
  • 从库 SQL 线程会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同步。

1.2 三个步骤

  • 步骤1: Master 将写操作记录到二进制日志( binlog )。
  • 步骤2: Slave 将Master 的binary log events拷贝到它的中继日志( relay log );
  • 步骤3: Slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL复制是异步的且串行化的,而且重启后从接入点开始复制。

1.3复制原则和问题

  • 每个Slave 只有一个Master
  • 每个Slave 只能有一个唯一的服务器ID
  • 每个Master 可以有多个Slave
    –问题–
    延时

2、搭建普通集群版(一主一从)

一台主机用于处理所有写请求,一台从机负责所有读请求,架构图如下:
在这里插入图片描述

2.1修改主机配置文件

建议mysql版本一致且后台以服务运行,主从所有配置项都配置在[mysqld] 节点下,且都是小写字母。具体参数配置如下:
必须

#[必须]主服务器唯一ID
server-id=1
#[必须]启用二进制日志,指名路径。比如:自己本地的路径/log/mysqlbin
log-bin=atguigu-bin

可选

#[可选] 0(默认)表示读写(主机),1表示只读(从机)
read-only=0
#设置日志文件保留的时长,单位是秒
binlog_expire_logs_seconds=6000
#控制单个二进制日志大小。此参数的最大和默认值是1GB
max_binlog_size=200M
#[可选]设置不要复制的数据库
binlog-ignore-db=test
#[可选]设置需要复制的数据库,默认全部记录。比如:binlog-do-db=atguigu_master_slave
binlog-do-db=需要复制的主数据库名字
#[可选]设置binlog格式
binlog_format=STATEMENT

binlog格式设置:

STATEMENT模式(基于SQL语句的复制(statement-based replication, SBR))
ROW模式(基于行的复制(row-based replication, RBR))
MIXED模式(混合模式复制(mixed-based replication, MBR))

2.2从机配置文件

要求主从所有配置项都配置在my.cnf 的[mysqld] 栏位下,且都是小写字母。
必须

#[必须]从服务器唯一ID
server-id=2

可选

#[可选]启用中继日志
relay-log=mysql-relay

重启后台mysql服务,使配置生效。

注意:主从机都关闭防火墙
service iptables stop #CentOS 6
systemctl stop firewalld.service #CentOS 7

2.3主机:建立账户并授权

#在主机MySQL里执行授权主从复制的命令
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'从机器数据库IP' IDENTIFIED BY 'abc123';
#5.5,5.7

注意:如果使用的是MySQL8,需要如下的方式建立账户,并授权slave:

CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
#此语句必须执行。否则见下面。
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

查询Master的状态,并记录下File和Position的值。

show master status;

从机:配置需要复制的主机

步骤1:从机上复制主机的命令

CHANGE MASTER TO
MASTER_HOST='主机的IP地址',
MASTER_USER='主机用户名',
MASTER_PASSWORD='主机用户名的密码',
MASTER_LOG_FILE='mysql-bin.具体数字',
MASTER_LOG_POS=具体值;

举例:

CHANGE MASTER TOMASTER_HOST='192.168.1.150',MASTER_USER='slave1',MASTER_PASSWORD='123456',MASTER_LOG_F
ILE='atguigu-bin.000007',MASTER_LOG_POS=154;

最后

#启动slave同步
START SLAVE;

重启

reset slave; #删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件

3、docker搭建MySQL集群

3.1新建新的MySQL容器

#第一个
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7
#第二个
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

3.2配置主机

进入/mydata/mysql-master/conf目录下新建my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

重启MySQL

docker restart mysql-master

进入mysql-master容器并登录

docker exec -it mysql-master /bin/bash
mysql -uroot -proot

master容器实例内创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

3.3配置从机

进入/mydata/mysql-slave/conf目录下新建my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

重启MySQL

docker restart mysql-slave

查看同步状态

show master status;

进入mysql-master容器并登录

docker exec -it mysql-master /bin/bash
mysql -uroot -proot

从容器配置主从复制

change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;

最后

#启动slave同步
START SLAVE;

参考:https://www.bilibili.com/video/BV1iq4y1u7vj
https://www.bilibili.com/video/BV1gr4y1U7CY

  • 31
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 在Linux下搭建MySQL集群需要以下步骤: 1. 安装MySQL:在每个节点上安装MySQL数据库。 2. 配置MySQL:在每个节点上配置MySQL数据库,包括设置root密码、创建数据库、创建用户等。 3. 安装集群管理工具:安装Pacemaker和Corosync等集群管理工具,用于管理集群。 4. 配置集群管理工具:在每个节点上配置集群管理工具,包括设置节点名称、IP地址、资源等。 5. 创建资源:创建MySQL资源,包括数据库、用户、配置文件等。 6. 启动集群:启动集群管理工具,启动MySQL资源,测试集群是否正常工作。 7. 监控集群:使用集群管理工具监控集群状态,及时发现和解决问题。 以上是搭建MySQL集群的基本步骤,需要根据实际情况进行具体操作。 ### 回答2: MySQL是一个开源的关系型数据库管理系统,常用于网站和应用程序的数据存储。而Linux是目前最常用的服务器操作系统,具有稳定性、安全性和易于管理等优点。因此,在Linux上搭建MySQL集群可以增加数据库的性能、可用性和灵活性。 搭建MySQL集群需要考虑以下几个方面: 1.选择合适的集群软件:目前比较常用的有MySQL Cluster、Galera Cluster和Percona XtraDB Cluster等。 2.安装和配置集群软件:在Linux上安装和配置MySQL集群通常需要通过命令行或脚本来完成,需要熟悉Linux和MySQL的基本操作。 3.选择合适的硬件和网络环境:在集群搭建前需要考虑硬件和网络环境的选择,包括处理器、内存、磁盘和网络带宽等。 4.配置高可用性和负载均衡:通过配置多个数据库实例和负载均衡器来提高数据库的可用性和性能。 具体的步骤如下: 1.安装集群软件:根据选定的集群软件,下载和安装相应的软件包。 2.配置集群软件:根据官方文档或教程,配置集群软件的参数和选项。 3.配置负载均衡器:通过配置负载均衡器来实现请求的分发和数据库实例的故障转移。 4.测试和优化:进行性能测试,并完成优化和调整。 需要注意的是,在搭建MySQL集群时,需要考虑到数据的一致性和安全性,以及备份和恢复等关键问题。 在集群搭建后,需要定期监控和维护集群的状态和性能,并及时处理故障和性能问题,保证数据库的可用性和性能。 ### 回答3: Linux下MySQL集群搭建是一项复杂的技术工作,需要具备较高的技术水平和实践经验。在这里,我们简要介绍一下如何进行Linux下MySQL集群搭建。 1. 集群规划:首先需要对集群进行规划,包括集群节点数、节点分布、数据库副本数量等。规划时需要考虑到数据的安全性、可维护性和可扩展性。 2. 环境准备:在Linux系统中安装MySQL,并进行相关配置。此外,还需要安装和配置MySQL的监控工具和备份工具,以便进行系统管理。 3. 数据库同步:为确保数据同步,需要使用MySQL的Master-Slave同步技术。主服务器数据写入后,数据会自动同步到备用服务器上。 4. 数据库负载均衡:为保证数据读取的负载均衡,需要使用MySQL的Master-Master同步技术。数据通过多个服务器进行读取,实现了数据负载均衡的效果。 5. 安全性保障:在集群中,需要对系统进行加密保障和安全性控制。可以采用SSL加密、防火墙限制和IP地址白名单等方式进行保障。 6. 监控维护:在集群运行中,需要对系统进行监控和维护。采用MySQL的监控工具进行性能分析、故障排除、备份和恢复等操作,可以提高系统的稳定性和数据的安全性。 总之,Linux下MySQL集群搭建需要综合运用各种技术手段,包括数据同步、负载均衡、安全性保障和维护工作等。只有在系统规划、环境准备和操作细节等方面充分考虑,才能确保系统稳定、数据安全和业务正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值