MySQL主从复制与读写分离实验

news2024/9/30 23:26:11

实验一、MySQL主从服务器搭建

实验前准备
Master服务器:192.168.188.14   mysql5.7
Slave服务器1:192.168.188.15   mysql5.7
Slave服务器2:192.168.188.16   mysql5.7
关闭虚拟机防火墙
systemctl stop firewalld
setenforce 0

  1. 主服务器准备
    1. 安装相关软件
      yum -y install ntp
    2. 修改ntp配置
      vim /etc/ntp.conf
      在末尾添加以下内容:
      server 127.127.1.0
      fudge 127.127.1.0 stratum 8


      启动服务
      service ntpd start
  2. 从服务器准备
    1. 安装相关软件
      yum -y install ntp ntpdate -y
    2. 进行时间同步
      /usr/sbin/ntpdate 192.168.188.14
      设置定时任务,每30分钟同步一次时间
      crontab -e
      */30 * * * * /usr/sbin/ntpdate 192.168.188.14
  3. 主服务器的mysql配置
    1. 修改mysql配置文件
      vim /etc/my.cnf
      添加以下内容:
      server-id = 11
      log-bin=master-bin
      binlog_format = MIXED
      log-slave-updates=true

      重启mysql服务
      systemctl restart mysqld
    2. 给myslave用户赋权,从节点可以通过myslave用户获取需要复制的数据
      mysql -uroot -p
       
      grant replication slave on *.* to 'myslave'@'192.168.188.%' identified by ‘123456’;
      flush privileges;

      查看节点状态
      show master status;
      File显示日志名,Position显示偏移量

  4. 从服务器的mysql配置
    1. 修改mysql配置文件
      vim /etc/my.cnf
      server-id = 22   # 服务器id,各不相同
      relay-log=relay-log-bin  # 开启中继日志
      relay-log-index=slave-relay-bin.index   # 定义中继日志的位置和名称
      relay_log_recovery = 1  # slave宕机后,如果relay-log损坏,会放弃所有还未执行的relay-log,重新从master上获取

      另一台从服务器的配置,只有id改了

      重启mysql服务
      systemctl restart mysqld
    2. 进入数据库配置同步
      mysql -uroot -p
      change master to
      master_host='192.168.188.14',
      master_user='myslave',master_password='123456',
      master_log_file='master-bin.000001',
      master_log_pos=604;

    3. 启动slave节点
      start slave;
      查看状态,如果能看到Slave_IO_Running: Yes和Slave_SQL_Running: Yes,说明没问题
      show slave status\G
  5. 验证
    1. 在主MySQL服务器上创建一个数据库
      create database db_test;
      在从服务器上能看到就说明没问题
      show databases;

实验一点五、MySQL读写分离实验

