一mysql
mariadb主从多用于网站架构,由于该主从的同步机制是异步的,数据的同步有必定延迟,也就是说有可能会形成数据的丢失,可是性能比较好,所以网站大多数用的是主从架构的数据库,读写分离必须基于主从架构来搭建sql
主:能够写,能够读,从同步数据库
从:可读,可是写的话主不会同步vim
工做原理: 当有数据进入到master 时,binarylog (二进制日志)会作出相应的记录,从节点要想读取到主节点的Binarylog日志,须要在master 上建立一个同步帐号,用来从节点(master)登陆来读取Binarylog(二进制日志),当从节点(slave)用同步帐号登陆主节点(master)来读取Binarylog日志时,从节点(slave)会生成两个线程,分别为 i/o thread 与 SQL thread ,i/o 线程主要是读 主节点(master) 中的 Binarylog 日志,而master会生成一个线程(dumpthread)用来接收从节点(slave)端所发出的请求,并返回数据到从节点(salve),经过 i/o thread 写入到 Relaylog (中继日志),这时 从节点(salve)的另外一个线程 SQLthread 进行读取 Relaylog(中继日志)并回放;从而实现了主从同步,一个主从架构最少会有三个线程centos
这只是有一个从节点,然而多个从节点呢,由于每有一个从节点(salve) 来读取主节点(master)的Binarylog (二进制日志),主节点(master)就会生成一个dump thread 进程,当从节点(salve) 达到几百台甚至上千台,可想而知会对主节点(master)形成多大的压力,这时咱们能够设置一个master的代理主节点,使它的mariadb引擎改为backhole,使他不写不读,只记录Binarylog 文件,它就没有了读写压力。这样就减小了了主节点的压力(master)安全
Binarylog 日志: 串行记录(一条一条的记录)服务器
mariadb 的主从架构属于 异步同步, 会有延迟, 在数据量大的状况下,可能会同步几个小时,这样有利也有弊;架构
利:运维人员意外操做致使数据库出错,能够切断 主节点与从节点的链接,从节点不会被同步(在必定的时间内)运维
弊:数据第一时间不能同步异步
异步同步与实时同步的区别
实时同步:安全性比较高,效率低
异步同步:安全性较低,效率高
2、
经过上图能够发现,mariadb 主从架构 存在着单点故障,这时咱们能够用MHA 来监控主从架构
MHA节点: 经过配置文件去监控主从架构,能够监控多个主从架构, 在监控到的master节点故障时,会提高其中用于最新数据的slave节点成为新的master节点,在此期间,MHA会经过其余从节点获取额外信息来避免一致性方面的问题。MHA还提供了master节点的在线切换功能,即按需切换master/slave节点。
第二种方案:
互为主备 (主主)
mariadb 主从架构属于异步同步,存在在着延迟, 例如在master端加入了一条数据 100修改成200,master 进行同步,由于存在着延迟,在这延迟时间内,master2又有一条数据100修改成100插入 ,由于延迟,可能会致使数据的不一致
缺点:可能会形成数据的不一致
通常这种状况会用在 该数据库通常只用来读,没有太多的更删改查能够考虑这种方法可是可能会形成数据的不一致
第三种方案:
galera 集群 (实时同步)(多主)
特性
基于行复制的彻底并行同步复制
实时多主架构,任意节点可读写
无延迟复制,事务零丢失,可靠健壮的读写体验。
自动化节点关系控制:节点故障自动摘除,节点加入自动协调
工做原理:一条事务同时提交
3、部署mariadb 主从架构
环境准备: 1.两台服务器
2.数据库版本以及里面信息必须同样
主节点(master端) :192.168.206.3
从节点 (salve端):192.168.206.5
操做系统:CentOS7.5
数据库版本:MariaDB-10.3.7
1>yum配置,两端同样
[mariadb]
name=MariaDB
baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
注:master端数据库与slave 端据库 须要版本一致,里边信息一致,那么如何实现数据信息一致呢,这里就用到了数据库的备份功能,将master端的数据库备份,而后将备份文件发送给slave端,salve端 进行数据恢复。再反过来备份一次发送回去,
&这里我备份salve端传到 master端
#1salve端
#master端
在数据库里使用 seq 语句: source lichao.sql 恢复
#master端 再备份一次
#salve端 恢复 source lijie.sql
#查看两个数据库是否一致
master:
slave端:
2>master 配置
&修改配置文件
vim /etc/my.cnf.d/server.cnf
在[mysqld]下添加 (也能够在 [server] 下编辑 )
server-id=1log-bin=mysql-bin
3>重启数据库
4>建立主从链接帐号
把从角色 赋予给这个 slave 这个用户
#刷新
#查看
5>查看下 主节点状态
show master status;
6>配置从节点 (slave 端)
编辑配置文件 vim /etc/my.cnf.d/server.cnf
7>重启mariadb
8>登陆
CHANGE MASTER TO MASTER_HOST='192.168.206.3', MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE=' mysql-bin.000002', MASTER_LOG_POS=467;
9>起线程并查看从节点状态
&1>
start slave;
&2>
show slave status\G; ( \G 竖列查看)
配置完成成功
10>测试
#master 端 建立数据库
#查看slave端是否同步
同步成功!