Mariadb半同步复制,主从复制与双主复制
知识背景
一.mariadb复制相关知识
1.mariadb的来源
mysql数据库目前在数据库市场中所占份额仅仅次于oracle数据库,同时也是开源数据库的龙头老大。由于mysql数据库的开源性和高性能,同时还是免费的(不过被oracle收购后不容乐观),因此,mysql之父又开启了一个mysql的新分支mariadb,mariadb相对mysql而言版更新快,新特性实装速度迅速,mysql官方版本的优点mariadb也会很快的加以吸收。
2.mariadb复制的流程
mariadb数据库支持同步复制,半同步复制和异步复制,在复制的过程中一个服务器充当主服务器,而一个或者多个服务器做为从服务器。主服务器在进行修改时,会将更新写入二进制日志文件,并且维护文件的一个索引来跟踪日志循环。日志的记录会发送到从服务器进行数据修改。当从服务器到主服务器上获取二进制日志时,它会通知主服务器从日志中读取最后一次成功的更新的位置,从服务器则会接收从该位置之后发生的全部操作。
3.同步复制,异步复制,半同步复制
同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕。缺点:完成一个事务可能会有很大的延迟。
异步复制:当Slave准备好才会向Master请求binlog。缺点:不能保证一些事件都能够被所有的Slave所接收。
半同步复制:半同步复制工作的机制处于同步和异步之间,Master的事务提交阻塞,只要一个Slave已收到该事务的事件且已记录。它不会等待所有的Slave都告知已收到,且它只是接收,并不用等其完全执行且提交。若到达超时时长仍未收到则转为异步复制。
4.复制的常用架构
复制技术在实际应用中有多种实现架构,常见的有以下几种:
1.一主一从,即一台主数据库,一台从数据库;
2.一主多从,即一台主数据库,多台从数据库,主要用在写操作不频繁,但是有着大量读操作的环境中;
3.主主互备,即两台mariadb数据库服务器互相将对方作为自己的主服务器,自己又同时作为对方的从服务器进行复制。主要用于对数据库写操作较多的环境中,防止出现数据库的单点故障。
4.双主多从,在主主互备的基础上,在加上多个从服务器,主要用户对数据库写操作比较多,同时查操作也比较多的环境中。
复制的实现
主从复制(基于异步)
节点 | 系统 | mariadb | ip |
---|---|---|---|
主节点 | CentOS7.4 | 10.3.7 | 192.168.99.130 |
从节点 | CentOS7.4 | 10.3.7 | 192.168.99.131 |
图示
2.1.安装mariadb,这里为了省事直接yum安装了,其他安装方式不会影响后续操作;清理iptalbes和selinux,防止干扰实验
iptables -F iptables -X setenforce 0 yum install mariadb-server -y
2.修改主数据库的配置文件
# mariadb 10.2以前的版本 vim /etc/my.cnf #10.3之后的版本已经放到/etc/my.cnf.d/下 vim /etc/my.cnf.d/server.cnf
在[mysqld]下添入一下字段
#唯一标示的id段,不可重复 server-id=1 #开启二进制日志,可以自定义路径和文件名 log-bin=mysql-bin #开启二进制中继日志并定义命名格式 relay-log=mysq-relay-bin #复制的过滤项,负责过滤掉不需要复制的库和表 replicate-wild-ignore-table=mysql.% replicate-wild-ignore-table=test.% replicate-wild-ignore-table=information_schema.%
3.修改从数据的配置文件
# mariadb 10.2以前的版本 vim /etc/my.cnf #10.3之后的版本已经放到/etc/my.cnf.d/下 vim /etc/my.cnf.d/server.cnf
#唯一标示的id段,不可重复 server-id=2 #开启二进制日志,可以自定义路径和文件名 log-bin=mysql-bin #开启二进制中继日志并定义命名格式 relay-log=mysq-relay-bin #复制的过滤项,负责过滤掉不需要复制的库和表 replicate-wild-ignore-table=mysql.% replicate-wild-ignore-table=test.% replicate-wild-ignore-table=information_schema.%
4.启动mariadb
#主从都执行 systemctl start mariadb
5.同步数据库(如果都是新数据库不必做这步操作)
如果主数据库上已经有了数据,那么在执行复制之前要先行将两个数据库的数据同步。
#创建读锁,禁止写入数据 flush tables with read lock; #同步完成后记得释放
6.创建复制用户,一般建议创建一个专门用来复制数据的账号,以免影响的数据的安全性。
#grant replication slave on *.* to '用户名'@'允许登陆的ip' identified by '密码'; grant replication slave on *.* to 'slave'@'192.168.99.131' identified by 'slave'; #使得授权生效 flush privileges; #查看当前主库的二进制日志信息 show master status;
7.配置从数据库,将192.168.99.130作为主库
#mariadb> change master to \ #-> master_host='192.168.99.130', 指定主库ip #-> master_user='slave', 指定备份账号名 #-> master_password='slave', 指定备份账号的密码 #-> master_log_file='mysql-bin.000001', 主服务器的二进制日志名 #-> master_log_pos=851; 二进制文件的位置 mariadb> change master to \ -> master_host='192.168.99.130', -> master_user='slave', -> master_password='slave', -> master_log_file='mysql-bin.000001', -> master_log_pos=851;
8.从数据库开启slave
start slave;
9.检查运行状态
show slave status\G;
slave_IO_running和slave_SQl_running 是运行在从服务器节点上的主从复制线程,正常情况下均为yes replicate_wild_ignore_table 显示的是不复制的库和表
双主复制(基于异步)
双主复制是在主从复制的基础上,对主从双方做一次身份反转。
架构图
1.在主从基础上继续做以下
#上一次的从作为本次的主 #grant replication slave on *.* to '用户名'@'允许登陆的ip' identified by '密码'; grant replication slave on *.* to 'slave'@'192.168.99.130' identified by 'slave'; #使得授权生效 flush privileges; #查看当前主库的二进制日志信息 show master status;
2.在从数据库(上次的主)执行以下操作
mariadb> change master to \ -> master_host='192.168.99.131', -> master_user='slave', -> master_password='slave', -> master_log_file='mysql-bin.000001', -> master_log_pos=650;
3.启动备份
start slave; #查看运行状态 show status slave;
ps:
如果两台服务器都做数据更新时候回出现自增长字段发生冲突。
在配置文件加入
auto_increment_offset=1 开始点 auto_increment_increment=2 增长幅度 另外一台加入 auto_increment_offset=2 开始点 auto_increment_increment=2 增长幅度
新配置文件
server-id=#(id数字) log-bin=mysql-bin relay-log=mysq-relay-bin # “#”内填写对应数字来避免冲突 auto_increment_offset=#(开始点) auto_increment_increment=# (增长幅度) replicate-wild-ignore-table=mysql.% replicate-wild-ignore-table=test.% replicate-wild-ignore-table=information_schema.%
总的来说不推荐使用主主复制,mysql主主模型很难保证数据的一致性,所以仅仅作为演示。
配置半同步复制
半同步复制需要启动对应的插件
#查看半同步复制协议是否开启 show global variables like '%semi%';
开启半同步协议(旧版本需要手动安装,新版本已经内置,直接开启修好)
#旧版本安装 #主节点 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; #开启主节点半同步 SET GLOBAL rpl_semi_sync_master_enabled=1; #设置超时时间 SET GLOBAL rpl_semi_sync_master_timeout=2000; #从节点 INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 开启从节点半同步复制 SET GLOBAL rpl_semi_sync_slave_enabled=1;
#新版本 #开启主节点半同步 SET GLOBAL rpl_semi_sync_master_enabled=1; #设置超时时间 SET GLOBAL rpl_semi_sync_master_timeout=2000; #从节点 SET GLOBAL rpl_semi_sync_slave_enabled=1;
半同步复制的主从和主主,都是基本异步复制的基础上的,因此配置过程和上面的配置流程相同。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
[DNS] Linux(centos6)中dns(bind)服务器安装及dns理论详解
DNS域名解析系统 什么是DNS DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,方便用户使用名称的访问互联网。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP或TCP协议之上,使用端口号53。 FQDN 全称域名,例www.itwish.cn 的FQDN为 www.itwish.cn. ,其中 www(主机名).itwish(二级域名).cn(一级域名).(根) DNS查询类型 递归查询:递归查询是最常见的查询方式,当一个客户机发送一个查询给本地域名服务器时,本地域名服务器必须返回一个IP地址,如果解析不到IP,域名服务器将代替提出请求的客户机(下级DNS服务器)进行域名查询,若域名服务器不能直接回答,则域名服务器会在域各树中的各分支的上下进行递归查询,最终将返回查询结果给客户机,在域名服务器查询期间,客户机将完全处于等待状态。一般客户机和服务器之间属递归查询 迭代查询:迭代查询又称重指引。当服务器使用迭代查询时能够使其他服务器返回一个最佳的查询点提示或主机地址,若此最佳...
- 下一篇
centos7部署MongoDB数据库复制集(超详细)
centos7部署MongoDB数据库复制集(超详细)重点:复制集概述;复制集实现原理;复制集的应用案例;一、概述:组成:Mongodb复制集(副本集replica set)由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary通过oplog来同步Primary的数据,保证主节点和从节点数据的一致性,复制集在完成主从复制的基础上,通过心跳机制,一旦primary节点出现宕机,则触发选举一个新的主节点,剩下的secondary节点指向新的primary,时间应该在10-30s内完成感知primary节点故障,实现高可用数据库集群;特点:主是唯一的,但不是固定的;由大多数据原则保证数据的一致性;从库无法写入(默认情况下,不使用驱动连接时,也是不能查询的);相对于传统的主从结构,复制集可以自动容灾; 二、原理:角色(按是否存储数据划分):Primary:主节点,由选举产生,负责客户端的写操作,产生oplog日志文件;Secondary:从节点,负责客户端的读操作,提供...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8安装Docker,最新的服务器搭配容器使用
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2配置默认Tomcat设置,开启更多高级功能