从小白到大神之路之学习运维第48天---第三阶段----mysql数据库的主从复制和读写分离

news2024/12/23 0:00:06

第三阶段基础

时  间:2023年6月28日

参加人:全班人员

内  容:

mysql主从复制和读写分离

目录

一、mysql基础

(一)优点:

(二)类型:

(三)支持的复制方式:

二、mysql主从复制部署

(一)环境配置

1.关闭防火墙

2.时间同步

3.安装mariadb数据库

主库配置:

步骤一:修改配置文件 vim /etc/my.cnf

步骤二:启动数据库并登录

步骤三:创建复制账户

步骤四:获得Master DB的相关信息

从库1配置:

步骤一:修改配置文件

步骤二:启动服务并登录

步骤三:进行主从配置

主从验证:

从库2配置:

步骤一:修改配置文件

步骤二:启动服务并登录

步骤三:进行主从配置

主从验证:

三、mysql读写分离配置

(一)概  念

(二)实现方法

(三)安装java环境

1.降版本(只支持1.5/1.6版本)

2.rz上传

3.给执行权限

4.运行

5.移动

6.添加变量

(四)安装amoeba

1.rz

2.创建目录

3.解压

4.给执行权限

(五)配置amoeba

1.在Master、Slave1、Slave2服务器中

配置Amoeba的访问授权

2.修改配置文件(用户连接amoeba的设置)

3.修改配置文件(主从数据服务器对ameoba的设置)

4.启动服务放入后台

客户端配置:

步骤一:安装mariadb

步骤二:登录amoeba

结果验证:(写入是主,读取是从)

断开主从复制

开启主从复制


一、mysql基础

(一)优点:

1.安全;2.可靠; 3.实时数据

(二)类型:

异步复制:不可靠;

主库在执行完客户端提交地事务后会立刻将结果返回给客户端,并不关心从库是否已经接受并处理了事务;

全部复制:耗时长;

指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端;

半同步复制:比异步可靠比全部时间短;

主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接受到并写到relay log中才返回给客户端。

(三)支持的复制方式:

基于SQL语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的SQL语句,效率比较高

基于行的复制:主服务器把表的行变化作为事件写入到二进制日志中,主服务器把代表了行变化的事件复制到从服务器中

混合模式复制:先采用基于语句的复制,一旦发现基于语句无法精确复制时,再采用行

二、mysql主从复制部署

(一)环境配置

五台服务器:

192.168.59.137     huyang1     主

192.168.59.140    huyang2     从1

192.168.59.142     huyang3      从2

192.168.59.138     huyang0      Amoeba

192.168.59.143     localhost    客户

搭建主从复制(huyang1,huyang2,huyang3)

1.关闭防火墙

systemctl stop firewalld

iptables -F

setenforce 0

2.时间同步

yum -y install  ntp

永久配置:vim  /etc/ntp.conf

server  192.168.59.137

真机,有网,可以同步世界时间

fudge   192.168.1.1   stratun  8

systemctl start  ntpd    开启

systemctl  enable  ntpd  开机自启

临时配置:或者让其他主机同步指定的主机

yum -y install  ntpdate

ntpdate    192.168.1.2

可以写入计划任务,定时执行

3.安装mariadb数据库

yum -y install mariadb  mariadb-server

主库配置:

步骤一:修改配置文件 vim /etc/my.cnf

server-id=1

log-bin=mysql-binlog

log-slave-updates=true

步骤二:启动数据库并登录

systemctl restart mariadb

mysql

步骤三:创建复制账户

grant replication slave on *.* to

'myslave'@'192.168.59.%' identified by '123456';

刷新

flush privileges;

步骤四:获得Master DB的相关信息

 show master status;

从库1配置:

步骤一:修改配置文件

vim   /etc/my.cnf

server-id=2

编号

relay-log=relay-log-bin

中继日志

relay-log-index=slave-relay-bin.index

定义日志索引,主库上有,自己没有,定义之后,开启有

步骤二:启动服务并登录

systemctl restart mariadb

mysql

步骤三:进行主从配置

1.停止从服务stop  slave;

2.授权

change master to

master_host='192.168.59.137',

主服务器IP

master_user='myslave',

主服务器授权的用户

master_password='123456',

授权的密码

master_log_file='mysql-binlog.000001',

开始同步的二进制文件名字

master_log_pos=563;

开始同步位置

3.开始从服务start slave;

4.查看状态show  slave   status\G

主从验证:

主:create databases huyang1;

从:show databases;   

结果:出现huayng1数据库,主从复制配置成功

从库2配置:

步骤一:修改配置文件

