一、关系型数据库的劣势

  “关系型数据库:指采用了关系模型来组织数据的数据库,而关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。”——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. 类型后面加问号 int?

    类型后面加问号 int? 单问号---用于给变量设初值的时候,给变量(int类型)赋值为null,而不是0! 双问号---用于判断并赋值,先判断当前变量是否为null,如果是就可以赋一个新值,否则跳过 ...

  2. python学习:元组和嵌套

    tuple(元组):只是可读,不可以修改# tup1 = () #空元组# tup2 = (20,) #元组内有一个元素,需要在元素后添加逗号 a = (1,2,3,4)print(a[1])a[1] ...

  3. 关于A2C算法

    https://github.com/sweetice/Deep-reinforcement-learning-with-pytorch/blob/master/Char4%20A2C/A2C.py ...

  4. redux 与 react-redux

    Redux 一.Redux 三大原则: 1.一个应用永远只有一个数据源(整个应用状态都保存在一个对象中,Redux提供的工具函数combineReducers可以解决庞大的数据对象的问题) 2.状态是 ...

  5. 批量删除Excel里面的换行符

    关于批量删除excel里面的换行符,应该说写程序的遇上excel大体都会有这么个问题,在解决这个问题前,我的解决办法是把excel 的数据全部复制到txt里面, 因为操作txt比操作excel更为简单 ...

  6. echarts、higncharts折线图或柱状图显示数据为0的点

    echarts.higncharts折线图或柱状图只需要后端传到前端一段json数据,接送数据的x轴与y周有对应数据,折线图或柱状图就会渲染出这数据. 比如,x轴表示美每天日期,y轴表示数量.他们的数 ...

  7. G102040I

    傻逼题.我从来没见过eps这样的... 打破了我对计算几何美好的幻想. eps=1e-6=>wa3  eps=1e-8->wa2  eps 1e-4->AC 真的自闭,真的猜不到ep ...

  8. Linux shell编程 -test

    test 命令的格式非常简单 test condition condition 是test命令要测试的一系列参数和值.当用在if-then 语句中时,test 命令看起来是这样的 if test co ...

  9. jstl使用中的错误----基于idea

    第一:首先正确将jstl.jar和standard.jar导入项目的lib目录下,注意两者的版本信息 第二: <%@ taglib prefix="c" uri=" ...

  10. Linux指令 压缩与解压

    打包: 格式:tar -cvf  压缩后的名称.tar   压缩的文件1 压缩的文件2 ```压缩的文件n(压缩多个文件为一份时各个文件以空格隔开) 例子:tar -cvf  tomcats.tar ...