MySQL主从复制原理及部署

MySQL主从复制原理及部署

概要
MySQL主从复制是什么?
主从复制主要实现的是什么?

主从复制的概念
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

主从复制的原理

  • 从库会生成两个线程,一个I/O线程,一个SQL线程;
  • I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
  • 主库会生成一个log dump线程,用来给从库I/O线程传binlog;
  • SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;
    在这里插入图片描述
    MySQL主从形式

一主一从

一主多从,提高读的性能

一主一从和一主多从是最常见的主从架构,实施起来简单并且有效,不仅可以实现HA,而且还能读写分离,进而提升集群的并发能力。
在这里插入图片描述
多主一从(从5.7开始支持)

多主一从可以将多个mysql数据库备份到一台存储性能比较好的服务器上。
在这里插入图片描述

双主复制

双主复制,也就是互做主从复制,每个master既是master,又是另外一台服务器的slave。这样任何一方所做的变更,都会通过复制应用到另外一方的数据库中。

MySQL主从复制模式

MySQL 主从复制默认是异步的模式。MySQL增删改操作会全部记录在binary log中,当slave节点连接master时,会主动从master处获取最新的bin log文件。并把bin log中的sql relay。

异步同步

这种模式下,主节点不会主动push bin log到从节点,这样有可能导致failover的情况下,也许从节点没有即时地将最新的bin log同步到本地。

半同步模式

这种模式下主节点只需要接收到其中一台从节点的返回信息,就会commit;否则需要等待直到超时时间然后切换成异步模式再提交;这样做的目的可以使主从数据库的数据延迟缩小,可以提高数据安全性,确保了事务提交后,binlog至少传输到了一个从节点上,不能保证从节点将此事务更新到db中。性能上会有一定的降低,响应时间会变长。

全同步模式

全同步模式是指主节点和从节点全部执行了commit并确认才会向客户端返回成功。

环境准备

首先
系统 Centos 7.6.1810
master节点(10.0.0.11)
slave节点(10.0.0.12)
部署好MySQL数据库(我们这里是部署的5.7.28)过程省略可参考http://39.100.251.225/?p=57
如果有重要数据请提前做好备份

映射主机名

master节点

echo '10.0.0.12 slave' >> /etc/hosts

slave节点

echo '10.0.0.11 master' >> /etc/hosts

mysql-master节点操作

在Master(主节点)创建一个test数据库和数据表进行实验

show databases;
create database test;
use test;
create table student (id int(11) not null)charset=utf8;
show tables;

然后修改master的配置文件

vim /etc/my.cnf

在最后添加如下两行:

[mysqld]
log-bin=mysql-bin    #开启二进制日志
server-id=1              #设置server-id
binlog-do-db=test    #可以被从服务器复制的库

重启MySQL

systemctl restart mysqld

Mater(主)数据库 授权(Slave)从数据库

mysql> create user 'slave'@'slave' identified by '123456';         #创建slave用户数据库,设置密码为:123456
mysql> grant replication slave on *.* to 'slave'@'slave' ;            #授权slave用户数据库的异步复制权限

如果修改密码报错可以修改下密码策略

slave端测试登录

mysql -h master  -u slave -p123456

master节点操作

在master (主节点)导出所有数据库,并远程复制到slave(从节点)上

 mysqldump -u root -p -A > test1.sql(导出master节点的所有数据库)
 ls test1.sql(查看数据库是否存在)
 scp -r test1.sql  root@slave:/root(远程复制到slave节点上)

slave端操作

在slave(从节点)导入master(主节点)的所有数据库

mysql -u root -p < test1.sql(导入数据库)
mysql -u root -p
show databases;
use test;
show tables;

配置slave节点的配置文件

vim /etc/my.cnf
server-id=2                     #服务的标识符
replicate-do-db=test        #指定Master(主节点)同步数据库名称
log-bin=mysqllog             #指定Master(主节点)的日志名称

重启数据库

systemctl restart mysqld

master节点操作

查看数据库状态
mysql -uroot -p
show master status;

在这里插入图片描述
slave节点操作

mysql> change master to 
    -> master_host='master',                                #要对应Master的主机名(ip)
    -> master_user='slave',                                  #要对应Master的数据库的(slave)用户
    -> master_password='123456',                      #要对应Master的数据库的(slave)用户的密码
    -> master_log_file='mysqllog.000001',           #要对应Master(主节点)的日志文件
    -> master_log_pos=605;                                 #要对应Master(主节点)的日志文件的位置的号码
    start slave;

这两个状态必须要都是yes

show slave status \G
Slave_IO_Running: Yes                        #IO_Running为yes才可以与Mater(主节点)的io流通信
Slave_SQL_Running: Yes                     #SQL_Running为从节点(slave)的运行状态

在这里插入图片描述
master节点测试插入一条数据是否能在slave节点同步

use test;
insert into test.student values(10);
select * from student;

在这里插入图片描述
slave节点查看

use test;
select * from student;

在这里插入图片描述
成功

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值