vim   /etc/my.cnf

server-id=3

编号

relay-log=relay-log-bin

中继日志

relay-log-index=slave-relay-bin.index

定义日志索引,主库上有,自己没有,定义之后,开启有

步骤二:启动服务并登录

systemctl restart mariadb

mysql

步骤三:进行主从配置

1.停止从服务stop  slave;

2.授权

change master to

master_host='192.168.59.137',

主服务器IP

master_user='myslave',

主服务器授权的用户

master_password='123456',

授权的密码

master_log_file='mysql-binlog.000001',

开始同步的二进制文件名字

master_log_pos=563;

开始同步位置

3.开始从服务start slave;

4.查看状态show  slave   status\G

主从验证:

主:create databases huyang2;

从1:show databases;  

从2: show databases;  

结果:从1、从2均出现huayng2数据库,

主从复制配置成功

三、mysql读写分离配置

(一)  

基本的原理让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变更新同步到集群中的从数据库

1.只在主服务器上写,只在从服务器上读;

2.登录amoeba服务,他本身连接主和从数据库,根据操作不同调用相应数据库,和负载均衡相似;

3.至少五台主机,一台主数据库,两台以上从数据库,一台maoeba服务器,一个客户端;

4.负载均衡,高可用性,SQL过滤,读写分离。

 8066

(二)实现方法

基于程序代码内部实现在代码中根据select,insert进行路由分类,这类方法也是目前大型生产环境应用最广泛的,优点是性能最好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支,缺点是需要开发人员来实现,运维人员无从下手;

基于中间代理层实现代理一般位于客户端和数据库服务器之间,代理服务器接到客户端请求后通过判断转发到后端数据库,代表性程序:

(1)mysql-proxy为mysql开发早期开源项目,通过其自带的lua脚本进行SQL判断,虽然是mysql的官方产品,但是mysql官方不建议将其应用到生产环境;

(2)Amoeba(变形虫)该程序由java语言及逆行开发,阿里巴巴将其应用于生产环境,它不支持事物和存储过程。

(三)安装java环境

1.降版本(只支持1.5/1.6版本)

查看当前的java版本,为1.8,找到存放位置并删除

2.rz上传

jdk-6u31-linux-x64.bin

本身是一个二进制文件,脚本

省略了编译的过程,直接给执行权限安装

3.给执行权限

chmod +x jdk-6u31-linux-x64.bin

4.运行

./jdk-6u31-linux-x64.bin

中途回车

命令不是存在一个目录里

5.移动

 mv jdk1.6.0_31/ /usr/local/jdk1.6

6.添加变量

 vim /etc/profil

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin

设置变量

export AMOEBA_HOME=/usr/Tocal/amoeba

export PATH=SPATH:$AMOEBA_HOME/bin

source /etc/profile

java -version

可以发现,此时java版本已经降到1.6版本

(四)安装amoeba

1.rz

amoeba-mysql-binary-2.2.0.tar

2.创建目录

mkdir /usr/local/amoeba

3.解压

 tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

4.给执行权限

 chmod -R 755 /usr/local/amoeba/

(五)配置amoeba

1.在Master、Slave1、Slave2服务器中

配置Amoeba的访问授权

grant all on *.* to 'test'@'192.168.59.%' identified by '123.com';

flush privileges;

2.修改配置文件(用户连接amoeba的设置)

vim /usr/local/amoeba/conf/amoeba.xml

用户连接amoeba的设置

30       <property name="user">amoeba</property>

用户名

32       <property

name="password">123456</property>

连接amaeba的密码

115     <property

name="defaultPool">master</property>

默认池

118    <property

name="writePool">master</property>

写的池

119    <property

name="readPool">slaves</property>

读的池

可以发现此时是被注释的,需要打开

3.修改配置文件(主从数据服务器对ameoba的设置)

vim /usr/local/amoeba/conf/dbServers.xml

22    端口号

<property name="port">3306</property>

23   连接mysql的用户,MySQl授权的用户

<property name="schema">test</property>

这个用户可以不改,如果数据库设置的其他用户的话,只要下面的用户名是设置的用户即可

否则可以登录但是查不到数据显示断开数据连接

26    登录用户和授权用户一致

<property name="user">test</property>

29    MySQL授权的密码

<property name="password">123.com</property>

45    定义master   48   master的IP地址

<dbServer name="master"  parent="abstractServer">

 <property name="ipAddress">192.168.200.111</property>

52-56 定义从和从IP,几个从数据库几段

<dbServer name="slave1"  parent="abstractServer">

<property name="ipAddress">192.168.200.112</property>

