MySQL 的主从复制原理详解高级

2023-11-12

首先要明白为什么要用 mysql 的主从复制:
1–在从服务器可以执行查询工作 (即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
2–在从主服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)
3–当主服务器出现问题时,可以切换到从服务器。(提升性能)

来说一下主从复制的实现原理


mysql 复制过程分为三步(如上图所示):
1.mster 将改变记录到二进制日志 (binary log) 当中 这些记录过程叫做二进制日志事件 binary log events;
2.slave 将 master 的 binary log events 拷贝到它的中继日志 (relay log) 当中;
3.slave 重做中继日志中的事件 将改变应用到自己的数据库当中 mysql 复制是异步的且串行化的 3.slave 重做中继日志中的事件 将改变应用到自己的数据库当中 mysql 复制是异步的且串行化的

复制的基本原则:

每个 slave 只有一个 master
每个 slave 只能有一个唯一的服务器 id
每个 master 可以有多个 slave
复制的最大问题:
从主机复制数据达到从机可能会有延时!

都说 master 主机和 slave 从机的 mysql 版本号要一致 我就没一致
master 主机上是 5.6 slave 从机上是 5.7 一样搞
拿过来一台服务器你不得先找 mysql 吗?mysql 在哪里 配置文件在哪里?
执行命令:

which mysql
/usr/bin/mysql --verbose --help | grep -A 1 'Default options'
结果如图所示:


先去找 /etc/my.cnf 再去找 /etc/mysql/my.cnf 然后就是后边
我的是在 /etc/my.cnf
修改 my.cnf 配置文件如下:


重启 mysql 服务器执行命令:

service mysqld restart;
解释:
server-id=1 // 复制组中的每台服务器都要配置唯一的 Server ID,取值范围是 1 到 (232)−1,你自己决定取值
log-bin=master-bin // 日志文件名以 “master-bin” 作为前缀
binlog-do-db=finance_online // 要同步的 finance_online 数据库
如要同步多个数据库,就多加几个 replicate-db-db = 数据库名
binlog-ignore-db=mysql // 要忽略的数据库
read-only // 主机 读写都可以 (必须)
登录上 mysql 然后执行:

show master status;
结果如下:


记住里面的 File 和 Position 的值 待会会用到!

在主数据中创建一个同步账号(可不创建使用现有的),如果仅仅为了主从复制创建账号,只需要授予 REPLICATION SLAVE 权限
创建一个账号,账号:zcfz 密码: 123456
这个账号是专门用来搞主从复制用的哈

CREATE USER 'zcfz'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
GRANT REPLICATION SLAVE ON *.* TO 'zcfz'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
上述 主服务器配置完成

slave 从服务器配置开始:


重启 mysql 服务器:

service mysqld restart;
进入到 slave 从机的 mysql 命令行执行命令:

stop  slave;
CHANGE MASTER TO MASTER_HOST='10.10.20.120',
MASTER_USER='zcfz',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000005',
MASTER_LOG_POS=3878614;
解释:
MASTER_HOST 就是 master 主服务器的 ip
MASTER_USER 就是 master 主服务器里面的专门复制复制的用户 zcfz
MASTER_PASSWORD 就是 zcfz 账户的密码
MASTER_LOG_FILE 就是我们上边让您保存的 file 对应的值
MASTER_LOG_POS 就是我们上边让您保存的 Position 的值
然后执行命令:

show slave status\G
结果如图所示:


wating for master to send evnet 说明已经在待命状态了
另外必须注意的是 slave_io_runing 以及 slave_sql_runing 都同时必须为 yes 才行!!!
截止到此刻说明主从复制的道路打通了!
然后执行命令:

start slave;
验证阶段:
执行命令创建数据库:

CREATE DATABASE finance_online DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
这个时候 master 和 slave 上都有了数据库
然后你再导入数据到 master 主机上的 finance_online 那么 slave 从机上也就有了然后你再导入数据到 master 主机上的 finance_online 那么 slave 从机上也就有了

