MariaDB主从复制的逻辑与实现
一、关系型数据库的劣势
“关系型数据库:指采用了关系模型来组织数据的数据库,而关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。”——Wiki
关系型数据库有着庞大的用户群体,并且实现逻辑很符合人的理解,但它也同时存在一些劣势:1.关系型数据库中最大的瓶颈就是磁盘I/O。由于传统的关系型数据库在执行每一次执行增删改查时都会要用到磁盘I/O,当并发量很高时就会很明显的降低整个架构的性能。2.在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。
关系型数据库的主从复制与读写分离可以一定程度上缓解I/O压力,提高关系型数据库的并发性能。下面以MariaDB示例主从复制的原理与实现。
二、什么是主从复制
在整个系统架构中,数据库可能是最重要的环节之一,因为数据丢失造成的损失可以说是不可估量的。但由于MariaDB的天生属性,所以很难做到分布式存储,所以MariaDB在生产中是一定不允许存在单点的。另一方面,关系型数据库是有状态的,不能像其他一些无状态应用那样做HA,在数据库做HA时一定要考虑数据的同步,这里就需要将数据不停的向备用节点进行复制。过程如下图:

主节点将二进制日志通过API传输至从节点,从节点会启用两个进程:I/O thread进程和SQL进程。I/O thread进程将主节点的二进制日志存入从节点的中继日志,再生成二进制日志,最后通过SQL进程将二进制日志中的操作进行还原,这样就能保证主从节点数据的同步特性了。
三、MariaDB主从架构存在的问题
在上面的描述中,表面上似乎可以很完美的实现数据库的冗余,并且还能实现主节点和从节点的数据同步,但理想是美好的,显示是残酷的。在实际生产环境中因为种种原因,很有可能会出现主从节点的数据不一致的情况。对于这样的情况最好的办法就是预防,时刻监控主从节点的数据同步性,一旦发生不一致的现象,尽可能的将主节点的数据全部重新复制到从节点。
四、MariaDB主从复制配置示例
1.同步服务器时间。
2.确定从服务器从哪一点开始复制(从0开始或从指定位置开始)。
3.主节点配置:
vim /etc/my.cnf.d/server.cnf
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON
server_id=1 #主节点id
log-bin=master-log #开启二进制日志
4.从节点配置:
vim /etc/my.cnf.d/server.cnf
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON
server_id=11 #从节点id
relay_log=relay-log #开启中继日志
read_only=ON #只读
5.在主节点上创建拥有复制权限的账号:
mysql -uroot -p
Enter password:
MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'slave'@'192*.* TO 'slave'@'192.168.29.103' IDENTIFIED BY '';
Query OK, rows affected (0.10 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, rows affected (0.00 sec)
MariaDB [(none)]> SHOW MASTER STATUS; #查看日志处在的位置
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log. | | | |
+-------------------+----------+--------------+------------------+
row in set (0.00 sec)
6.在从节点上配置主节点信息:
MariaDB [(none)]> CHANGE MASTER TO
MASTER_HOST='192.168.29.102',
MASTER_USER='slave',
MASTER_PASSWORD='',
MASTER_PORT=,
MASTER_LOG_FILE='master-log.000001', #复制的起始文件
MASTER_LOG_POS=; #起始点
MariaDB [(none)]> SHOW SLAVE STATUS \G #查看从节点信息
MariaDB [(none)]> START SLAVE; #启动从节点,可选项为(IO_THREAD | SQL_THREAD)不写默认都开启
以上就是MariaDB主从复制的配置过程,根据实际需求,还可以实现一主多从,多主多从等结构。
MariaDB主从复制的逻辑与实现的更多相关文章
- Linux-基础学习(五)-mariadb主从复制以及redis学习
开始今日份整理 1.mariadb的主从复制 主从复制大致图示: 1.1 mysql基本命令复习 linux下的操作 .启动mysql systemctl start mariadb .linux客户 ...
- mysql/mariadb主从复制
主从复制简介 MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上. MySQL数据库支持单向.双向.链式级联, ...
- MariaDB主从复制,redis发布订阅,持久化,以及主从同步
一. MariaDB主从复制 mysql基本操作 1 连接数据库 mysql -u root -p -h 127.0.0.1 mysql -u root -p -h 192.168.12.60 2 ...
- 【MySQL】Mariadb主从复制
Mariadb主从复制 环境配置: Master : 172.30.200.200 Slave : 172.30.200.204 架构图,如下: Master的配置: 1.binlog配置 [root ...
- Mariadb主从复制
前戏: mysql的基本命令复习 .启动mysql systemctl start mariadb .linux客户端连接自己 mysql -uroot -p -h 127.0.0.1 .远程链接my ...
- MariaDB 主从复制
MySQL Replication:NySQL复制,MySQL的复制默认为异步工作模式 mysql的复制功能是mysql内置的,装上它之后就具备了这个功能,而mysql复制是mysql实现大规模 ...
- MySQL(mariadb)主从复制模式与复制过滤
在前一篇文章<mysql多实例与复制应用>中只对mysql的复制做了简单的介绍,本篇内容专门介绍一下mysql的复制. MySQL复制 mysql复制是指将主数据库的DDL和DML操作通过 ...
- MariaDB主从复制、主主复制
1.部署 10.0.0.21 MariaDB-21 10.0.0.22 MariaDB-22 cat /etc/yum.repos.d/mariadb.repo [mariadb] name=Ma ...
- MariaDB主从复制和读写分离
一.基础环境 二.配置MariaDB服务 1.安装MariaDB # yum install -y mariadb mariadb-server # systemctl start mariadb # ...
随机推荐
- Maven 插件之 docker-maven-plugin 的使用
目录 docker-maven-plugin 介绍环境.软件准备Demo 示例 配置 DOCKER_HOST示例构建镜像 指定构建信息到 POM 中构建使用 Dockerfile 构建使用命令绑定 D ...
- 登录MES系统后台服务的操作
一:使用GIt Bash Here打开服务 文件名:MES-Server-API-SC 输入:yarn server//打开服务 文件名:MES-server-API 输入:yarn local//本 ...
- MUI消息推送
一.push通过H5+实现 简单实现方式:通过轮询服务器是否有新消息推送过来 mui.plusReady(function() { plus.navigator.closeSplashscreen() ...
- Tips_信息列表(手风琴)效果的多种实现方法
效果图: 一.纯CSS实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- Android第一次作业
Android第一次作业——天气预报界面 成果图: 思路: 运用RelativeLayout布局管理器来设计整体布局,在其中插入需要的图片和文本框,并设置其字体格式和背景.最后用HorizontalS ...
- 团队项目:Recycle
一.团队名字 地球保卫队(EPT) 二.团队阵容 1.项目部分 小组成员思维活跃,仅仅在一节课的时间里提出了n个颠覆软件开发界的思维的idea,最后在层层pk最后留下了八个惊世骇俗的想法.其中包括了要 ...
- icpc2018焦作-I. Distance
第一发又超时了... 题目大意:给你n个点,然后给你n-1的数,表示两两距离,然后让你输出n个答案,第i个答案表示从这n个点里面挑i个点,然后这i个点两两之间会有一个距离,答案要求这些距离和的最大值. ...
- java课程之团队开发冲刺阶段1.7
一.总结昨天进度 1.昨天学习了对数据库增删改查的基本操作,并且可以使用代码实现操作 二.遇到的问题 1.由于是学习阶段,没有遇到太大阻碍,但是最终需要实现的是联网进行数据库的读写或者是对本地数据库的 ...
- mybatis的基本语句的应用
大家好今晚整理有关mybatis的添加删除修改更新的操作 一.select <!-- 查询学生,根据id --> <select id="getStudent" ...
- 01.在vue中通过 JSONP 方式来跨域
//1.引入 : 在main.js 中引入该文件即可 //2.使用: axios.jsonp('地址').then(res => { // console.log(res) // } impor ...