65  定义读的池slave

<dbServer name="slaves" virtual="true">

68   轮询

71    从数据库slave1  slave2

property name="loadbalance">1</property>

 <property name="poolNames">slave1,slave2</property>

4.启动服务放入后台

/usr/local/amoeba/bin/amoeba start &

等8066端口号出来

查看端口是否开启

netstat -lnpt|grep 8066

netstat -lanpt|grep 3306

客户端配置:

步骤一:安装mariadb

yum -y install mariadb*

步骤二:登录amoeba

 mysql -uamoeba -p123456 -h 192.168.200.114 -P 8066

结果验证:(写入是主,读取是从)

断开主从复制

主 库:写入一段数据:插入

INSERT INTO customer (name, email) VALUES ('master4', 'master4');   验证主从复制断开

从库一:select * from customer;  没有master4  

从库二:select * from customer;  没有master4  

结果显示已经断开主从复制

客户端:写入一段数据:

插入INSERT INTO customer (name, email) VALUES

('master5', 'master5');

主 库:select * from customer;有了master5

从库1:select * from customer;  没有master5  

从库2:select * from customer;  没有master5  

客户端读取数据:

select * from customer;

select * from customer;

两次呈现不同的结果,证明了读写分离

开启主从复制

客户端写入数据:

INSERT INTO customer (name, email) VALUES ('master6', 'master6');

主库:select * from customer;有了master6

从库1:select * from customer;  有了master6

从库2:select * from customer;  有了master6

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

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

相关文章

【Spring】— Spring MVC复杂数据绑定

目录 复杂数据绑定1.绑定数组2.绑定集合 复杂数据绑定 实际项目开发中&#xff0c;除了简单数据类型外&#xff0c;还会经常遇到一些比较复杂的数据绑定问题&#xff0c;比如数组的绑定、集合的绑定&#xff0c;接下来将具体讲解一下数组绑定和集合绑定的使用。 1.绑定数组 …

白嫖福利?微软推出免费AI培训计划,助内容创作者实现自动化创作

据《IT之家》报道&#xff0c;微软今日宣布推出一项全新的免费AI培训计划&#xff0c;旨在帮助工作人员快速掌握AI技术的基本概念和应用。通过在线课程和证书&#xff0c;助力内容创作者实现更简单、自动化的内容创作。 作为微软的“技能培训计划”&#xff0c;微软旗下的领英&…

C# async await使用方法

运行界面&#xff1a; 代码部分&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using …

基于 VORS、CCDM 模型、GeoDetector、GWR模型集成技术在城镇化与生态系统健康空间关系分析及影响效应中实践应用

城市群是一国经济发展水平的象征&#xff0c;也是一国经济发展到一定阶段的标志&#xff0c;我国城市群建设体量不断增加&#xff0c;将成为全球经济的核心&#xff0c;中国城市群的建设逐步引领全球进入到了21世纪的中国新时代。然而&#xff0c;高速的城镇化发展&#xff0c;…

Diffusion详细学习

解决报错 https://zhuanlan.zhihu.com/p/622238031 原理&#xff1a;https://zhuanlan.zhihu.com/p/612854566 解决内存溢出问题 溢出问题 总结下来&#xff1a;batch_size 和 n_samples 调节 原理学习 扩散模型是一种生成模型&#xff0c;用于生成与训练数据相似的数据。…

Swift 5.9 有哪些新特性(二)

文章目录 前言Noncopyable 结构体和枚举结束变量绑定的生命周期makeStream() 方法添加 sleep(for:) 到 ClockDiscarding task groups总结 前言 虽然 Swift 6 已经在地平线上浮现&#xff0c;但 5.x 版本仍然有很多新功能-更简单的 if 和 switch 用法、宏、非可复制类型、自定义…

(二十四)专题地图编制——制图数据操作

专题地图编制——制图数据操作 目录 专题地图编制——制图数据操作 1.复制地图数据框2.旋转制图数据框3.绘制坐标网格3.1经纬网3.2方里格网3.3参考格网 1.复制地图数据框 要复制地图数据框&#xff0c;请按照以下步骤操作&#xff1a; ①在 ArcMap 中打开地图文档。 ②在“表…

图片怎么转换成PDF格式?学会这些方法轻松转换

将多张图片合并成一个PDF文件&#xff0c;方便用户阅读和管理&#xff0c;避免了多个图片文件的混乱。并且PDF文件可以设置密码保护&#xff0c;避免图片被未经授权的人员查看、复制和编辑。此外&#xff0c;PDF文件可以设置禁止打印和禁止复制等权限&#xff0c;增强图片的安全…

