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 # ... 
随机推荐
- php基础-cookie&session
			设置cookie //设置cookie setcookie('key', 'value', time() + 60, '/'); 设置session //必须开启session session_sta ... 
- Python 版本管理anaconda
			下载安装 下载地址 :anaconda官网 下载后直接命令行安装,默认安装按enter 和yes bash Anaconda3-5.2.0-Linux-x86_64.sh 按照官网上下一步直接用con ... 
- 3.SSM整合_多表_一对多的增删改查
			1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件,一对多反过来就是多对一 一 接口 public interface CategoryMapper { public void ad ... 
- SElinux安全子系统---学习
			SElinux是一个强制访问控制的安全子系统,是为了让各个服务进程都受到约束,只能获取到属于自己的资源 SElinux有三种配置模式: 1:enforcing--强制启动安全配置策略,拦截不合法的请求 ... 
- Spring源码学习-容器BeanFactory(四) BeanDefinition的创建-自定义标签的解析.md
			写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spri ... 
- lodash 实现一些常见的功能
			排序 const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]); 数组切片 普通的 slice 可传递两个参数 ... 
- java爬虫案例学习
			最近几天很无聊,学习了一下java的爬虫,写一些自己在做这个案例的过程中遇到的问题和一些体会1.学习目标 练习爬取京东的数据,图片+价格+标题等等 2.学习过程 1·开发工具 ... 
- 0~5年一个Java程序员的晋升之路
			在程序界流行着一种默认的说法叫“黄金5年”,也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕变成可以以不变应万变 ... 
- changXY
			changXY <!DOCTYPE html> <html> <head> <link rel="shortcut icon" href= ... 
- python   中间件
			中间件一.什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django 的输入和输出.每个中间件组件都负责做一些特定的功 ... 