实验前准备
该实验建立在实验一基础上,使用Amoeba对数据库的操作进行读写分离,读操作将会分发到两个从MySQL服务器上,写操作则会分发到主MySQL服务器上
Master服务器:192.168.188.14     mysql5.7
Slave服务器1:192.168.188.15     mysql5.7
Slave服务器2:192.168.188.16     mysql5.7
Amoeba服务器:192.168.188.13    jdk1.6、Amoeba(jdk不建议版本太高)
客户端:192.168.188.12

  1. 安装Java环境
    1. cd /opt/
      cp jdk-6u14-linux-x64.bin /usr/local/
      cd /usr/local/
      我用的是编译好的文件,所以直接赋权执行
      chmod +x jdk-6u14-linux-x64
      ./jdk-6u14-linux-x64.bin
    2. 优化Java环境
      mv jdk1.6.0_14/ /usr/local/jdk1.6
      vim /etc/profile
      在最后添加路径
      export JAVA_HOME=/usr/local/jdk1.6
      export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
      export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
      export AMOEBA_HOME=/usr/local/amoeba
      export PATH=$PATH:$AMOEBA_HOME/bin

      source /etc/profile
      看一下Java版本,三个java说明没问题
      java -version
  2. 安装amoeba
    1. mkdir /usr/local/amoeba
      tar zxvf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
      chmod -R 755 /usr/local/amoeba/
      /usr/local/amoeba/bin/amoeba
      如果显示amoeba start|stop 说明没问题
  3. 配置amoeba读写分离
    1. 首先需要在三台服务器的MySQL上开放权限给amoeba
      grant all on *.* to 'amo'@'192.168.188.%' identified by '123456';
    2. 修改amoeba配置文件
      cd /usr/local/amoeba/conf/
      做个备份
      cp amoeba.xml amoeba.xml.bak
      修改配置文件
      vim amoeba.xml
      主要需要修改以下内容

    3. 修改数据库配置文件
      先备份
      cp dbServers.xml dbServers.xml.bak
      修改文件
      vim dbServers.xml
      主要改以下内容


      后台运行
      /usr/local/amoeba/bin/amoeba start&
      ctrl+c返回
      查看一下端口是否正常使用,主要是8066是否开启
      netstat -anpt | grep java
  4. 测试读写分离
    1. 客户端上安装mariadb
      yum -y install mariadb-server mariadb
      启动
      systemctl start mariadb
      通过amoeba代理服务器访问mysql
      mysql -uamoeba -p123456 -h192.168.188.13 -P8066(端口号前面是大写P!千万别写错)
    2. 在主服务器上新建表
      use db_test;
      create table test (id int(10),name varchar(10),address varchar(20));
      两台从服务器上先关闭同步
      stop slave;
      在从服务器1上往新表中插入数据
      use db_test;
      insert into test values('1','zhangsan','this_is_slave1');
      在从服务器2上往新表中插入数据
      use db_test;
      insert into test values('2','lisi','this_is_slave2');
      在主服务器上往新表中插入数据
      use db_test;
      insert into test values('3','wangwu','this_is_master');
    3. 在客户端上查询新表
      use db_test;
      select * from test;
      为什么是这样的结果?首先因为我们关闭了同步,所以主服务器写入的数据无法同步到从服务器,同时因为我们设定从服务器用来读,所以当我们查询时就会去找两台从服务器,所以就能看到这两台服务器上的数据,而且是独立分开的,因为我们是直接往从服务器上插入数据,从服务器上的数据本身就无法同步,在工作中是因为他们同时复制主服务器的数据才能保持一致。
    4. 如果我们在上一步基础上,在客户端上往数据库插入新数据
      use db_test;
      insert into test values('4','qianqi','this_is_client');
      在主服务器上查询的结果如下

      两台从服务器上查询结果如下


      设定上主服务器用来写,所以我们在客户端上写入的数据会直接保存在主服务器上,因为没开同步的原因,从服务器无法复制主服务器上的数据,所以从服务器上的数据没变。
      那么我们在从服务器上打开同步
      start slave;
      再查询,立马就有了主服务器上的数据

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

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

相关文章

微搭低代码实现登录注册功能

目录 1 创建用户数据源2 实现登录逻辑3 搭建登录页面4 设置登录框5 实现登录的逻辑6 用户注册总结 原来产品在创建应用的时候可以创建模型应用,模型应用对应我们小程序的后端。最新的更新已经将模型应用的能力下线,那我们不得不自己实现一下后端的逻辑。…

【报错栏】(vue)Module not found: Error: Can‘t resolve ‘element-ui‘ in xxx

Module not found: Error: Cant resolve element-ui in xxx 报错原因是: 未安装 element-ui 依赖 解决: npm install element-ui 运行

智能优化算法应用:基于象群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于象群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于象群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.象群算法4.实验参数设定5.算法结果6.参考文献7.MA…

【SpringBoot】FreeMarker视图渲染

目录 一、FreeMarker 简介 1.1 什么是FreeMarker? 1.2 Freemarker模板组成部分 1.3 为什么要使用FreeMarker 二、Springboot集成FreeMarker 2.1 配置 2.2 数据类型 2.2.1 字符串 2.2.2 数值 2.2.3 布尔值 2.2.4 日期 2.3 常见指令 2.3.2 assign 2.3…

国产仿日立高速离心瓶250ml/500ml/1000ml日立通用离心杯

国产仿日立高速离心瓶250ml/500ml/1000ml日立离心机通用离心杯 250ml高速离心瓶 货号:ZY1136229 材质:PPCO 外径:61 mm 高度:130mm 500ml高速离心瓶 货号:ZY1136219 材质:PPCO 外径:73m…

大模型应用_FastGPT

1 功能 整体功能,想解决什么问题 官方说明:FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!个人体会…

【map】【动态规划】LeetCode2713:矩阵中严格递增的单元格数

本文涉及的基础知识点 二分查找算法合集 题目 给你一个下标从 1 开始、大小为 m x n 的整数矩阵 mat,你可以选择任一单元格作为 起始单元格 。 从起始单元格出发,你可以移动到 同一行或同一列 中的任何其他单元格,但前提是目标单元格的值 …

UML-认识6种箭头(画类图无烦恼)

