首页 > 数据库 >MySQL--主从复制

MySQL--主从复制

时间:2024-08-10 10:23:02浏览次数:8  
标签:主库 10.0 主从复制 slave log -- MySQL master mysql

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

一、什么是主从复制

1、定义

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。

2、作用

  • 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失
  • 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能
  • 读写分离,使数据库能支撑更大的并发
    • 在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
    • 在从服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)

二、主从复制原理

实现整个主从复制,需要由slave服务器上的IO进程和Sql进程共同完成

要实现主从复制,首先必须打开Master端的binary log(bin-log)功能,因为MySQL主从复制过程实际上就是Slave从Master端获取相应的二进制日志,然后再在自己slave端完全按照顺序执行日志中所记录的各种操作

 master 负责写 -----A 
 slave relay-log -----B 
 I/O 负责通信读取binlog日志 
 SQL 负责写数据 

其主从复制流程图与步骤如下:

  • 步骤一:主库db的更新事件(update、insert、delete)被写到binlog
  • 步骤二:从库发起连接,连接到主库
  • 步骤三:此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库
  • 步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log.
  • 步骤五:从库还会创建一个SQL线程,从relay log里面读取内容,将更新内容写入到slave的db.

面试题:1、主从复制延迟大比较慢原因:

 主服务器配置高,从服务器的配置低
 并发量大导致主服务器读的慢。从服务器写的慢
 网络延迟比较高
 从服务器的读写速度慢
 从节点过多

面试题:2、从数据库的读的延迟问题了解吗?如何解决?

 解决方法:
 半同步复制—解决数据丢失的问题
 并行复制—-解决从库复制延迟的问题

一、主-从-从架构

10.0.0.2主库---10.0.0.3从库--10.0.0.4从库

1、关闭防火墙

 systemctl stop firewalld
 systemctl disable firewalld

2、设置serve_id (主从库)

 # 主库2
 [root@localhost ~]# vim /etc/my.cnf
 serve_id=2
 log_bin=2
 ​
 # 从库3
 [root@localhost ~]# vim /etc/my.cnf
 serve_id=3
 ​
 # 从库4
 [root@localhost ~]# vim /etc/my.cnf
 serve_id=4
 ​
 [root@localhost ~]# systemctl restart mysqld

3、开启binlog日志,查看binlog日志信息-(主库)

 [root@localhost ~]# mysql -u root -p
 mysql> show master status;   # 查看binlog日志
 +----------+----------+--------------+------------------+-------------------+
 | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +----------+----------+--------------+------------------+-------------------+
 | 2.000001 |      154 |              |                  |                   |
 +----------+----------+--------------+------------------+-------------------+
 1 row in set (0.00 sec)

4、授权 (主库)

 # 允许用户名为"user1",来自10.0.0.*网段的用户使用密码"123"登录到MySQL服务器,并拥有读取二进制日志的权限
 mysql> grant replication slave on *.* to "user1"@"10.0.0.%" identified by "123";
 mysql> flush privileges;        # 刷新权限

5、指定主库信息 (从库)

 mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="2.000001" ,master_log_pos=154;

6、启动slave

 mysql> start slave;

7、查看从库状态

 mysql> show slave status\G   查看从库状态
 ...
    Slave_IO_Running: Yes    io线程
    Slave_SQL_Running: Yes   sql 线程

二、主-主从-从架构

10.0.0.2主库---10.0.0.3主从库--10.0.0.4从库

初始化数据库

 cd /data/mysql/data
 rm -rf *
 /data/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data
 systemctl restart mysqld    

1、设置serve_id

 # 主库10.0.0.2
 [root@localhost ~]# vim /etc/my/cnf
 ...
 serve_id=2
 log_bin=2
 ​
 # 主从库10.0.0.3
 [root@localhost ~]# vim /etc/my/cnf
 ...
 serve_id=3
 log_bin=3
 log_slave_updates
 ​
 # 从库10.0.0.4
 [root@localhost ~]# vim /etc/my/cnf
 serve_id=4
 ​
 # 都需要重启mysql服务
 [root@localhost ~]# systemctl restart mysqld

