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 测试是否配置生效

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

在主机新建数据库 

在从机里进行查询

如果可以查询到就完成了

 

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值