mysql exists深入理解

前言&#xff1a; 某天用exists语句时发现跟我的理解有出入&#xff0c;我以前理解的exists是子查询的结果不会影响最终返回的结果&#xff0c;只要子查询查到有结果&#xff0c;则返回true,没有则返回false。即下面图中的sql&#xff0c;只要house_appraisal不是空表&#xf…

Android中实现Material3主题

Android中实现Material3主题 Material 3是由Google引入的一种设计系统&#xff0c;通过采用一套设计原则、指南和组件&#xff0c;提供统一直观的用户体验。 在本篇文章中&#xff0c;您将学习如何&#xff1a; 在您的Android应用程序中应用Material 3主题。如何使用Materia…

10.1寸工业三防平板应用于工业自动化生产

随着工业自动化的不断发展&#xff0c;工业生产中对于设备的要求也越来越高。在恶劣的工作环境中&#xff0c;工业设备需要具备防尘、防水、防震等功能&#xff0c;以确保设备的稳定运行和长期使用。10.1寸工业三防平板作为一种重要的工业自动化设备&#xff0c;广泛应用于各个…

【算法】算法效率分析 -- 时间空间复杂度

文章目录 概述时间复杂度常数阶 O ( 1 ) O(1) O(1)线性阶 O ( n ) O(n) O(n)对数阶 O ( l o g n ) O(logn) O(logn)线性对数阶 O ( n ∗ l o g n ) O(n*logn) O(n∗logn)次方阶 O ( n 2 ) O(n^2) O(n2) O ( n 3 ) O(n^3) O(n3) O ( n k ) O(n^k) O(nk) O ( n m ) O(nm) …

保持无损连接的BCNF分解算法

建议在看之前熟悉候选键的求法&#xff0c;不清楚的可以转到这里来&#xff1a; http://t.csdn.cn/fW30Q 步骤&#xff1a; INPUT:关系模式R以及在R上成立的函数依赖集F 1.初始化P{R} 2.若P中的所有关系模式S都是BCNF&#xff0c;则转步骤(4) 3.若P中有一个模式S不是BCNF&am…

Linux——IP协议2

目录 公网IP ​编辑 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 数据链路层 认识以太网 以太网帧格式 如何解包和封装&#xff0c;交付及分用 重谈局域网通信原理 认识MTU MTU对于TCP协议的影响 查看硬件地址和MTU ARP协议 模拟ARP请求 …

ros2内结合gazebo和rviz进行yolov8检测记录

前提&#xff1a;第一次接触ros2, 遇到的问题解决方式不一定准确&#xff0c;只是这次我尝试成功了&#xff0c;想和大家分享一下。 ubuntu20.04系统 目录 1. ros2 1.1 ros2是啥&#xff1f; 1.2 ros2的版本和ubuntu版本的对应关系&#xff0c;当下入门尤其是ubuntu20.04系…

【物理摩擦力图像】对摩擦力大小的因素研究图像

摩擦力与编程 两个相互接触并挤压的物体&#xff0c;当它们发生相对运动或具有相对运动趋势时&#xff0c;就会在接触面上产生阻碍相对运动或相对运动趋势的力&#xff0c;这种力叫做摩擦力&#xff08;Ff或f&#xff09;。 摩擦力与正压力&#xff08;B物体上的A物体产生的压…

数据库实验—复杂查询

查询20161151班的学生在大学一年级选修的课程情况&#xff0c;查询结果要显示学号(Sno)、姓名(Sname)、专业名(Mname)、选课的课程号(Cno)、选课的课程名称(Cname)及成绩&#xff08;Grade)&#xff0c;并按照学号、课程号升序排序 select Sno, Sname,Mname, Cno,Cname,Grade f…

Windows11安装WSL2(Ubuntu20.04)

以管理员身份打开 PowerShell&#xff0c;输入以下命令安装&#xff1a; wsl --install dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /no…

【历史上的今天】6 月 29 日:SGI 和 MIPS 合并;微软收购 PowerPoint 开发商;新闻集团出售 Myspace

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 6 月 29 日&#xff0c;在 2008 年的今天&#xff0c;CNNIC 发布《第 22 次中国互联网络发展状况统计报告》&#xff0c;截至 2008 年 6 月底&#xff0c;中国…

draggable里包裹的卡片,卡片里有个input,点击input聚焦无效。

在input标签上加pointerdown.stop.native <el-input placeholder"请输入" pointerdown.stop.native v-model"dataForm.nickName" :style"{width:180px}" suffix-icon"el-icon-search" lazy />