mariadb主从多用于网站架构,因为该主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构来搭建

主:可以写,可以读,从同步

从:可读,但是写的话主不会同步

工作原理: 当有数据进入到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(中继日志)并回放;从而实现了主从同步,一个主从架构最少会有三个线程

这只是有一个从节点,然而多个从节点呢,因为每有一个从节点(salve) 来读取主节点(master)的Binarylog  (二进制日志),主节点(master)就会生成一个dump thread 进程,当从节点(salve) 达到几百台甚至上千台,可想而知会对主节点(master)造成多大的压力,这时我们可以设置一个master的代理主节点,使它的mariadb引擎改成backhole,使他不写不读,只记录Binarylog 文件,它就没有了读写压力。这样就减少了了主节点的压力(master)

Binarylog 日志: 串行记录(一条一条的记录)

mariadb 的主从架构属于 异步同步, 会有延迟, 在数据量大的情况下,可能会同步几个小时,这样有利也有弊;

利:运维人员意外操作导致数据库出错,可以切断 主节点与从节点的连接,从节点不会被同步(在一定的时间内)

弊:数据第一时间不能同步

异步同步与实时同步的区别

实时同步:安全性比较高,效率低

异步同步:安全性较低,效率高

二、

通过上图可以发现,mariadb 主从架构 存在着单点故障,这时我们可以用MHA 来监控主从架构

MHA节点: 通过配置文件去监控主从架构,可以监控多个主从架构, 在监控到的master节点故障时,会提升其中用于最新数据的slave节点成为新的master节点,在此期间,MHA会通过其他从节点获取额外信息来避免一致性方面的问题。MHA还提供了master节点的在线切换功能,即按需切换master/slave节点。

第二种方案:

互为主备 (主主)

mariadb  主从架构属于异步同步,存在在着延迟, 例如在master端加入了一条数据 100修改为200,master 进行同步,因为存在着延迟,在这延迟时间内,master2又有一条数据100修改为100插入 ,因为延迟,可能会导致数据的不一致

缺点:可能会造成数据的不一致

一般这种情况会用在  该数据库一般只用来读,没有太多的更删改查可以考虑这种方法但是可能会造成数据的不一致

第三种方案:

galera 集群 (实时同步)(多主)

特性

基于行复制的完全并行同步复制

实时多主架构,任意节点可读写

无延迟复制,事务零丢失,可靠健壮的读写体验。

自动化节点关系控制:节点故障自动摘除,节点加入自动协调

工作原理:一条事务同时提交

三、部署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=;

9>起线程并查看从节点状态

&1>

start slave;

&2>

show slave status\G;   ( \G 竖列查看)

配置完成成功

10>测试

#master 端 创建数据库

#查看slave端是否同步

同步成功!

Mariadb 主从的更多相关文章

  1. Docker部署Zabbix监控MariaDB主从同步(Percona Monitoring Plugins for Zabbix)

    一.安装Docker并部署Zabbix 建议先配置清华大学的docker-ce yum源,速度有保障:清华大学repo源 1.Zabbix Server节点配置 部署环境: [root@server0 ...

  2. mariadb主从备份

    mariadb主从备份 master主库配置 停止mariadb systemctl stop mariadb 修改配置文件my.conf vim /etc/my.cnf [mysqld] serve ...

  3. mariadb主从架构

    mariadb主从架构(异步)和集群 一般应用的场所是网站,主的机器是可以写可以读,从的机器可以读,也可以写,但不会同步.只有主的机器增删改,从的机器才会同步. 主从至少三个线程:dump.I/O t ...

  4. MariaDB主从备份记录

    一.预期效果: 环境: centos 6.5   mariadb 10.0.14 (mysql -V) 主服务器:192.168.5.206   从服务器:192.168.5.207   主服务器数据 ...

  5. MariaDB 主从同步与热备(14)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  6. MariaDB主从半同步复制详解

    半同步复制(Semisynchronous replication) 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay lo ...

  7. 使用python3脚本部署mariadb主从架构

    环境准备 一个脚本自动部署master服务 另一个部署slave服务 关闭主从节点的防火墙 以及事先设置好root远程登陆的权限. master import paramikossh=paramiko ...

  8. 使用python脚本部署mariadb主从架构

    环境准备 一个脚本自动部署master服务 另一个部署slave服务 关闭主从节点的防火墙 以及事先设置好root远程登陆的权限. grant all on *.* to root@'%'  iden ...

  9. mysql(mariadb)主从配置

    环境: 内核版本:uname -r 系统版本:cat /etc/redhat-release

随机推荐

  1. MFC_简易文件管理器

    练习_简易文件管理器 Edit1编辑框绑定变量,初始化内容 m_EditCtrl = L"D:\"; 添加List控件,属性设置report,OnInitDialog()函数里添加 ...

  2. Python+Selenium 自动化测试获取测试报告内容并发送邮件

    这里封装一个send_mail()方法,用于测试完成后读取测试报告内容,并将测试结果通过邮件发送到接收人 # coding: utf-8 import smtplib from email.mime. ...

  3. 简单说一下 TCP打洞和UDP打洞

    1, TCP协议通信: 现在有两台电脑A和B.在 假设A的地址为 192.168.0.100 假设B的地址为 192.168.0.102 A想给B发送一个字符串Hello,  如果A,B之间采用TCP ...

  4. Caffe结构

    caffe可以分为3层结构:blob,layer,net 在layer中,input data用bottom表示,output data用top表示.每一个layer定义了三种操作,setup(Lay ...

  5. python __future__ 使用

    在开头加上from __future__ import print_function这句之后,即使在python2.X,使用print就得像python3.X那样加括号使用.python2.X中pri ...

  6. BZOJ 2055 80人环游世界 有上下界最小费用可行流

    题意: 现在有这么一个m人的团伙,也想来一次环游世界. 他们打算兵分多路,游遍每一个国家.    因为他们主要分布在东方,所以他们只朝西方进军.设从东方到西方的每一个国家的编号依次为1...N.假若第 ...

  7. 树莓派2-SSH

    树莓派3系统SSH是默认关闭的, 将SD卡插入linux, 在root 分区, 修改/etc/rc.local 在exit 0前增加一行 /ect/init.d/ssh start 将SD卡插回树莓派 ...

  8. asp.net:Parser Error & HTTP 错误 500.21 - Internal Server Error

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABEcAAAF8CAIAAACiwUIQAAAgAElEQVR4nO2dyZHzOpZGaVEaADNkBB ...

  9. nginx配置文件+本地测试请求转发到远程服务器+集群

    1 在本地测试1 众所周知,nginx是一个反向代理的服务器,主要功能即为实现负载均衡和动静分离.在别的我别的文章有详细的nginx(Windows)相关介绍教程. 由于自己安装的nginx在本地的计 ...

  10. HttpModule用户的验证

    HttpModule是向实现类提供模块初始化和处置事件.当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于H ...