Mariadb 主从
一
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 主从的更多相关文章
- Docker部署Zabbix监控MariaDB主从同步(Percona Monitoring Plugins for Zabbix)
一.安装Docker并部署Zabbix 建议先配置清华大学的docker-ce yum源,速度有保障:清华大学repo源 1.Zabbix Server节点配置 部署环境: [root@server0 ...
- mariadb主从备份
mariadb主从备份 master主库配置 停止mariadb systemctl stop mariadb 修改配置文件my.conf vim /etc/my.cnf [mysqld] serve ...
- mariadb主从架构
mariadb主从架构(异步)和集群 一般应用的场所是网站,主的机器是可以写可以读,从的机器可以读,也可以写,但不会同步.只有主的机器增删改,从的机器才会同步. 主从至少三个线程:dump.I/O t ...
- MariaDB主从备份记录
一.预期效果: 环境: centos 6.5 mariadb 10.0.14 (mysql -V) 主服务器:192.168.5.206 从服务器:192.168.5.207 主服务器数据 ...
- MariaDB 主从同步与热备(14)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...
- MariaDB主从半同步复制详解
半同步复制(Semisynchronous replication) 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay lo ...
- 使用python3脚本部署mariadb主从架构
环境准备 一个脚本自动部署master服务 另一个部署slave服务 关闭主从节点的防火墙 以及事先设置好root远程登陆的权限. master import paramikossh=paramiko ...
- 使用python脚本部署mariadb主从架构
环境准备 一个脚本自动部署master服务 另一个部署slave服务 关闭主从节点的防火墙 以及事先设置好root远程登陆的权限. grant all on *.* to root@'%' iden ...
- mysql(mariadb)主从配置
环境: 内核版本:uname -r 系统版本:cat /etc/redhat-release
随机推荐
- js 类似于移动端购物车删除,左移动删除
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 00PostgreSQL
PostgreSQL PostgreSQL: The World's Most Advanced Open Source Relational Database;PostgreSQL是一个功能强大的开 ...
- thinkphp5将一条数据以toArray()放入session
直接将找出的数据赋予变量,列:$admin: 存入session:Session::set('user_info',$admin->toArray()); 如果数据中有时间字段: 如若有时间字段 ...
- vue set方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- C++ 之 string
C++ 的 string 类封装了很多对字符串的常用操作. string 类是模板类 basic_string类,以 char作为其元素类型的类. string 以单字节作为一个字符,如果处理多字符集 ...
- win10 专业版 安装tornado 的步骤
win10 专业版 安装tornado 的步骤: 1.下载tornado源码压缩包 下载网址:https://github.com/tornadoweb/tornado 若是没有github 账号可以 ...
- 常见的Redis问题?
Redis的那些最常见面试问题[转] 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据 ...
- CentOS 6, 编译安装lamp (php-fpm)
1 整体要求 php-fpm.httpd.mysql三者分别安装在三台虚拟机上: 第一台虚拟主机用于安装Mariadb,第二台虚拟主机安装php-fpm:第三台虚拟主机安装httpd.三台主机安装完之 ...
- 后端传前端数据乱码(返回json字符串到前端)
中文乱码的问题,在开发过程中难免会遇到,而在配置好编码之后,不管是数据库,还是其他地方都配置好统一UTF-8编码之后,后端从数据库取出数据传回前端,还会乱码,这里以ssm框架为例,因为是我自己遇到的, ...
- 洛谷 1850 NOIP2016提高组 换教室
[题解] 先用floyed处理出两点间的最短路. 设f[i][j][k]表示走到第i个教室,总共换了j次,当前换或者不换,期望的最小移动距离. 分情况讨论来转移即可. #include<cstd ...