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

news2024/12/25 1:33:57

第三阶段基础

时  间: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/697480.html

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

相关文章

前缀例题(一维二维)

​作者&#xff1a;小妮无语 专栏&#xff1a;暑假基础集训营 &#x1f6b6;‍♀️✌️道阻且长&#xff0c;不要放弃✌️&#x1f3c3;‍♀️ 目录 一维前缀和 二维前缀和 例题1&#xff1a;最大子矩阵 例题2&#xff1a; 激光炸弹 一维前缀和 本题唯一要注意的是数据范…

爬虫工具-替换js文件ReRes插件/Gores插件

目录 一、ReRes插件二、Gores插件 一、ReRes插件 用途&#xff1a;爬虫逆向过程中一些文件需要替换时 ① 原始网站js文件有无限debugger&#xff0c;复制原始网站js文件&#xff0c;删掉无限debugger相关代码保存为新的js文件&#xff1b;用ReRes插件进行替换② 原始网站js文件…

Xcode 14打包flutter 的项目构建失败

升级xcode 后flutter项目构建失败 起因&#xff1a; 升级Xcode 到新的14.3.1版本 错误&#xff1a; showing recent issues command phasescriptexecution failed with a nonzero exit code 这个错误很多情况下都会出现&#xff0c;所以参考价值较低。 解决&#xff1a; …

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 企业员工招聘系统的设计与实现

一.项目介绍 招聘系统将为招聘者和求职者构建一个功能齐全、方便快捷的招聘平台&#xff0c;减少双方投入招聘活动的成本&#xff0c;为招聘求职双方带来便利&#xff0c; 系统将实现如下目标&#xff1a; 1.针对系统内的不同角色&#xff0c;系统能够赋予其不同的操作权限。 …

有了HTTP,为什么还要RPC?

很长时间以来都没有怎么好好搞清楚 RPC&#xff08;即 Remote Procedure Call&#xff0c;远程过程调用&#xff09;和 HTTP 调用的区别&#xff0c;不都是写一个服务然后在客户端调用么&#xff1f;这里请允许我迷之一笑~Naive&#xff01; 本文简单地介绍一下两种形式的 C/S…

粒子群算法PSO优化VMD,适应度函数为最小样本熵或最小包络熵(可自行选择,代码已集成好,很方便修改)包含MATLAB源代码

近期评论区有小伙伴私信需要粒子群优化算法PSO法化VMD的&#xff0c;所以打算再写一篇。 与上一篇灰狼算法优化VMD相似&#xff0c;这篇文章也是以最小样本熵或最小包络熵为适应度函数的&#xff0c;好的&#xff0c;废话不多说&#xff0c;大家不懂得可以看这篇文章。灰狼优化…

《TCP IP网络编程》

2023.6.28 正式开始学习网络编程。 每一章每一节的笔记都会记录在博客中以便复习。 第1章 1.1理解网络编程和套接字 网络编程又叫套接字编程。所谓网络编程&#xff0c;就是编写程序使两台连网的计算机相互交换数据。 为什么叫套接字编程&#xff1f; 我们平常将插头插入插座上…

QT中把QWidget提升为自定义控件后样式表无效的原因

按照QT帮助手册的描述&#xff0c;当我们继承QWidget写了自己的类以后&#xff0c;必须要覆盖重写painterEvent函数。否则自定义类的样式表就不能生效。 这一点要切记。当你想继承QWidget时&#xff0c;不如直接继承上图的CustomWidget或者QFrame。 换句话说&#xff0c;永远不…

NXP i.MX 8M Mini的视频开发案例分享 (下)

本文主要介绍i.MX 8M Mini的视频开发案例&#xff0c;包含基于GStreamer的视频采集、编解码、算法处理、显示以及存储案例&#xff0c;GigE工业相机测试说明&#xff0c;H.265视频硬件解码功能演示说明等。 注&#xff1a;本案例评估版采用的是创龙科技TLIMX8-EVM&#xff0c;…

