MySQL主从复制(一主一从)

news2024/11/27 4:38:04

文章目录

  • MySQL主从复制(一主一从)
    • 什么是主从复制
    • 主从复制的原理
    • 主从复制的优点
    • 准备工作
    • 配置主数据库Master
    • 配置从数据库Slave
    • 测试

MySQL主从复制(一主一从)

什么是主从复制

MySQL主从复制是指数据可以从一个MySQL数据库服务器的主节点复制到一个或多个从节点。主节点记录了所有的写操作,并将这些写操作记录到二进制日志(binary log)中。从节点通过连接主节点,获取并应用这些二进制日志,从而实现数据的复制。

MySQL默认采用异步复制方式,这意味着主节点执行写操作后,并不会等待从节点应用这些操作,而是立即返回给客户端。从节点会异步地接收并应用主节点的二进制日志,以保持与主节点数据的一致性。

从节点可以复制主节点中的所有数据库,也可以选择复制特定的数据库或特定的表。通过配置主节点和从节点的参数,可以进行相应的设置。

主从复制的原理

image-20230714173923619

Master服务器会记录数据的改变,并将这些改变写入二进制binary log日志

Slave服务器会定期检查Master的二进制日志,如果发现改变,就会请求Master发送二进制事件Master会开启一个I/O线程,将二进制事件发送给Slave并保存到从节点本地的中继日志中

从节点会启动SQL线程,从中继日志中读取二进制日志并在本地重放,使从节点的数据和Master节点保持一致

最后,I/O 线程和SQL 线程会进入睡眠状态,等待下一次被唤醒

主从复制的优点

  • 提高可用性:当主节点发生故障时,可以快速切换到从节点,确保数据库的持续可用性

  • 负载均衡:将写的请求分发到主节点上,将读操作分发到从节点上,减轻主节点的负载,提高性能

  • 数据备份:从节点可以用作主节点的备份,以防止数据丢失

准备工作

准备好两台服务器,分别安装MySQL

IP类型
192.168.200.10主节点
192.168.200.20从节点

第一步:修改主机名

修改192.168.200.10的主机名为master

修改192.168.200.20的主机名为slave

[root@master ~]# hostname -I
192.168.200.10 
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# bash
[root@master ~]# 

[root@slave ~]# hostname -I
192.168.200.20 
[root@localhost ~]# hostnamectl set-hostname slave
[root@localhost ~]# bash
[root@slave ~]# 

第二步:下载rpm包

做这一步的时候你要确保你的虚拟机能连通外网,以及要下载wget

这里使用RPM安装MySQL

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[root@master ~]# ls
anaconda-ks.cfg  mysql-community-release-el7-5.noarch.rpm
[root@slave ~]# ls
anaconda-ks.cfg  mysql-community-release-el7-5.noarch.rpm

第三步:安装

