MYSQL主从同步原理解析!

大神请绕行!

一、为什么要主从同步?

我们会对数据库进行大量的读写操作,而如果数据库非常庞大的话,对我们的主机压力非常大,我们想到了一个解决的办法:两台服务器,一台只用来读取操作,一台只用来写入操作。

二、用途:

实时灾备,用于故障切换;

读写分离,提供查询服务;

备份,避免影响业务。

三、实战演练

主从部署必要条件:

  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同
  • 从库服务器能连通主库

1、一主一从

(1)实战环境

两台服务器(centos7):

主服务器IP:172.18.252.121

从服务器IP:172.18.252.162

两台机器上都安装了mariadb.server

(2)主服务器配置文件

主配置文件路径: /etc/my.cnf。添加两行:

要点讲解:

首先,一定要在[mysqld]下面添加这两条设置,否则会出现问题。

server_id=1? : 就是给我们的主机器设置一个ID号。

log-bin? :开启二进制日志功能。

说一下我在这里遇到的一个问题:我将server_id=1这一行写入配置文件,然后在数据库里面查看了一下server_id的值,居然是0,然后老师说我的配置文件fcontext不对。我在网上搜了一下,另一种情况也可能出问题:将server_id=1该设置写在了[mysqld_safe]下,重启服务(每一次修改配置文件都需要重启服务)。再登录数据库,查看一下server_id参数,server_id的值居然是0!将server_id=1写入[mysqld]下面则能生效。(我自己也试了一下,但是没有什么影响)。

(4)重启服务

每次修改配置文件都需要重启服务!

(5)添加用户

登录数据库,并创建repluser账户,密码centos,网段是172.18.252.%。

(6)查询当前二进制日志位置

以下在从服务器上进行

(7)配合从服务器文件

(8)重启服务

(9)设置主从关系

Slave [(none)]> CHANGE MASTER TO

? ? -> ? MASTER_HOST=‘192.168.153.7‘, -------主机IP

? ? -> ? MASTER_USER=‘repluser‘, ? ? ? ? ? ---------用户名

? ? -> ? MASTER_PASSWORD=‘centos‘, ? ? ---------密码

? ? -> ? MASTER_PORT=3306, ? ? ? ? ? ? ? ? ----------端口

? ? -> ? MASTER_LOG_FILE=‘master-bin.000003‘, ----步骤(6)查到的文件的文件名

-> ? MASTER_LOG_POS=401, ? ? ? ? ? ? --------上面文件起始位置

? ? -> ? MASTER_CONNECT_RETRY=10;

(10)开启从属关系

你肯定失败了!简单一点:清空一下防火墙,关闭一下selinux再试试吧(两台机器都要设置)。

清空防火墙 iptables -F?

关闭selinux:setenforce 0

可能你觉得这样做不太严谨,那你也可以给主服务器设置一个防火墙策略:

iptables -A INPUT -s 192.168.153.6 -p tcp --dport 3306 -j accept

iptables -A INPUT -p tcp --dport 3306 -j REJECT

(11)测试

在我们的主服务器上创建一个库,然后在我们的从服务器上一下是否有这个库!

如果要停止 stop slave; 清空 reset slave all;

?

?

原文地址:https://www.cnblogs.com/sqlserver-my/p/11013837.html

时间: 2024-10-10 16:17:21

MYSQL主从同步原理解析!的相关文章

MySQL主从同步--原理及实现(一)

1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover(失败切换)/High Availability 数据备份. 3.主从同步的原理是什么? 首先我们来了解master-slave的体系结构. 如下图: 不管是delete.update.insert,还是创建函数.存储过程,所有的操作都在master上.当master有操作的时候,slave会快速的

MySQL主从同步原理讲述

关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用:为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务:那么主库和从库之间的数据是如何同步的呢? 为了减轻主库的压力,应该在系统应用层面做读写分离,写操作走主库,读操作走从库,下图为MySQL官网给出的主从复制的原理图,从图中可以简单的了解读写分离及主从同步的过程,分散了数据库

Redis主从同步原理解析

redis主从同步原理 在主从数据同步过程中, master只在第一次同步时创建了RDB文件,用此做基础进行同步. 之后的同步,都是通过增量传输命令的方式(AOF)进行同步. 环境描述: master:192.168.2.100    不开启RDB和AOF slave:192.168.2.200    开启RDB和AOF 配置信息: master: # vim etc/redis.conf #save 600 5           //禁用RDB appendonly no       //禁

十五大原理之零四:MYSQL主从同步原理

主从同步又可以称为主从复制!本人习惯称为主从复制 一.MySQL主从复制(同步)原理过程详细描述: 1.Slave服务器上执行start salve,开启主从复制开关. 2.此时,Slave服务器的IO线程会通过Master上授权的复制用户权限请求连接Master 服务器,并请求从指定Binlog日志文件的指定位置(日志文件名和位置就是配置主从复制服务时执行change master命令时指定的)之后发生Binlog日志内容: 3.Master服务器接收到来自Slave服务器的IO线程的请求后,

mysql主从同步原理-luodidiao-51CTO博客

为什么要做主从复制?1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作. 2.做数据的热备 3.架构的扩展.业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能. 基本构建思路–确保数据相同:从库必须要有主库上的数据–配置主服务器:启用binlog日志,授权用

mysql主从同步原理,配置,同步延迟处理

Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave).在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端. 要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary Log(mysql-bin.xx

mysql主从同步原理

一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费多久,不容乐观的未来,但是我们还是要能熟练掌握MySQL数据的架构和安全备份等功能,毕竟现在它还算是开源界的老大吧! MySQL数据库支持同步复制.单向.异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环

Mysql主从同步原理及配置-Linux

从库的io线程会实时依据master.info信息的去主库的binlog日志里面读取更新的内容,将更新的内容取回到自己的中继日志中,同时会更新master.info信息,此时sql线程实时会从中继日志中读取并执行里面的sql语句 Master :记录数据更改操作 – 启用 binlog 日志 – 设置 binlog 日志格式 – 设置 server_id Slave 运行 2 个线程 – Slave_IO :复制 master 主机 binlog 日志文件里的 SQL 到本机的 relay-lo

mysql 主从同步原理

Replication 线程 Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave).在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端. 要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary L