一、关系型数据库的劣势

  “关系型数据库:指采用了关系模型来组织数据的数据库,而关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。”——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主从复制的逻辑与实现的更多相关文章

  1. Linux-基础学习(五)-mariadb主从复制以及redis学习

    开始今日份整理 1.mariadb的主从复制 主从复制大致图示: 1.1 mysql基本命令复习 linux下的操作 .启动mysql systemctl start mariadb .linux客户 ...

  2. mysql/mariadb主从复制

    主从复制简介 MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上. MySQL数据库支持单向.双向.链式级联, ...

  3. MariaDB主从复制,redis发布订阅,持久化,以及主从同步

      一. MariaDB主从复制 mysql基本操作 1 连接数据库 mysql -u root -p -h 127.0.0.1 mysql -u root -p -h 192.168.12.60 2 ...

  4. 【MySQL】Mariadb主从复制

    Mariadb主从复制 环境配置: Master : 172.30.200.200 Slave : 172.30.200.204 架构图,如下: Master的配置: 1.binlog配置 [root ...

  5. Mariadb主从复制

    前戏: mysql的基本命令复习 .启动mysql systemctl start mariadb .linux客户端连接自己 mysql -uroot -p -h 127.0.0.1 .远程链接my ...

  6. MariaDB 主从复制

    MySQL Replication:NySQL复制,MySQL的复制默认为异步工作模式    mysql的复制功能是mysql内置的,装上它之后就具备了这个功能,而mysql复制是mysql实现大规模 ...

  7. MySQL(mariadb)主从复制模式与复制过滤

    在前一篇文章<mysql多实例与复制应用>中只对mysql的复制做了简单的介绍,本篇内容专门介绍一下mysql的复制. MySQL复制 mysql复制是指将主数据库的DDL和DML操作通过 ...

  8. MariaDB主从复制、主主复制

    1.部署 10.0.0.21  MariaDB-21 10.0.0.22  MariaDB-22 cat /etc/yum.repos.d/mariadb.repo [mariadb] name=Ma ...

  9. MariaDB主从复制和读写分离

    一.基础环境 二.配置MariaDB服务 1.安装MariaDB # yum install -y mariadb mariadb-server # systemctl start mariadb # ...

随机推荐

  1. string 转 int

    1.stringstream 用流转换 cin    cout都是流的操作   iostream cin的时候,从屏幕读取字符串流,自动判断类型(省去了scanf的格式控制) stringstream ...

  2. md5 加密文件

    import hashlibimport os def get_md5(file_path): md5 = None if os.path.isfile(file_path): f = open(fi ...

  3. 【react】---17新增的生命周期

    一.废除的生命周期 官网文档指出使用这些生命周期的代码会在未来版本的react中更容易产生bug,尤其是对于异步渲染的版本 由于未来采用异步渲染机制,所以即将在17版本中去掉的生命周期钩子函数 com ...

  4. nmon监控分析

    一.下载软件安装 wget http://sourceforge.net/projects/nmon/files/nmon_linux_14i.tar.gz tar xf nmon_linux_14i ...

  5. 在C++中,setw(int n)

    setw(int n)用来控制输出间隔例如:cout<<'s'<<setw(8)<<'a'<<endl;则在屏幕显示s        a //s与a之间 ...

  6. Ubuntu环境下配置darknet

    本教程基于Linux物理机进行相关配置,要求物理机中包含N卡且Capbility>=3.0,小于3.0(Fermi架构)只允许配置cuda,不能配置使用Cudnn: 本教程分为: 1.安装NVI ...

  7. 老司机带路:《axios从入门到开车 嘀嘀~~》

    前言:axios vue.axios 跨域.axios.js.axios get.axios post.axios中文文档 之前当vue更新到2.0之后,作者就宣告不再对vue-resource更新, ...

  8. 【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.1 搭建环境

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  9. [Swift]LeetCode127. 单词接龙 | Word Ladder

    Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest t ...

  10. JS异步解析

    同步和异步 举个