Linux---MySQL1---主从搭建

一. 主从复制

  • 主从复制是 MySQL 中一种用于实现数据冗余、提高可用性和性能的重要机制。

  • 通过将数据从主服务器复制到从服务器,可以增强数据的可靠性和容错能力。

  • 在主服务器发生故障或需要进行维护时,从服务器可以提供数据的备份和恢复,确保系统的连续性。

1.1 为什么需要主从复制

MySQL 主从架构,特别是一主两从的配置,主要是为了提高数据库的可用性、负载均衡和数据安全性。这种架构允许一个主服务器处理所有的写操作,而两个从服务器则用于处理读请求,从而分散读取负载。这不仅增加了系统的处理能力,还通过复制机制增强了数据的可靠性和安全性。

在这种配置下,如果主服务器发生故障,其中一个从服务器可以迅速被提升为新的主服务器,从而确保服务的连续性和数据的完整性。此外,使用两个从服务器还提供了额外的灵活性和冗余,可以在进行维护或升级时无需中断服务。总的来说,一主两从的 MySQL 架构是一种高效、可靠且容错性强的数据库解决方案,适合需要高可用性和高性能的场景。

1.2 主从复制应用场景

  • 读写分离: 将读操作分担到从服务器,减轻主服务器的负载,提高系统的并发处理能力。

  • 数据备份与恢复: 从服务器作为主服务器的数据副本,提供了数据备份的手段,便于灾难恢复。

  • 高可用性和容错: 即使主服务器出现问题,从服务器可以快速接管,保证服务的可用性。

  • 分布式架构: 通过多个从服务器的分布部署,实现分布式数据存储和处理,提升系统的可扩展性。

  • 数据分发和缓存: 将数据复制到多个从服务器,用于数据分发或缓存,加速数据访问。

  • 负载均衡:一台机器读写可能扛不住,多个服务器过来帮忙,主负责写,从负责读。

1.3 缺点

  • 增加运维复杂度。

  • 无法保证主从实时通信,可能出现数据不一致的情况。

1.4 主从复制结构

一主一从

从机不仅仅作为备机,而且还作为读数据源的db,业务服务写数据时,写到主机,读数据时,从从机上读。从而降低主机的压力

一主多从

主写从读之后,我们发现单一的从节点在支撑业务查询数据时,还是存在性能瓶颈,因此将从机进行水平扩展,实现多从。

双M

从机的身份提升为主机,两个主机互为对方的从机,共同分担读写压力

联级复制

联级复制和一主多从比较相像,区别是次级别的从机的数据来源是来自于从机而不再是主机。这样主要是考虑到从机变多后,同步数据对主机性能的影响

多主一从

多主应用在写多读少的场景,通过多主降低主机的压力,同时通过1个从机,来完成读操作和数据备份的能力。

1.5 binlog日志

binlog是MySQL数据库的二进制日志文件,记录了数据库更改的所有操作,但不包括SELECT和SHOW这类操作,这些操作对数据进行修改、管理操作、数据库修改等操作都会被记录在日志中。

  • statement:记录每一条修改数据的SQL语句(批量修改时,记录的不是单条SQL语句,而是批量修改的SQL语句事件), slave在复制的时候SQL进程会解析成和原来master端执行过相同的SQL再次执行。简称SQL语句复制

    • 优点:日志量小,减少磁盘IO,提升存储和恢复速度

    • 缺点:在某些情况下会导致主从数据不一致,比如last_insert_id()、now()等函数

  • row:基于数据行的,日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改

    • 优点:能清楚记录每一个行数据的修改细节,能完全实现主从数据同步和数据的恢复。而且不会出现某些特定情况下存储过程或function,以及trigger的调用和触发器无法被正确复制的问题

    • 缺点:批量操作,会产生大量的日志,尤其是alter table会让日志暴涨

  • mixed:混合模式,以上两种模式的混合使用,一般会使用statement模式保存binlog,对于statement模式无法复制的操作时,使用row模式保存binlog,MySQL会根据执行的SQL语句选择写入模式

当sql操作写入binlog,就已经算作sql执行成功了,而不是写入到对应磁盘中。所以binlog中对应的值,我们可以理解为就是mysql的一个映射,同步mysql数据不不需要磁盘中的数据进行同步,而只需要同步binlog日志就行。

1.6 主从复制的原理

主从复制过程实际上就是slave从master端获取相应的二进制日志(binlog),然后再在自己的slave端完全按照顺序执行日志中的时间,将其执行到自己的数据库中。

要实现主从复制,首先必须打开master端的binlog 功能

  • master:负责写,保存binlog日志

  • slave:relay-log,复制日志

  • I/O:负责通信读取binlog日志

  • sql:负责写数据

实现步骤:

  1. 主库db的更新事件(update、insert、delete)被写到binlog

  2. 从库发起连接,连接到主库

  3. 此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库

  4. 从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log.

  5. 从库还会创建一个SQL线程,从relay log里面读取内容,将更新内容写入到slave的db.

二. 主从搭建 

2.1 MySQL安装

详见前期课程

准备好一主一从两台服务器,安装好mysql数据库

2.2 搭建自从复制

2.3 配置主服务器 

修改配置文件

在主服务器配置文件/etc/my.cnf添加内容

cd /etc

添加以下内容

# 开启binlog日志
log-bin=mysql-bin

# mysql服务ID,保证整个集群环境中唯一,取值范围:1 – 232,默认为1
server-id=1

保存配置文件之后重启MySql服务

systemctl restart mysql

进入mysql

mysql -u账号 -p密码

查看主机状态

show master status  

记住主机状态的内容 

2.4 配置从服务器 

修改配置文件

在从服务器配置文件/etc/my.cnf添加内容

cd /etc

重启mysql

同上⬆️

 连接数据库

同上⬆️

查看从机状态

配置99服务器的mysql成为69服务器mysql的从

change master to master_host='192.168.5.69',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000008',master_log_pos=154; 

启动从机 

start slave;

查看从机状态

show slave status\G;

看见这个就错了

因为我们虚拟机都是建立的克隆所以我们的mysql完全一样,下面进行修改

删除自动生成的uid

rm -rf /var/lib/mysql/auto.cnf

重启MySql 

sysetmctl restart mysqld

 

关闭从机 

重新配置99服务器的mysql成为69服务器mysql的从

重启从机

重新查看从机状态 

2.5 测试是否配置生效

在主机里面新建一个数据库 在从机里查询 如果可以查到新建的数据库则主从配置完成

在主机新建数据库 

在从机里进行查询

如果可以查询到就完成了

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值