[root@master ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm 
[root@slave ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm 
[root@master ~]# yum install -y mysql-server
[root@slave ~]# yum install -y mysql-server

第四步:开启mysql服务并设置开机自启

[root@master ~]# systemctl enable mysqld --now
[root@slave ~]# systemctl enable mysqld --now
# 查看状态
[root@master ~]# systemctl status mysqld  
[root@slave ~]# systemctl status mysqld

第五步:查看是否暴露了端口

[root@master ~]# netstat -tlnp |grep 3306
tcp6       0      0 :::3306          :::*         LISTEN      12093/mysqld  

[root@slave ~]# netstat -tlnp |grep 3306
tcp6       0      0 :::3306         :::*         LISTEN      11574/mysqld

第六步:设置密码并测试登录

[root@master ~]# mysqladmin -u root password "000000"
[root@slave ~]# mysqladmin -u root password "000000"
[root@master ~]# mysql -uroot -p000000
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000';flush privileges;
# root 用户授予所有数据库的所有权限,并设置密码为 '000000'
[root@master ~]# exit;
[root@slave ~]# mysql -uroot -p000000
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000';flush privileges;
[root@slave ~]# exit;

第七步:防火墙放行3306端口

[root@master ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@master ~]# firewall-cmd --reload
success


[root@slave ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@slave ~]# firewall-cmd --reload
success

在SQLyog连接

image-20230714182151902

image-20230714182158683

配置主数据库Master

修改MySQL数据库的配置文件

[root@master ~]# vim /etc/my.cnf
[mysqld]
# 添加如下两行信息
server-id=10
log_bin

重启mysql服务

[root@master ~]# systemctl restart mysqld

登录mysql

显示主节点上的二进制日志文件列表

记住下面的Log_name 和File_size,配置从数据库要用

mysql> show master logs;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| mysqld-bin.000001 |       120 |
+-------------------+-----------+
# Log_name 列显示二进制日志文件的名称
# File_size 列显示二进制日志文件的大小

创建用于复制的账户并授权

授权从节点进行主从复制。执行该命令后,从节点用户 csq 将被授予复制权限,并可以使用密码 000000 连接到主节点进行复制。

mysql> grant replication slave on *.* to 'csq'@'192.168.200.%' identified by '000000';

配置从数据库Slave

修改mysql数据库配置文件

[root@slave ~]# vim /etc/my.cnf
[mysqld]
# 添加如下信息
server-id=20

重启mysql服务

[root@slave ~]# systemctl restart mysqld

登录mysql

配置连接主数据库的信息

# 因为配置主数据库的信息参数有很多当你忘记的时候可以查看如下命令
mysql> help change master to;

image-20230714190102613

我们可以复制稍微修改一下

这里要设置刚刚创建的用户账号信息,以及主数据库的IP

mysql> CHANGE MASTER TO
    ->   MASTER_HOST='192.168.200.10',
    ->   MASTER_USER='csq',
    ->   MASTER_PASSWORD='000000',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='mysqld-bin.000001',
    ->   MASTER_LOG_POS=120;
# MASTER_LOG_FILE 和  MASTER_LOG_POS 
# 这两个参数就是指定主数据库的二进制日志文件名称和位置
# 从节点可以确定从哪个位置开始复制数据

启动从节点的主从复制过程。

mysql> start slave;
# 执行该命令后,从节点将开始连接主节点,并开始复制主节点上的二进制日志

查看从数据库的状态

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event # 表示等待主节点发送事件
                  Master_Host: 192.168.200.10
                  Master_User: csq
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqld-bin.000001
          Read_Master_Log_Pos: 408
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 572
        Relay_Master_Log_File: mysqld-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 408
              Relay_Log_Space: 746
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 10
                  Master_UUID: f6f20d76-222c-11ee-9c60-000c29053974
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0

测试

主数据库创建一个数据库CSQ

mysql> create database CSQ;

从数据库查看

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| CSQ                |
| mysql              |
| performance_schema |
+--------------------+

SQLyog查看

image-20230714191624035

image-20230714191646058

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/753354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAP原则的一致性、可用性、分区容错性

2000年,Eric Brewer在ACM PODC分布式计算原理专题讨论会上首次提出CAP原则。后来,麻省理工学院的两位科学家(赛斯吉尔伯特和南希林奇)证明了CAP原则的正确性。目前,CAP原则被大型公司广泛采纳,例如Amazon公司。 CAP原则又称CAP定…

Unity Obfuscator

官方仓库 学习日期:2023-07-13(防止后续仓库特性或功能更新无对比时间) 目标:本文介绍使用此github库,混淆unity项目的代码,在ILSpy中无法正确反编译。 一、说明 官方说明 配置界面 Features: ControlFlow…

Web 前端 Day 6

函数 <script>// parseInt(200px)// getSum(20, 30) ​ ​function sayHi() {console.log(hello,function!)} ​// 函数必须进行调用&#xff0c;才会执行sayHi()let age 21 ​// 函数要有返回值&#xff0c;一定要添加return关键字&#xff0c;否则返回值为undefinedfu…

五子棋小游戏 java版(代码+详细注释)

游戏展示 这周闲来无事&#xff0c;再来写个五子棋小游戏。基本功能都实现了&#xff0c;包括人人对战、人机对战。界面布局和功能都写的还行&#xff0c;没做到很优秀&#xff0c;但也不算差。如有需要&#xff0c;做个java初学者的课程设计或者自己写着玩玩也都是不错的&…

关于酒吧的八个大实话

1、酒吧风格定位取决于你酒吧面向的客户群体 2、酒吧要根据所在地区人流量开酒吧&#xff0c;大酒吧开在人流量少的可能死于客流量太小&#xff0c;合理的酒吧规模才能生存。3、酒吧客群不能只面向亲朋好友&#xff0c;再好的朋友也不可能天天来照顾你的生意。4、酒吧注重酒吧…

Task管理系统项目

Task管理系统项目 项目开发意义和目的 本项目所开发的系统为Task管理系统。管理信息系统是一个由人和计算机等组成的能够提供信息以支持一个组织机构内部的作业、管理、分析和决策职能的系统。管理信息系统利用计算机的硬件和软件&#xff0c;手工规程.分析、计划、控制和决策用…

浏览器视口

目录 css单位相对单位绝对单位 像素分类物理像素逻辑像素css像素 DPRPPI浏览器视口布局视口视觉视口理想视口 css单位 在css中我们会使用到许多单位&#xff0c;如px&#xff0c;em&#xff0c;rem&#xff0c;vw&#xff0c;vh等等 整体上&#xff0c;我们可以将它们分成两类…

XXE漏洞

XML基础 概述 XML是一种用于标记电子文件使其具有结构性的可扩展标记语言。 XML是一种灵活的语言&#xff0c;类似于HTML语言&#xff0c;但是并没有固定的标签&#xff0c;所有标签都可以自定义&#xff0c;其设计的宗旨是传输数据&#xff0c;而不是像HTML一样显示数据。 …

Cortex-M3与Aurix的堆栈

1. TC397是一个基于ARM Cortex-M3内核的微控制器芯片&#xff0c;其堆栈是由系统初始化代码初始化的。在ARM Cortex-M3架构中&#xff0c;堆栈通常由两个寄存器来管理&#xff1a;主堆栈指针&#xff08;MSP&#xff09;和进程堆栈指针&#xff08;PSP&#xff09;。 1.1 MSP是…

Vue-品牌列表案例

1.案例效果 2.用到的知识点 bootstrap 4.x 相关的知识点&#xff1a; 卡片&#xff08;Card&#xff09;、表单相关(Forms)、按钮(Buttons)、表格(Tables) vue指令与过滤器相关的知识点&#xff1a; 插值表达式、属性绑定、事件绑定、双向数据绑定、修饰符、条件渲染、列表…

云HIS系统使用和操作过程中的常见问题及解决方法

云HIS系统使用和操作过程中的常见问题及解决方法 一、门诊业务中遇到的问题 &#xff08;1&#xff09;门诊医生如何查询往期病人&#xff1f; 答&#xff1a;点击门诊医生站左侧患者列表&#xff0c;在弹出的页面点击已诊分页&#xff0c;在搜索框输入患者姓名&#xff0c;在…

数据库基本操作--------MySQL存储引擎

目录 一、存储引擎概念介绍 二、MySQL常用的存储引擎 1、MyISAM 2.1.1 MyISAM的特点 2.1.2 MyISAM 表支持 3 种不同的存储格式 2.1.3 MyISAM适用的生产场景 2、InnoDB 2.2.1 InnoDB特点 三、查看系统支持的存储引擎 四、查看表使用的存储引擎 方法一 五、修改存储引擎…

「网络编程」应用层协议_ HTTPS协议学习及原理理解

「前言」文章内容大致是应用层协议的HTTPS协议讲解&#xff0c;续上篇HTTP协议。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、HTTPS协议介绍二、什么是"加密"三、为什么要加密四、常见的加密方式五、数据摘要 && 数据指纹六、…

直方图 直方图均衡化

直方图 直方图定义mask操作直方图均衡化均衡化效果自适应直方图均衡化 直方图定义 hist cv2.calcHist(images, channels, mask, histSize, ranges, …) # hist是一个256*1的矩阵&#xff0c;其中每一个值代表了一个灰度值对应的像素点数目 images&#xff1a;原图像格式为ui…

医学图像分割的三视图特征学习

文章目录 Triple-View Feature Learning for Medical Image Segmentation摘要本文方法实验结果 Triple-View Feature Learning for Medical Image Segmentation 摘要 深度学习模型&#xff0c;例如监督编码器-解码器风格的网络&#xff0c;在医学图像分割中表现出很好的性能&…

page_dewarp实现弯曲文本矫正

朋友们&#xff0c;如果你使用ocr&#xff0c;再识别的时候会遇到文本扭曲的问题&#xff0c;为了解决这个问题&#xff0c;需要进行弯曲文本矫正&#xff0c;这里推荐一个开源项目&#xff0c;可以使用上面的功能进行矫正&#xff0c;不过里面可能需要改动一些代码&#xff0c…

Python微服务架构设计使用asyncio提升性能

文章目录 1 引言2 微服务概念3 backend-for-frontend 模式4 实施产品列表 API4.1 实现基础服务4.2 实现BFF服务4.3 重试失败的请求4.4 断路器模式 5 总结 1 引言 许多 Web 应用程序都被构建为单体应用程序&#xff0c;单体应用程序通常是包含多个模块的大中型应用程序&#xf…

clickhouse优化使用clickhouse-keeper替代zookeeper

ClickHouse Keeper 是 ZooKeeper 的替代品&#xff0c;与 ZooKeeper 不同&#xff0c;ClickHouse Keeper 是用 C 编写的&#xff0c;并使用 RAFT 算法实现&#xff0c;该算法允许对读写具有线性化能力。 clikhouse-keeper目的在于替换zookeeper&#xff0c;使用clickhouse后&am…

【python】从Ensembl上,根据Array HumanMethylation450甲基化探针cg编号(比如cg13788592)获取位置

文章目录 1. 写在前面2. 手动查找和探索过程从UCSC查找从Ensembl查找 3. 代码实现 1. 写在前面 一篇专利 1 中提到多种癌种及对应的特异性CpG位点&#xff0c;想获取对应cg位点具体的位置或序列。专利中的一组CpG markers如下&#xff1a; 需求就是&#xff1a;将这些cg编号作…

Learning Enriched Features for Fast Image Restoration and Enhancement 论文阅读笔记

这是2022年TPAMI上发表的大名鼎鼎的MIRNetv2&#xff0c;是一个通用的图像修复和图像质量增强模型&#xff0c;核心是一个多尺度的网络 网络结构整体是残差的递归&#xff0c;不断把残差展开可以看到是一些残差块的堆叠。核心是多尺度的MRB。网络用的损失函数朴实无华&#x…