mysql笔记:19. 主从复制和主主复制


在实际生产环境中,单台的MySQL数据库服务器不能满足实际的需求。此时数据库集群可以很好地解决这个问题了。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器。
在搭建MySQL集群之前,必须要保证每台MySQL服务器里面的数据同步。数据同步可以通过MySQL内部配置就可以轻松完成,主要有主从复制和主主复制。

一、主从复制基础

MySQL数据库自身提供的主从复制功能可以方便地实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过读写分离还能进一步提升数据库的负载性能。

1. 主从复制的定义

主从复制(也称AB复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。根据参数文件的配置,可以复制数据库中的所有数据。主从复制的优点:

  • 横向扩展解决方案:在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可以在一个或多个从设备上进行。该模型可以提高写入性能(因为主设备专用于更新),同时显著提高了从设备的读取速度。
  • 数据安全性:因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。
  • 数据分析:可以在主服务器上创建实时数据,而数据分析可以在从服务器上进行,而不会影响主服务器的性能。
  • 远程数据分发:可以使用复制操作为远程站点创建数据的本地副本,而无须永久访问主服务器。
    如果一主多从的话,主库既要负责写入数据又要负责为几个从库提供二进制日志。当从库节点比较多的时候,可能会对主库造成一定的读写压力。因此可以稍做调整,将二进制日志只给某一个从库。该从库再开启二进制日志并将自己的二进制日志发给其他从库。这样的架构性能可能要好得多,而且数据之间的延时也要好一些。

主从复制和数据库备份是不同的,切忌把主从复制代替数据库的备份操作。二者是解决不同问题的。主从复制是实时操作,不但可以复制正确的数据,也可以复制错误的数据,所以复制操作相当于是实时镜像,在主库故障时可以立即切换到从库。如果主库中的数据被误删除了,想找回之前的数据,那么主从复制对这个需求场景就无能为力,因为主库被误删的同时,立即同步到从库了,主库、从库都没有了之前的数据。这时备份的数据库文件就派上用场啦。

2. 主从复制的原理

主从复制的前提是,作为主服务器角色的数据库服务器必须开启二进制日志(binlog),具体复制步骤:

  1. 主服务器上的任何修改都会通过自己的I/O线程保存在二进制日志里面。
  2. 从服务器上也启动一个I/O线程。通过配置好的用户名和密码,连接到主服务器上请求读取二进制日志,然后把读取到的二进制日志写到本地的一个RealyLog(中继日志)里面。
  3. 从服务器上同时开启一个SQL线程定时检查RealyLog。如果发现有更新立即把更新内容写入本机的二进制日志中,并且在本机的数据库上执行一遍。

也就是说这里会涉及三个线程:

  • binlog线程:负责将主服务器上的数据更改写入二进制日志中。
  • I/O线程:负现从主服务器上读取二进制日志,并写入从服务器的中继日志中。
  • SQL线程:负责读取中继日志并重放其中的SQL语句。

3. 实战:搭建MySQL的主从复制

更新中……

二、主从复制的管理

主从复制部署完成后,作为DBA来说就需要进行日常的管理和维护了。这里主要涉及两个访问:用户权限管理和日常任务管理。

1. 用户权限管理

权限权限说明
replication slave该权限用于指定建立主从复制时所需要用到的用户权限。即在从节点上只有具备该权限的用户,才能执行主从复制
replication client该权限不可用于主从复制。当用户具备该权限时,只可以执行show slave statusshow master status等命令。

2. 日常任务管理

主从复制的日常任务管理主要包括:监控主从复制的状态和控制主从复制的任务。

2.1. 监控主从复制的状态

# 在主节点上查看当前已经连接的从服务器信息
mysql> show slave hosts;

# 查看主节点的状态
mysql> show master status;

# 在从节点上查看主从复制的状态
mysql> show slave status \G;

# 在从节点上使用master_pos_wait()函数阻塞从节点,直到从节点读取完成了指定的日志文件和偏移量
mysql> select master_pos_wait('File', 'Position');

master_pos_wait()函数返回0时,表示从节点已经完成了读取指定的日志文件和偏移量;返回-1时,表示超时退出。这里的参数File和Position是show master status命令输出的结果。

2.2. 控制主从复制的任务

控制主从复制的任务主要是在从节点上控制I/O线程和SQL线程,从而达到控制主从复制的目的。

2.2.1. 在从节点上启动和停止主从复制
# 停止复制
mysql> stop slave;

# 启动复制
mysql> start slave;
2.2.2. 在从节点上启动和停止I/O线程
# 启动I/O线程
mysql> start slave io_thread;

# 停止I/O线程
mysql> stop slave io_thread;

# 查看从节点状态
mysql> show slave status \G;
2.2.3. 在从节点上启动和停止SQL线程
# 启动SQL线程
mysql> start slave sql_thread;

# 停止SQL线程
mysql> stop slave sql_thread;

# 查看从节点状态
mysql> show slave status \G;

三、主主复制

MySQL的主从复制可以将主节点的变更通过binlog同步到从节点上从而实现数据的同步,其本质也是备份的一种方式。但是主从复制只能完成从主节点到从节点的同步,并不能完成从从节点到主节点的同步。即,从节点如果对数据进行了变更,将无法同步到主节点上。为此,MySQL提供了主主复制功能。

1. 主主复制的基本原理

主主复制其实就是两台MySQL服务器互为主从复制的关系。每一台MySQL服务器既是主节点,也是另一台MySQL服务器的从节点。在主主复制的架构中,任何一方所做的变更都会同步到另一方的MySQL数据库服务器中。

2. 实战:搭建MySQL的主主复制

更新中……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值