2、授权与指定主库信息

主库10.0.0.2中操作:

 # 查看主库10.0.0.2的binlog日志
 [root@localhost ~]# mysql -u root -p
 mysql> show master status;   # 查看binlog日志
 +----------+----------+--------------+------------------+-------------------+
 | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +----------+----------+--------------+------------------+-------------------+
 | 2.000001 |      154 |              |                  |                   |
 +----------+----------+--------------+------------------+-------------------+
 1 row in set (0.00 sec)
 # 主库10.0.0.2进行授权
 mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123";
 mysql> flush privileges;

主从库10.0.0.3中操作:

 # 查看主库10.0.0.3的binlog日志
 [root@localhost ~]# mysql -u root -p
 mysql> show master status;   # 查看binlog日志
 +----------+----------+--------------+------------------+-------------------+
 | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +----------+----------+--------------+------------------+-------------------+
 | 3.000001 |      300 |              |                  |                   |
 +----------+----------+--------------+------------------+-------------------+
 1 row in set (0.00 sec)
 # 主库10.0.0.3进行授权
 mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123";
 mysql> flush privileges;
 mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="2.000001" ,master_log_pos=154;
 mysql> start slave;
 mysql> show slave status\G

从库10.0.0.4中操作:

 mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="3.000001" ,master_log_pos=300;
 mysql> start slave;
 mysql> show slave status\G 

三、互为主从架构

主库10.0.0.2和10.0.0.3互为主从架构

1、设置serve_id

 # 主从库10.0.0.2
 [root@localhost ~]# vim /etc/my/cnf
 ...
 serve_id=2
 log_bin=2
 log_slave_updates
 ​
 # 主从库10.0.0.3
 [root@localhost ~]# vim /etc/my/cnf
 ...
 serve_id=3
 log_bin=3
 log_slave_updates
 ​
 [root@localhost ~]# systemctl restart mysqld 

2、授权与指定主库信息

主从库10.0.0.2:

 # 查看主库10.0.0.2的binlog日志
 [root@localhost ~]# mysql -u root -p
 mysql> show master status;   # 查看binlog日志
 +----------+----------+--------------+------------------+-------------------+
 | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +----------+----------+--------------+------------------+-------------------+
 | 2.000001 |      154 |              |                  |                   |
 +----------+----------+--------------+------------------+-------------------+
 1 row in set (0.00 sec)
 # 主库10.0.0.2进行授权
 mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123";
 mysql> flush privileges;
 mysql> change master to master_host="10.0.0.3",master_user="user1",master_password="123",master_log_file="3.000001" ,master_log_pos=300;
 mysql> start slave;
 mysql> show slave status\G

主从库10.0.0.3:

 # 查看主库10.0.0.3的binlog日志
 [root@localhost ~]# mysql -u root -p
 mysql> show master status;   # 查看binlog日志
 +----------+----------+--------------+------------------+-------------------+
 | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +----------+----------+--------------+------------------+-------------------+
 | 3.000001 |      300 |              |                  |                   |
 +----------+----------+--------------+------------------+-------------------+
 1 row in set (0.00 sec)
 # 主库10.0.0.3进行授权
 mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123";
 mysql> flush privileges;
 mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="3.000001" ,master_log_pos=154;
 mysql> start slave;
 mysql> show slave status\G

四、问题解决

查看uuid,uuid号需要唯一:

 cat /data/mysql/data/auto.cnf

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

标签:主库,10.0,主从复制,slave,log,--,MySQL,master,mysql
From: https://blog.csdn.net/lerp020321/article/details/140929136

