首页 > 数据库 >Mysql主从复制实战(1主3从)

Mysql主从复制实战(1主3从)

时间:2024-04-04 23:58:22浏览次数:30  
标签:实战 主从复制 二进制 master Mysql 服务器 日志 节点

文章目录

主从复制

MySQL主从复制是一种数据库复制技术,它允许一个MySQL数据库服务器将数据更新操作(增删改)自动复制到一个或多个其他从数据库服务器。这种技术可以提高数据库的可用性、扩展性和性能。

实现原理

主从复制的基本原理可以分为以下几个步骤:
在这里插入图片描述

  1. 主服务器将数据更新操作记录在二进制日志(Binary Log)中。二进制日志包括两种类型:
    语句式日志(Statement-Based Logging):记录执行的SQL语句。
    行式日志(Row-Based Logging):记录实际发生的数据变更。
  2. 从服务器定期从主服务器获取二进制日志。从服务器通过一个名为I/O线程的后台进程连接到主服务器,请求二进制日志的更新。主服务器将更新发送给从服务器。
  3. 从服务器将获取到的二进制日志记录在中继日志(Relay Log)中。中继日志是从服务器上的一个临时存储区域,用于存储从主服务器获取到的二进制日志,以便SQL线程可以顺序地执行它们。
  4. 从服务器通过一个名为SQL线程的后台进程将中继日志中的数据更新操作重放到从服务器的数据库中。SQL线程会根据中继日志中的记录,执行相应的数据更新操作,以保持从服务器数据库的一致性。

主从复制的优点

  • 负载均衡:通过将读操作分散到从服务器上,可以减轻主服务器的负担,提高整体性能。
  • 数据备份:从服务器可以作为主服务器的备份,当主服务器出现故障时,可以快速切换到从服务器。
  • 扩展性:当数据量增大时,可以通过增加从服务器来提高数据库的处理能力。

主从复制的分类

  • 全同步复制:这种模式下,主服务器在提交事务之前,需要等待所有从服务器都确认已经接收到并完成了数据更改。
  • 异步复制:在这种模式下,主服务器将数据更改写入二进制日志,并立即返回成功给客户端。然后,从服务器异步地读取主服务器的二进制日志,并将其应用于自身的数据库中。由于是异步的,所以从服务器可能会有一定的延迟。
  • 半同步复制:这是复制模式主要用于提高数据可靠性。在这种模式下,主服务器将数据更改写入二进制日志,并等待至少一个从服务器确认已经接收到数据更改,然后返回成功给客户端。从服务器接收到数据后,将其应用于自身的数据库。半同步复制相比异步复制,减少了数据丢失的可能性。

实现1主3从的架构

我准备了1个本地服务器和3个云服务器,其中一台云服务器作为主库,其他三台作为从库。

节点角色IP
节点1主服务器123.207.5.157
节点2从服务器121.37.212.191
节点3从服务器8.134.195.226
节点4从服务器192.168.1.2

(1)主节点执行,配置主服务器节点1的配置文件:
启用二进制日志,并设置唯一的服务器ID。

vim /etc/my.cnf

添加以下内容

server-id=9 #要求每个服务器的id都不一样
log-bin=master-a-bin #日志文件名称
binlog-format=ROW #二进制日志格式,有row,statement,mixed三种类型,主从的配置需要一致
binlog-do-db=shop-seckill #需要同步的数据库名称

创建3个用于复制的用户,并授予复制权限。

create user 'root'@'121.37.212.191' identified by '密码'; 
create user 'root'@'8.134.195.226' identified by '密码'; 
create user 'root'@'192.168.1.2' identified by '密码'; 
grant replication slave on *.* to 'root'@'121.37.212.191' ;
grant replication slave on *.* to 'root'@'8.134.195.226' ;
grant replication slave on *.* to 'root'@'192.168.1.2' ;

重启MySQL服务

service mysql start

(2)从节点执行,在3个从节点都要执行,配置从服务器(节点2,3和节点4一样的操作,只需要server-id都不一样即可):
修改my.cnf配置文件,设置唯一的服务器ID和主服务器的信息。

vim /etc/my.cnf

添加以下内容