文章目录 一、背景二、箭头详解2.1 泛化(Generalization)2.2 实现(Realize)2.3 依赖(Dependency)2.4 关联(Association)2.5 聚合(Aggregation)2.6 组合&#…

npm安装,idea中启动vue失败

node 设置配置之后,要查询时,会从.npmrc中读取路径 .npmrc自己创建的(默认情况下.npmrc会创建在C盘中) 我创建的在D:\studay-and-working\node16.14\node_modules\npm中 指定.npmrc文件,因为默认会访问C盘的.npmrc文件…

现代雷达车载应用——第2章 汽车雷达系统原理 2.4节 雷达波形和信号处理

经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.4 雷达波形和信号处理 对于连续波雷达来说,波形决定了其基本信号处理流程以及一些关键功能。本节将以FMCW波形为例,讨论信号…

# 和 $ 的区别①

# 和 $ 都是为了获取变量的值 # 和 $ 区别 : 使用 # 查询 id 为 1 的内容 如果看不懂代码,就去看<<Mybatis 的操作(结合上文)续集>>,我这里为了简练一点就不多解释了 Select("select * from userInfo where id #{id}")UserInfo selectOne(Integer id…

2023版本QT学习记录 -1- 手写登录注册界面(信号与槽)

登录界面图片 登录界面设计 分别创建如下图的&#xff0c;一个文本框&#xff0c;两个输入框&#xff0c;两个按键 注册界面图片 注册界面设计 分别创建如下图的&#xff0c;一个文本框&#xff0c;两个输入框&#xff0c;两个按键 设计子框&#xff08;也就是注册页面&…

机器视觉系统选型-线光源分类及应用场景

标准线光源 从线性LED的发光面照射漫射光 玻璃划痕检测印刷字符检测手机屏幕检测PCB板检测 高亮线光源 从线性LED的发光面照射高亮度漫射光高速流水线检测表面印刷检测表面缺陷检测 集光型线光源 从线性LED的发光面照射直射光划痕缺陷检测印刷字符检测布料检测 同轴线光源 与相…

做数据分析为何要学统计学(2)——如何估计总体概率分布

我们可以通过手头掌握的样本来估计总体的概率分布。这个过程由以下步骤组成。 第一步&#xff0c;我们采用Seaborn软件的histplot函数建立核密度图&#xff08;一种概率密度图&#xff09;。 import numpy as np #输入样本数据 xnp.array([2.12906357, 0.72736725, 1.0515282…

Simple Water Caustic Pattern In Unity ShaderGpaph

shadertoy上有各种神奇的效果&#xff0c;以我的见识根本想象不到这些是怎么弄出来的。 不过不会做至少可以先会用。 这篇文章抓取一个shadertoy的示例以制作一个测试效果。 参考这篇shadertoy&#xff0c;使用自定义节点装填hlsl的noise代码 Shader - Shadertoy BETA 首先使…

使用FluentAvalonia组件库快速完成Avalonia前端开发

前言 工欲善其事必先利其器,前面我们花了几篇文章介绍了Avalonia框架以及如何在Avalonia框架下面使用PrismAvalonia完成MVV模式的开发。今天我们将介绍一款重磅级的Avalonia前端组件库,里面封装了我们开发中常用的组件,这样就不用我们自己再写组件了。专注业务功能开发,提…

tesseract-ocr安装使用

描述&#xff1a; 在centos上安装 tesseract 并在springboot项目中使用 步骤一&#xff1a;安装 确认使用的版本tesseract和test4j版本需要匹配&#xff0c;这里选择最新版 tesseract5.3.3 &#xff0c;test4j 5.9.0 版本匹配可查看 Releases nguyenq/tess4j GitHub 或…

「Leetcode」滑动窗口—长度最小的子数组

&#x1f4bb;文章目录 &#x1f4c4;题目✏️题目解析 & 思路&#x1f4d3;总结 &#x1f4c4;题目 209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …,…

deepstream-python安装

​ 安装deepstream-docker 在这边文章中deepstream-docker详细介绍了如何在Ubuntu下安装deepstream-docker&#xff0c;安装完成之后&#xff0c;为了快速入门deepstream&#xff0c;我们可以安装deepstream-python库&#xff0c;通过阅读相应的例子来快速搭建一个应用。 安…

【Hive】

一、Hive是什么 Hive是一款建立在Hadoop之上的开源数据仓库系统&#xff0c;将Hadoop文件中的结构化、半结构化数据文件映射成一张数据库表&#xff0c;同时提供了一种类SQL语言&#xff08;HQL&#xff09;&#xff0c;用于访问和分析存在Hadoop中的大型数据集。Hive的核心是将…