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
关闭虚拟机防火墙
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;
      再查询,立马就有了主服务器上的数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线性回归问题

目录 一、线性回归关键思想 1、线性模型 2、基础优化算法 二、线性回归的从零开始实现 1、生成数据集 2、读取数据集 3、初始化模型参数 4、定义模型 5、定义损失函数 6、定义优化算法 7、训练 三、线性回归的简洁实现 1、生成数据集 2、读取数据集 3、定义模型…

Java集合大总结——Map的简单使用

现实需求 现实生活与开发中,我们常会看到这样的一类集合:用户ID与账户信息、学生姓名与考试成绩、IP地址与主机名等,这种一一对应的关系,就称作映射。Java提供了专门的集合框架用来存储这种映射关系的对象,即java.uti…

Cobalt Strike四种提权方法

简介 Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器。自3.0以后已经不在使用Metasploit框架而作为一个独立的平台使用,分为客户端与服务端,服务端是一个,客户端可以有多个,非常适合团队协同作战&a…

【UML】组件图中的供需接口与面向对象中的接口

UML(统一建模语言)组件图中的“供接口”(Provided Interface)和“需接口”(Required Interface)与面向对象编程中的接口概念有关联,但它们在应用上有所区别。 下面解释两者的关系: …

Restormer技术点小结

1. 解决cnn的不足: 1)感受野有限 2)输入尺寸固定 2. 解决transform的不足: 1)计算复杂度随着空间分辨率的增加而二次增长 3. 优势结构:MDTA(Multi-Dconv Head Transposed Attention)和GDFN( Gated-Dco…

Redis新数据类型-Bitmaps

目录 Bitmaps 简介 命令 1. setbit (1) 格式 (2) 实例 2. getbit (1) 格式 (2) 实例 3. bitcount (1) 格式 (2) 实例 4. bitop (1) 格式 (2) 实例 我的其他博客 Bitmaps 简介 Bitmaps 是 Redis 的一种新数据类型,它是一种用于存储位信息的数据结构&…

Nodejs 第二十二章(脚手架)

编写自己的脚手架 那什么是脚手架? 例如:vue-cli Angular CLI Create React App 编写自己的脚手架是指创建一个定制化的工具,用于快速生成项目的基础结构和代码文件,以及提供一些常用的命令和功能。通过编写自己的脚手架,你可以…

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

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

H5新特性之h5的新标签 以及 全局属性contenteditable

H5新特性之h5的新标签 以及 全局属性contenteditable 1. 前言1.1 HTML5 的输入(input)类型 2. html5的新标签2.1 数据列表元素(datalist)2.2 进度指示标签()2.3 meter 标签2.4 summary标签2.5 mark标签2.6 …

vcpkg下载及安装

文章目录 vcpkg是什么vcpkg的优势Windows环境下的下载及安装1.下载 Linux环境下的下载及安装常用命令介绍1.1.1 设置默认安装的平台1.1.2可选步骤,将vcpkg与Visual Studio配合使用(需要管理员权限)1.1.3 软件包升级1.1.4 查找安装软件包1.1.5…

【电子取证:FTK IMAGER 篇】DD、E01系统镜像动态仿真

​ 文章目录 【电子取证:FTK Imager 篇】DD、E01系统镜像动态仿真一、DD、E01系统镜像动态仿真 (一)使用到的软件 1、FTK Imager (v4.5.0.3)2、VMware Workstation 15 Pro (v15.5.2)(二)FTK Imager 挂载镜像 1、选择 …

Dual-MVSNet/DMVSNet论文精读

本文是Constraining Depth Map Geometry for Multi-View Stereo: A Dual-Depth Approach with Saddle-shaped Depth Cells的阅读记录 1. 问题引入 使用基于学习的多视点立体(MVS)技术重建场景涉及两个阶段:深度预测[【主要在于优化此过程】和…

大数据企业如何使用IP代理进行数据抓取

目录 一、引言 二、IP代理概述 三、为什么大数据企业需要使用IP代理 四、使用IP代理进行数据抓取的步骤 1、获取可用的代理IP 2、配置代理IP 3、设置请求头部信息 4、开始数据抓取 5、错误处理和重试 五、IP代理的注意事项 六、总结 一、引言 随着互联网的快速发展…

flex布局,flex-direction, justify content, align-content

目录 flex-direction justify content&#xff1a; flex-wrap align-items align-content flex-flow flex:1 align-self order属性定义项目排列顺序 已知html文件为&#xff1a; <div class"given"><span>1</span><span>2</span…

Axure元件的介绍使用以及登录界面

一、Axure元件介绍 简介&#xff1a; Axure元件是一种功能强大的设计工具&#xff0c;专门用于用户体验设计和交互设计。它可以帮助设计师创建可交互的原型&#xff0c;并实现各种界面元素的设计和布局。 Axure元件的基本特点包括&#xff1a; 多样性&#xff1a;Axure元件包括…

鸿蒙应用开发(二)环境搭建

开发流程 IDE下载 首先下载HUAWEI DevEco Studio&#xff0c;介绍首次启动DevEco Studio的配置向导&#xff1a; 运行已安装的DevEco Studio&#xff0c;首次使用&#xff0c;请选择Do not import settings&#xff0c;单击OK。安装Node.js与ohpm。node.js 是基于 V8 引擎构…

云渲染怎么提升效果图的画质?云渲染对效果图未来影响

在当今高速发展的视觉设计行业中&#xff0c;高质量的效果图不仅是展示设计成果的重要手段&#xff0c;也是设计沟通和营销的关键。无论是建筑设计、室内设计还是工业样品的视觉化&#xff0c;效果图的精细程度与渲染速度对项目的成功至关重要。对于许多追求卓越和效率的设计师…

数据库是否部署在 Docker 容器里,在这里你能找到答案

前言 近2年Docker非常的火热&#xff0c;各位开发者恨不得把所有的应用、软件都部署在Docker容器中&#xff0c;但是您确定也要把数据库也部署的容器中吗&#xff1f; 这个问题不是子虚乌有&#xff0c;因为在网上能够找到很多各种操作手册和视频教程&#xff0c;小编整理了一…

Antv/G2 折线图 DataSet 数据处理过滤指定字段

DataSet 文档 G2 3.2 DataSet 文档 Demo&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><m…

【力扣】2.两数相加

2.两数相加 这是第二题&#xff0c;还行豁~。 题解&#xff1a; 首先就是对题目的理解。这里你要知道两链表中数字的排列都是逆序的&#xff0c;也就是说示例一中2-4-3他原本的数字应该是342。同理可得下面链表的意思&#xff0c;二者相加所得到的结果也是逆序的&#xff0c;…