另外如果你不想复制这个库了 想换一个
那么去修改 master 主机上的 my.cnf 当中的 binlog-do-db=tprbac 然后重启 mysql 服务
然后 show master status 看看 file 和 positon
然后再去 linux 服务器上停止 slave 在 mysql 当中执行 stop slave;
然后再执行:
CHANGE MASTER TO MASTER_HOST=’10.10.20.120’,
MASTER_USER=’zcfz’,
MASTER_PASSWORD=’123456’,
MASTER_LOG_FILE=‘你看到的 file’,
MASTER_LOG_POS = 你看到的 positon;
然后在 start slave;
就完事了!
这样就会主从复制你想要复制的数据库了!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 的主从复制原理详解高级 的相关文章

  • 最佳实践:在 PHP 中导入 mySQL 文件;分割查询

    我遇到了一种情况 我必须更新共享托管提供商上的网站 该网站有一个 CMS 使用 FTP 上传 CMS 文件非常简单 我还必须导入一个大的 相对于 PHP 脚本的范围 数据库文件 未压缩时大约 2 3 MB Mysql 已关闭 无法从外部访问
  • 同步不同数据库的2个表-MySQL

    我在数据库表中有一个包含某些医疗信息的表 我每天抓取并解析它们并将其存储在本地数据库的表中 假设最初有 1500 条记录 今天我的本地计算机上又添加了 100 条记录 现在 我有一个服务器 我需要在其中推送这些记录 因此数据库是不同的 我昨
  • 为什么我的 php 代码无法连接到远程 MySql 数据库?

    我正在尝试连接到远程 MySql 数据库 但收到以下错误消息 警告 mysqli connect HY000 2002 连接尝试失败 因为连接方在一段时间后没有正确响应 或者由于连接的主机未能响应而建立的连接失败 在 C myLocalDi
  • MySQL使用long类型数字过滤varchar类型时返回额外记录

    一个简单的表格 CREATE TABLE tbl type test uid varchar 31 NOT NULL DEFAULT 0 value varchar 15 NOT NULL DEFAULT PRIMARY KEY uid E
  • 创建索引可以使用现有索引吗?

    我在 A B 和 C 列上有单独的索引 我想在 A B C 三列上创建一个复合索引 我的会有什么影响existing指数对综合指数creation 数据库会利用它们吗 它们是否无关紧要 或者它们会减慢我的新复合索引的创建速度吗 我正在使用
  • MYSQL sum() 计算不同的行

    我正在寻求在 SQL 查询中使用 sum 的帮助 SELECT links id count DISTINCT stats id as clicks count DISTINCT conversions id as conversions
  • 当我将 xx 添加到 mysql float 列时,结果错误,这是一个错误吗?

    我的mysql 5 6 16 我的餐桌信息 CREATE TABLE xxx uid int 11 NOT NULL money float 10 2 NOT NULL DEFAULT 0 00 real money float 10 2
  • 如何将html表单中的信息写入MySQL数据库

    好吧 我正在建立一个带有表单的网站 我想将用户在表单中输入的所有信息保存到我的 MySQL 数据库中 表单的编码如下
  • 使用 Coldfusion 分页

    是否可以仅使用一个查询在 Coldfusion 中分页并显示页数 我的理解是 您显然可以使用一个查询进行分页 但您需要一个额外的查询来创建页面 这是为了计算结果总数 currentPage 1 resultsPerPage Offset i
  • 为什么我们要关闭 Mysqli 中的结果

    为什么我们要关闭 result mysqli new mysqli localhost root root test if mysqli gt connect errno echo Failed to connect to MySQL my
  • 在数据库中存储差异的最紧凑方式是什么?

    我想实现类似于维基媒体的修订历史的东西 最好使用的 PHP 函数 库 扩展 算法是什么 我希望差异尽可能紧凑 但我很高兴只能显示每个修订版与其同级修订版之间的差异 并且一次只能回滚一个修订版 在某些情况下 只有几个字符可能会发生变化 而在其
  • REPLACE MYSql 中的新行字符不起作用

    我执行了以下查询 由于某种原因它没有替换数据库中的换行符 它说 Rows matches 1 但没有变化 有什么问题吗 mysql gt UPDATE aboutme SET abouttext REPLACE abouttext n WH
  • mysql - 有什么方法可以帮助使用另一个索引进行全文搜索?

    假设我有一个 文章 表 其中包含以下列 article text fulltext indexed author id indexed 现在我想搜索特定作者撰写的文章中出现的术语 所以像这样 select from articles whe
  • 将 php filter_var 与 mysql_real_escape_string 结合使用

    我想首先说 我意识到 PDO mysqli 是新标准 并且已被 SO 广泛覆盖 然而 在这种特殊情况下 我没有时间在启动客户端站点之前将所有查询转换为 PDO 以下内容已在网站上的大多数查询中使用 我可以补充一下 这不是我所使用的 user
  • Doctrine 不会在 MySQL 中生成跨数据库外键约束

    我有两个表 db1 Contact 和 db2 Recipient 每个收件人都应该是联系人 因此我在 db1 Contact ContactID 字段上的两个表之间设置了外键 我在 Recipient php 中使用以下注释表示这一点 O
  • 防止重复数据输入mysql数据库

    我试图让我的电子邮件订阅服务拒绝数据库中已存在的电子邮件 这样用户就不会订阅同一封电子邮件两次 这就是我所拥有的 但它不起作用 有什么想法吗
  • MySQL 中有“connect by”替代方案吗?

    如果我使用 Oracle 有connect by可用于创建分层查询的关键字 目前我正在一个项目中使用MySQL 我想知道是否有替代方案connect by在 MySQL 中 我尝试过谷歌 但到目前为止还没有结果 我想要实现的是通过一个查询从
  • 找时间通过 PHP 执行 MySQL 查询

    我在互联网上看到过这个问题 here http www phpbuilder com board showthread php t 2100256 and here http answers yahoo com question index
  • 重复键错误不会取消/回滚mysql事务

    当在 mysql innodb 事务中时 我希望重复的键错误会导致回滚 它没有 相反 它只是抛出一个错误并继续执行下一个命令 一旦到达 COMMIT 命令 事务将被提交 没有重复键导致命令 这是预期的行为吗 如果是这样 如何设置它以便在发生
  • 如何使用外连接和分组依据在查询中包含 NULL 值

    我有两个表 其中包含以下示例数据 Table 1 item name item id item desc 1 apple 2 orange 3 banana 4 grape 5 mango Table 2 user items user i