[mysqld]
 basedir=/usr/local/mysql8
 datadir=/usr/local/mysql8/data
 socket=/tmp/mysql.sock
 character-set-server=utf8
 default_authentication_plugin=mysql_native_password
 port=3306

log-bin=slave-a-bin
binlog-format=ROW
server-id=4   #这里需要保证每个服务器的server-id都不一样

重启MySQL服务

service mysql start

(3)主节点执行,查看主节点的binlog文件名以及偏移量的位置

show master status;

在这里插入图片描述从节点需要知道复制主节点的哪个文件名以及具体位置,所以需要记录主节点的binlog文件名以及偏移量的位置
(4)从节点执行,在3个从节点都要执行,从节点指定主服务器信息

change master to master_host='123.207.5.157',master_user='账户名',master_password='密码',master_log_file='master-a-bin.000001',master_log_pos=13694;

注意:master_host 是主节点ip地址,master_user 和 master_password主节点的账号和密码,master_log_file 和master_log_pos 是步骤(3)查询出来的File文件名和Position偏移量位置。
在这里插入图片描述启动从节点

start slave;

在这里插入图片描述
查看从节点状态

show slave status \G;

在这里插入图片描述Slave_IO_Running 线程和 Slave_SQL_Running线程都为YES说明主从复制配置成功。
(5)主节点查看从节点的个数,有三个从节点

SELECT HOST FROM information_schema.processlist WHERE COMMAND = 'Binlog Dump';

这个查询语句会返回当前连接到主服务器的从服务器的IP地址。COMMAND列的值为Binlog Dump表示该连接是从服务器与主服务器之间的复制连接。
在这里插入图片描述或者直接查看从节点server-id

show slave hosts;

在这里插入图片描述

验证主从复制

(1)在主节点上创建数据库shop-sekcill
在这里插入图片描述
(2)导入sql运行文件,就是一些创建表的sql语句
在这里插入图片描述
(3)从节点查看数据库,sql语句执行成功,说明主从同步完成。
在这里插入图片描述

标签:实战,主从复制,二进制,master,Mysql,服务器,日志,节点
From: https://blog.csdn.net/weixin_42828342/article/details/137384372

相关文章

  • 【附源码】计算机毕业设计中医保健网站(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义中医保健网站是一个提供中医养生、保健知识的在线平台。随着人们生活水平的提高,越来越多的人开始关注自己的身体健康,而中医作为中国传统医学的一种,具有悠久的历史......
  • 【附源码】计算机毕业设计长护险管理系统的设计与实现(java+springboot+mysql+mybatis+
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义长护险管理系统是一种基于互联网技术的信息化管理平台,旨在提高长期护理保险(简称“长护险”)的管理效率和服务质量。随着人口老龄化的加剧和社会保障体系的完善,长护......
  • ElasticSearch 实战:ElasticSearch索引操作
    Elasticsearch实战:Elasticsearch索引操作在使用Elasticsearch进行数据管理时,索引操作是核心的一部分。本篇将详细介绍如何进行索引的创建、查看、更新(包括映射修改)、关闭与开启、删除等操作,以及如何进行索引模板设置以简化索引管理。**1.创建索引创建索引可以通过发......
  • MySQL 索引详解
    为什么要使用索引?通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快数据的检索速度(大大减少的检索的数据量), 这也是创建索引的最主要的原因。帮助服务器避免排序和临时表。将随机IO变为顺序IO可以加速表和表之间的连接,特别是在实现数据的参考完整......
  • 【保姆级讲解下MySQL中的drop、truncate和delete的区别】
    ......
  • springboot security对接mysql数据库
    首先要添加springbootsecurity依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>3.2.4</version></dependenc......
  • 【粉丝福利社】《游戏力:竞技游戏设计实战教程》(文末送书-进行中)
    ......
  • Redis 的主从复制、哨兵
    目录一.Redis主从复制1.介绍2.作用3.流程4.搭建Redis主从复制 安装redis修改master的Redis配置文件修改slave的Redis配置文件验证主从效果二.Redis哨兵模式1.介绍2.原理3.哨兵模式的作用4.工作流程4.1故障转移机制4.2主节点的选举5.搭......
  • MySQL面试题系列-6
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。数据库的三范式数据库的三范式......
  • MySQL面试题系列-7
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。mysql的索引覆盖是什么?在MySQL......