真的好用吗?鲜有人提的 RabbitMQ-RPC模式

RabbitMQ系列文章 手把手教你&#xff0c;本地RabbitMQ服务搭建&#xff08;windows&#xff09; 消息队列选型——为什么选择RabbitMQ RabbitMQ灵活运用&#xff0c;怎么理解五种消息模型 RabbitMQ 能保证消息可靠性吗 推或拉&#xff1f; RabbitMQ 消费模式该如何选择 死信是…

2023年3季度广州/深圳DAMA-CDGA/CDGP数据治理认证招生

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

【C语言%的多种用法】

C语言%的多种用法 C语言中%号那些事儿1、%之取余运算符的使用2、%之作格式符使用2.1、C语言格式符 3、%之搭配 * 的使用4、%之搭配 # 的使用5、客套话 C语言中%号那些事儿 前言&#xff1a; 众所周知&#xff1a;%百分号&#xff0c;在九年义务教育中&#xff0c;表示分数的分…

图片识别文字怎么做?这几种方法轻松解决

在现代社会&#xff0c;图片已经成为人们日常生活和工作中不可或缺的一部分。但是&#xff0c;由于图片中往往包含了大量的文字信息&#xff0c;如果要手动输入这些文字&#xff0c;不仅费时费力&#xff0c;而且容易出错。因此&#xff0c;将图片中的文字进行识别已经成为我们…

应用打包部署k8s (包括dockerfile打包及仓库上传)

文章目录 一、docker run 运行测试1.数据库测试2.接口测试3.前端界面测试 二、编写dockerfile1.前端2.后端 三、推送镜像&#xff08;后面k8s就从这里获取镜像了&#xff09;四.编写 docker-compose.yml五.K8s部署1.yaml文件编写及部署houduan-deployment.yamlhouduan-service.…

【STM32】F103 时钟树

STM32F103是一款基于ARM Cortex-M3内核的32位微控制器&#xff0c;它具有丰富的外设资源和灵活的时钟配置。本文将从以下几个方面介绍STM32F103的时钟树&#xff1a; 时钟树的概念和作用时钟树的组成和分类时钟树的配置方法和步骤时钟树的应用实例 一、时钟树的概念和作用二、时…

如何通过Nacos获取当前服务注册的IP信息

一台机器可能存在多个网卡也就同时存在多个IP地址,如果我想知道我这个服务在向Nacos注册的时候使用的哪一个IP该怎么获取呢? 非常简单,你可以通过这种方式获取 import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import org.springframework.boot.CommandLineRunne…

Angular 调试 —— 一个真实的多重循环导致的Bug

导致性能问题的原因可能很复杂&#xff0c;也可能很简单&#xff0c;今天让我们来看一个现实的例子。一个多重循环导致列表卡死。 startDemo() {this.processing true// 创建复杂数据结构const data [];for (let i 0; i < 5000; i) {const innerArray [];for (let j …

【数据压缩】LZ77算法原理及实现

1. 引言 LZ77算法是采用字典做数据压缩的算法,由以色列的两位大神Jacob Ziv与Abraham Lempel在1977年发表的论文《A Universal Algorithm for Sequential Data Compression》中提出。 基于统计的数据压缩编码,比如Huffman编码,需要得到先验知识——信源的字符频率,然后进…

EasyExcel导出csv文件,用Office Excel打开乱码

1.前言 导出的列里有中文&#xff0c;导出后用Excel打开乱码 2.原因 搜索相关资料&#xff0c;csv和excel的编码不一致&#xff0c;需要在导出csv的时候设置编码GBK 3.验证

多级时间轮定时器

一. 多级时间轮实现框架 ​上图是5个时间轮级联的效果图。中间的大轮是工作轮&#xff0c;只有在它上的任务才会被执行&#xff1b;其他轮上的任务时间到后迁移到下一级轮上&#xff0c;他们最终都会迁移到工作轮上而被调度执行。 多级时间轮的原理也容易理解&#xff1a;就拿时…