相关文章

  • 触想工控设备在工业“无人化”场景的应用
    今年七月,比酷暑更加火爆的,当属频登热搜的武汉无人驾驶出租车“萝卜快跑”——L4级自动驾驶、360°三维感知、AI大模型算法……高端科技与“低价揽客”的反差感使得“萝卜快跑”迅速走红。△图源|萝卜快跑官网平台“萝卜快跑”的神秘面纱“萝卜快跑”无人驾......
  • Cisco ASAv 9.20.3 - 思科自适应安全虚拟设备 (ASAv)
    CiscoASAv9.20.3-思科自适应安全虚拟设备(ASAv)CiscoAdaptiveSecurityVirtualAppliance(ASAv)请访问原文链接:https://sysin.org/blog/cisco-asav/,查看最新版。原创作品,转载请保留出处。思科自适应安全虚拟设备(ASAv):跨物理和虚拟环境扩展安全性思科自适应安全虚......
  • 08-09 题解
    08-09题解A小水题思路假设我们选定了当前子序列的绝对众数\(x\),那么该序列里最多再放\(num_x-1\)个其他数字为了分出最少的子序列,肯定要让每个子序列在拥有绝对众数的同时能消化尽量多的其他数字由此,可以得到一个贪心策略:每次取出出现次数最多的一个数字,消掉出现......
  • ABC 365
    赛时通过:A、B、C。赛后补题:D、E。A依题判断即可。#include<bits/stdc++.h>usingnamespacestd;inty;intmain(){ cin>>y; if(y%4!=0)cout<<365; if(y%4==0&&y%100!=0)cout<<366; if(y%100==0&&y%400!=0)cout<<365; if(y%400==0)......
  • 前端黑科技:使用 JavaScript 实现网页扫码功能
    在数字化时代,二维码已经渗透到我们生活的方方面面。从移动支付到产品溯源,二维码凭借其便捷性和高效性,成为了信息传递的重要载体。而随着前端技术的不断发展,我们甚至可以使用JavaScript在网页端实现二维码扫描功能,为用户提供更加便捷的操作体验。本文将带您深入了解如何使用Jav......
  • CryptoHouse:由 ClickHouse 和 Goldsky 支持的免费区块链分析服务(ClickHouse 博客)
    我们很高兴地宣布CryptoHouse,在crypto.clickhouse.com上可访问,这是一个由ClickHouse提供支持的免费区块链分析服务。https://crypto.clickhouse.com/现有的公共区块链分析服务通常需要定时、异步查询,而ClickHouse提供实时分析,通过即时查询响应来普及访问权限。用户可以......
  • proteus 中单片机串口仿真实验
    位置:                    连线如图:问题解决在进行仿真的时候,可能不会出现terminal显示框,可以在菜单栏debug->virtualterminal来让它显示:如果visualterminal显示的是乱码,我们就需要根据实际情况修改单片机时钟频率,双击单片机,在......
  • 接收用户的输入
    staticvoidMain(string[]args){Console.WriteLine("美女,你喜欢吃什么水果?");stringstrFruit=Console.ReadLine();//接收用户输入的字符串;Console.WriteLine("这么巧吗,我也喜欢吃"+strFruit+";");Con......
  • [JOISC 2023 Day3] Tourism
    虚树大小可以从两个角度进行思考:最小斯坦纳树大小,或者,子树内至少有一个标记点的点的数量减去虚树上边的点的数量。前者的优点是简洁,后者的优点是不依赖dfn序的排序。这道题在利用后者的同时,将赋值看作了颜色段,用树链剖分保证了颜色段总数为\(O(n\logn)\),利用了odt。#inc......
  • Spring AI 更新:支持OpenAI的结构化输出,增强对JSON响应的支持
    就在昨晚,SpringAI发了个比较重要的更新。由于最近OpenAI推出了结构化输出的功能,可确保AI生成的响应严格遵守预定义的JSON模式。此功能显着提高了人工智能生成内容在现实应用中的可靠性和可用性。SpringAI紧随其后,现在也可以对OpenAI的结构化输出完美支持了。下图展示了本......