随机推荐

  • window中如何用命令行新建文件夹和文件

    1 新建文件夹 D gt mkdir test 通过mkdir 文件夹名 回车即可用命令行工具新建文件夹 2 新建文件 cd test文件目录下 D gt test type nul 文件名 回车即可创建新的文件
  • Element UI的table表格中实现复选框勾选

    需求 在table中实现勾选多行复选框的内容 点击提交按钮 选择的复选框与表格内容对应
  • Matlab 常用快捷键

    MATLAB Numpy函数对照表 http mathesaurus sourceforge net matlab python xref pdf 常见快捷键 Ctrl R 注释代码 Ctrl T 取消注释代码 Ctrl 或 先将光标移动到
  • stm32——PWM实现呼吸灯效果

    使用pwm点亮led 实现呼吸灯效果 led为什么可以越来越亮 越来越暗 由不同的占空比决定 占空比由CCRx决定 1 芯片手册查看引脚pwm通道 2 cubeMX sys设置串口 RCC设置时钟来源 配置时钟 配置io口的pwm输出 三
  • 华为机顶盒系统时间同步服务器,华为悦盒主时间同步服务器地址

    华为悦盒主时间同步服务器地址 内容精选 换一换 华为云存储容灾服务 简称SDRS 提供了虚拟机级别的容灾保护 当主站点故障的时候 虚拟机可以在备站点迅速恢复 以确保业务的联系性 来自 产品 边缘节点既可以是物理机 也可以是虚拟机 边缘节点需
  • Linux下C/C++语言gdb调试方法

    1 gdb参数列表 启动程序准备调试 gdb your proceduce 或者先输入gdb 然后输入 file your proceduce 然后使用run或者r命令开始程序的执行 也可以使用 run parameter将参数传递给该程序
  • 核酸检测安排

    题目描述 在系统 网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查 每名采样员的效率不同 采样效率为N人 小时 由于外界变化 采样员的效率会以M人 小时为粒度发生变化 M为采样效率浮动粒度 M N 10 输入保证N 10 的结
  • 软件测试工程师(4k~6k)的工作怎么找?转行IT人特别是应届生得好好看看这篇文章了...

    前言 作为一个入行软件测试10多年的老兵来说 最初我的工作也不是做软件测试的 只是一个偶然后机会可以转到这个行业 所以就豪不犹豫的转到这个行业 虽然前期会感觉有点压力 毕竟没有真正的做过 但是只要在工作中保持积极乐观的态度 多问 多学 多实
  • C语言数据结构篇——用栈实现四则运算

    作者名 Demo不是emo 主页面链接 主页传送门创作初心 舞台再大 你不上台 永远是观众 没人会关心你努不努力 摔的痛不痛 他们只会看你最后站在什么位置 然后羡慕或鄙夷座右铭 不要让时代的悲哀成为你的悲哀专研方向 网络安全 数据结构 每日
  • 【RocketMQ】NameServer总结

    NameServer是一个注册中心 提供服务注册和服务发现的功能 NameServer可以集群部署 集群中每个节点都是对等的关系 没有像ZooKeeper那样在集群中选举出一个Master节点 节点之间互不通信 服务注册 Broker启动的
  • “左三圈右三圈”,莫言开收割机 收割大批网友喜爱

    昨晚十点 莫言公众号如期更新 半夜就有网友在朋友圈里奔走相告 莫言为大家表演开联合收割机啦 看完莫言紧张又努力开收割机的视频 网友直呼 莫言老师抓紧方向盘使劲转动的样子太可爱了 爱了 爱了 在大家的印象中 莫言是深邃而丰腴的大作家 但这个视
  • [STM32F1]STM32上的DWT与延时实现

    对于做单片机程序开发来说 定时管理的需求非常普遍 不管是 系统滴答定时器systick计数器延时或者是通过外设定时器timer的向上向下等计数来延时 甚至在精度要求不高的地方还可以通过变量自加判断来延时 这都是一种延时管理实现的方法 但是对
  • java并发的概念

    1 并发的概念 并发 concurrency 指在同一时刻只能有一条指令执行 但多个进程指令被快速的轮换执行 使得在宏观上具有多个进程同时执行的效果 但在微观上并不是同时执行的 只是把时间分成若干段 使多个进程快速交替的执行 2 并行的概念
  • Ubuntu配置中文环境

    用了一段时间的英文开发了想起来要不换中文试试 所以闲暇之余配置了一个中文 做了一个小记录 这个是英文的环境下面的界面 在安装前简称系统的网络 和源是否正常 检查网络ping www baidu com 检查源 cat etc apt sou
  • 老板的思维模式:投资与浪费

    有人说 人生最大的投资 不是房子 不是股票 是人 是跟什么人交往 跟随什么人 交什么样的朋友 其实就是你投资什么人 而这是对人生影响最大的 钱不会给你机会 股票不会 房子也不会 只有人会给你机会 当你需要帮助的时候 只有跟你要好的人会帮你
  • 企业运维实践-如何在K8S集群环境Gitlab+Jenkins+Jmeter+Grafana技术中实现自动化分布压力测试数据展示...

    关注 WeiyiGeek 公众号 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 本章目录 0x00 前言简述 0x01 安装配置 在 Windows 中安装 Apache jmeter 工具 以二进制方式安装Helm
  • STM32 定时器

    include timer h include led h 本程序只供学习使用 未经作者许可 不得用于其它任何用途 Mini STM32开发板 通用定时器 驱动代码 正点原子 ALIENTEK 技术论坛 www openedv com 修改
  • 关于char类型变量输入与输出的区别

    笔者前几天看到了一个小项目 请输入一个小写字母 输出对应的大写字母 乍一看挺简单 可实际操作却难倒了我 直到我打开看了老师的视频之后 我才恍然大悟 char的输入其实输入的永远是数字 没有单纯的字符 与此同时char的输出却有两种形式 c对
  • covariance matrix r语言_时间序列分析

    这是关于时间序列的第N篇文章 本文将介绍ARIMAX模型 简单来说就是在ARIMA的基础上增加一个外生变量 ARIMAX和ARIMA相比在理论上没有太多新的内容 所以本文直接介绍在R里怎么一步一步跑ARIMAX 在阅读这篇文章前 需要对AR
  • MySQL 的主从复制原理详解高级

    首先要明白为什么要用 mysql 的主从复制 1 在从服务器可以执行查询工作 即我们常说的读功能 降低主服务器压力 主库写 从库读 降压 2 在从主服务器进行备份 避免备份期间影响主服务器服务 确保数据安全 3 当主服务器出现问题时 可以切