mysql 26day 数据库双主双从 搭建mycat 数据库负载均衡 读写分离

目录

  • 搭建一个(双主双从) (然后搭建mycat)
    • 四台主机配置
    • master1 (主库1)
    • master2 (主库2)
    • slave 1(从库1)
    • master1 (主库1)
    • slave 1(从库1)
    • 如果配置出错 需要从这里从新配置
  • 写入数据(测试)
  • mycat
    • 安装java
    • 安装mycat
      • 编辑文件server.xml
      • 编辑文件schema.xml
      • 配置 mycat 用户
      • 配置schema.xml
        • 上述库的一些参数
      • 启动mycat服务
    • 登录mysql 用户端 测试
      • 测试 主从 数据库负载均衡
    • 测试负载均衡

搭建一个(双主双从) (然后搭建mycat)

  • 需要准备四台机器(master1、master2、slave1、slave2)
  • 克隆的时候 不要链接 要完整克隆
    -在这里插入图片描述

四台主机配置

# 配置本地解析
或者 vim /etc/hosts
cat >> /etc/hosts << EOF
{ip}  master1
{ip}  master2
{ip}  slave1
{ip}  slave2
{ip}  mycat
EOF

cat >> /etc/hosts << EOF
10.12.155.146  master1
10.12.155.89  master2
10.12.155.92  slave1
10.12.155.97  slave2
10.12.155.93  mycat
EOF




# 配置 复制数据库
scp mysql5.7.44.tar.gz  master1:/opt/
scp mysql5.7.44.tar.gz  master2:/opt/
scp mysql5.7.44.tar.gz  slave1:/opt/
scp mysql5.7.44.tar.gz  slave2:/opt/
scp mysql5.7.44.tar.gz  mycat:/opt/

# 解压包  安装

tar -xf /opt/mysql5.7.44.tar.gz


# 安装mysql
cd /opt/mysql5.7.44/
yum -y localinstall *

#启动数据库
systemctl start mysqld
systemctl enable mysqld

#修改mysql密码
mysqladmin -uroot -p"`awk '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password '@Baipiao123'

# 创建备份文件
mkdir /data
chown mysql.mysql /data

master1 (主库1)

# 配置文件
vim /etc/my.cnf
log_bin=/data/mysql-bin
server-id = 1
log-slave-updates     #添加上这个配置之后 就可以传多分bin-log

# 登录数据库
mysql -uroot -p"@Baipiao123"

# 授权账号。
mysql> grant replication slave on *.* to "king2"@"%" identified by "@Baipiao123";

# 刷新授权表

mysql> flush privileges;
# 查看当前binlog 日志文件用的哪个 以及post 
msyql> show master status\G

## 重新设置 设置轮转日志
mysql> reset master;

# 重启数据库
systemctl restart mysqld
mysql -uroot -p"@Baipiao123"

# 登录数据库 查看myster 的状态

msyql> show master status\G

master2 (主库2)

# 配置文件
vim /etc/my.cnf
log_bin=/data/mysql-bin
server-id = 2
log-slave-updates 

# 登录数据库 配置从的信息

mysql -uroot -p"@Baipiao123"

# 授权账号。
mysql> grant replication slave on *.* to "king2"@"%" identified by "@Baipiao123";

# 刷新授权表

mysql> flush privileges;

# 配置成  master 1 的从库
mysql>? change master to 

CHANGE MASTER TO
  MASTER_HOST='master1',
  MASTER_USER='king',
  MASTER_PASSWORD='@Baipiao123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=154,
  MASTER_CONNECT_RETRY=10;

# 重新加载配置
mysql>start slave;

# 登录数据库 查看myster 的状态

msyql> show slave status\G

slave 1(从库1)

# 配置文件
vim /etc/my.cnf
log_bin=/data/mysql-bin
server-id = 3


# 登录数据库 配置从的信息

mysql -uroot -p"@Baipiao123"

# 配置成  master 1 的从库
mysql>? change master to 

mysql>CHANGE MASTER TO
  MASTER_HOST='master1',
  MASTER_USER='king',
  MASTER_PASSWORD='@Baipiao123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=154,
  MASTER_CONNECT_RETRY=10;

# 重新加载配置
mysql>start slave;

# 登录数据库 查看myster 的状态

msyql> show slave status\G

master1 (主库1)

这里是回头把 master1 (主库1) 配置成 master2 (主库2) 的从库

这样,master1 (主库1) 和 master2 (主库2) 就可以互为主从

# 登录数据库 配置从的信息

mysql -uroot -p"@Baipiao123"


# 查看主机2
msyql> show master status\G

# 配置成  master 1 的从库
mysql>? change master to 

mysql>CHANGE MASTER TO
  MASTER_HOST='master2',
  MASTER_USER='king2',
  MASTER_PASSWORD='@Baipiao123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=154,
  MASTER_CONNECT_RETRY=10;

# 重新加载配置
mysql>start slave;

# 登录数据库 查看myster 的状态

msyql> show slave status\G

slave 1(从库1)

配置成 主库2 的从库

# 配置文件
vim /etc/my.cnf
log_bin=/data/mysql-bin
server-id = 4


# 登录数据库 配置从的信息

mysql -uroot -p"@Baipiao123"

# 配置成  master 1 的从库
mysql>? change master to 

mysql>CHANGE MASTER TO
  MASTER_HOST='master2',
  MASTER_USER='king2',
  MASTER_PASSWORD='@Baipiao123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=154,
  MASTER_CONNECT_RETRY=10;

# 重新加载配置
mysql>start slave;

# 登录数据库 查看myster 的状态

msyql> show slave status\G

如果配置出错 需要从这里从新配置

mysql>stop slave;
mysql> reset slave;
mysql>CHANGE MASTER TO
  MASTER_HOST='master',
  MASTER_USER='master',
  MASTER_PASSWORD='@Baipiao123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154,
  MASTER_CONNECT_RETRY=10;
## 启动slave
mysql>start slave;
# 产看状态
msyql>show slave status\G;

# -------------------------------------------------------------------
CHANGE MASTER TO
  MASTER_HOST='master1',
  MASTER_USER='king',
  MASTER_PASSWORD='@Baipiao123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000003',
  MASTER_LOG_POS=1511,
  MASTER_CONNECT_RETRY=10;
  
  
  CHANGE MASTER TO
  MASTER_HOST='master2',
  MASTER_USER='king2',
  MASTER_PASSWORD='@Baipiao123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000003',
  MASTER_LOG_POS=154,
  MASTER_CONNECT_RETRY=10;

写入数据(测试)

只往 master1 上写
# 在主库1 上插入数据
mysql -uroot -p"@Baipiao123" -e"create database baipiao;"
mysql -uroot -p"@Baipiao123" -e"create table baipiao.t1(id int,myname varchar(40));"
mysql -uroot -p"@Baipiao123" -e"insert into baipiao.t1 values(1,'hanwudi');"
mysql -uroot -p"@Baipiao123" -e"insert into baipiao.t1 values(2,'liubang');"
mysql -uroot -p"@Baipiao123" -e"insert into baipiao.t1 values(3,'xiaohe');"
mysql -uroot -p"@Baipiao123" -e"insert into baipiao.t1 values(4,'zhangliang');"



# 在其余三个库中查寻数据
mysql -uroot -p"@Baipiao123" -e"select * from baipiao.t1"

在这里插入图片描述

mycat

安装java

安装java 环境
因为mycat 是用 java 写的 所以这里需要一个java环境

需要 jdk 环境
# 安装 杰哥 的包 直接用

# 解压包
tar -xf jdk-8u211-linux-x64c.tar.gz
# 移动解压包
mv jdk1.8.0_0   /usr/jdk
# 修改配置文件  增加全局变量
vim /etc/profile.d/java.sh
	# 写入内容

export JAVA_HOME=/usr/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# 更新环境变量
source /etc/profile
source /etc/profile.d/java.sh

# 检查 java 版本 (java 不用启动)
java -version

安装mycat

# mycat 解压就可以用了
tar  -xf  {mycat 包}

 tar -xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz 

# 移动解压包
mv mycat   /usr/


# 一个假的 一个真的
/usr/mycat/conf/server.xml    	//存放和假的
/usr/mycat/conf/schema.xml		//存放着真的
# server.xml
给后端的时候
就给一个假的   到时候假的 会对应一个真的 然后进行登录


# 编制之前先备份
cp /usr/mycat/conf/server.xml   /usr/mycat/conf/server.xml.back
cp /usr/mycat/conf/schema.xml   /usr/mycat/conf/schema.xml.back

# 编辑文件  会在下边逐个编辑 (此处仅为展示)

vim  /usr/mycat/conf/server.xml 
vim  /usr/mycat/conf/schema.xml 

编辑文件server.xml

vim  /usr/mycat/conf/server.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<!-- name="root" 是假库 用户名 -->
	<user name="root" defaultAccount="true">
		<!-- 这里是 假库密码  -->
		<property name="password">123456</property>
		<!-- 这里是假库库名 -->
		<property name="schemas">TESTDB</property>
	</user>
</mycat:server>

编辑文件schema.xml

vim  /usr/mycat/conf/schema.xml 

配置 mycat 用户

# 授权一个mycat 用户
mysql> grant all on *.* to "mycat"@"%" identified by "@Baipiao123";
# 查看用户
mysql> select user from mysql.user; 
# 刷新授权
mysql> flush privileges;
# 创建一个真库  (假库 TESTDB 会对应到db1库)
mysql> create database db1;
# 给库中创建一个表格
mysql> create table  db1.t1(id int);

配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 这个地方写虚拟库的信息 -->
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
	</schema>
	<dataNode name="dn1" dataHost="localhost1" database="db1" />
		<!-- balance="3" 负载均衡 -->
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		
		
		
		
		<!-- 做一个判断,判断 主1 库是否正常 -->
		<heartbeat>select user()</heartbeat>




		<!--  主库1 master1 -->
		<writeHost host="hostM1" url="master1:3306" user="mycat"
				   password="@Baipiao123">
			<!-- 从库1(slave1) -->
			<readHost host="hostS1" url="slave1:3306" user="mycat" password="@Baipiao123" />
		</writeHost>


		<!-- 主库2 (master2)-->
		<writeHost host="hostM2" url="master2:3306" user="mycat"
				   password="@Baipiao123">
				   <!-- 从库2(slave2) -->
			<readHost host="hostS2" url="slave2:3306" user="mycat" password="@Baipiao123" />
		</writeHost>
	</dataHost>
</mycat:schema>

上述库的一些参数
----------------------------------------------------------------------------------------------
配置到这里就结束了  下边是一些参数解释
----------------------------------------------------------------------------------------------
database="db1" 需写一个真实的库

maxCon ="1000" 最大连接数
minCon ="10" 最少连接数
balance = "0" 负载均衡
writeType=
dbType=    //数据库类型
dbDriver= //引擎


--------------------------------------------------
<heartbeat>select user()</heartbeat>
试试检测 库1 有没有宕机


--------------------------------------------------
writeHost
host =
url= {数据库链接地址}
user= {数据库用户名}
passwd= {数据库用户密码}

启动mycat服务

#配置文件  改完之后

/usr/mycat/bin/mycat #mycat 配置
/usr/mycat/bin/mycat  status	# 查看状态
/usr/mycat/bin/mycat  start	# 查看状态
/usr/mycat/bin/mycat  restart # 重新启动
jps         # 查看java 进程

ss -ntlp

在这里插入图片描述

登录mysql 用户端 测试

使用 mysql 客户端 

mycat  端口是8066

mysql -P8066 -uroot -p123456 -hmycat 

show databases;

在这里插入图片描述

测试 主从 数据库负载均衡

balance 属性
负载均衡类型,目前的取值有 3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 
    互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
4. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。
5. balance="3", 所有读请求随机的分发到 writerHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

writeType 属性
负载均衡类型
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。

测试负载均衡

# 登录四个库
mysql -uroot -p"@Baipiao123"
show databases;
use db1;

# 关闭链接 分别创建四个库
mysql -uroot -p"@Baipiao123" -e"stop slave;"
stop slave;

# 每个库执行一个   每个库执行一个    每个库执行一个
# 注意哈  这个四个命令是在四个库中执行的  这个时候数据是不一样的 
# 这里是为了测试  是不是完成了读写分离
mysql -uroot -p"@Baipiao123" -e"create table db1.kk1(id int);"
mysql -uroot -p"@Baipiao123" -e"create table db1.kk2(id int);"
mysql -uroot -p"@Baipiao123" -e"create table db1.kk3(id int);"
mysql -uroot -p"@Baipiao123" -e"create table db1.kk4(id int);"


# 这里是 sql 语法
create table db1.kk1(id int);
create table db1.kk2(id int);
create table db1.kk3(id int);
create table db1.kk4(id int);




# 登录假库
mysql -P8066 -uroot -p123456 -hmycat 

# 进入到假库中
use TESTDB;

# 多次执行这个命令 可以看到如图的 现象  
show databases;

在这里插入图片描述


🌸🌸花开的时候,那便是春风带给来的盛装和温暖,每年都是这样。爱也一样,三千年不会变。🌸🌸

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

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

相关文章

AI面板识别 - 华为OD统一考试

OD统一考试 (B卷) 分值: 100分 题解: Java / Python / C++ 题目描述 AI识别到面板上有N(1 ≤ N ≤ 100)个指示灯,灯大小一样,任意两个之间无重叠。 由于AI识别误差,每次别到的指示灯位置可能有差异,以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1,右下角x2…

智慧城市新型基础设施建设综合方案:文件全文52页,附下载

关键词&#xff1a;智慧城市建设方案&#xff0c;智慧城市发展的前景和趋势&#xff0c;智慧城市项目方案&#xff0c;智慧城市管理平台&#xff0c;数字化城市&#xff0c;城市数字化转型 一、智慧城市新基建建设背景 1、城市化进程加速&#xff1a;随着城市化进程的加速&am…

SAP问题 OPEN SQL 取不到值

关键&#xff1a;数据库中有数据&#xff0c;但是open sql取不到数据 背景&#xff1a; 标准程序在测试环境正常执行&#xff0c;在生产环境报错。 解决过程&#xff1a; 第一步&#xff1a;分析执行结果不一致可能的原因&#xff1a; 1.测试数据问题&#xff0c;可能性小&…

前端三件套html/css/js的基本认识以及示例程序

简介 本文简要讲解了html,css,js.主要是让大家简要了解网络知识 因为实际开发中很少直接写html&css,所以不必过多纠结,了解一下架构就好 希望深度学习可以参考MDN和w3school HTML 基础 HTML (Hyper Text Markup Language) 不是一门编程语言,而是一种用来告知浏览器如…

AAAI 2024:大模型如何掌握复杂工具?看孔子框架的教学之道

如今&#xff0c;大型语言模型&#xff08;LLM&#xff09;发展飞速&#xff0c;在文本和图像生成方面表现都很出色&#xff0c;但在我们的实际生活中&#xff0c;要理解和正确使用各种工具方面尚存在困难。人们期望这些模型在解决实际问题时能够灵活运用和理解各种工具&#x…

Linux(ubuntu)下git / github/gitee使用

先附上git命令 linuxchenxiao:~$ cd Templates/ 先进入一个目录&#xff0c;也可mkdir新建一个目录&#xff1a;用于接下来初始化为git可以管理的仓库 这个目录就是所说的工作目录&#xff0c;指当前正在进行开发的项目的本地目录。 linuxchenxiao:~/Templates$ git init 已…

大数据技术发展史

今天我们常说的大数据技术&#xff0c;其实起源于Google在2004年前后发表的三篇论文&#xff0c;也就是我们经常听到的“三驾马车”&#xff0c;分别是分布式文件系统GFS、大数据分布式计算框架MapReduce和NoSQL数据库系统BigTable。 你知道&#xff0c;搜索引擎主要就做两件事…

js for和forEach 跳出循环 替代方案

1 for循环跳出 for(let i0;i<10;i){if(i5){break;}console.log(i) }在函数中也可以return跳出循环 function fn(){for(let i0;i<10;i){if(i5){return;}console.log(i)} } fn()for ... of效果同上 2 forEach循环跳出 break会报错 [1,2,3,4,5,6,7,8,9,10].forEach(i>…

基于虚拟机ubuntu的linux和shell脚本的学习,以及SSH远程登陆实战

简介 特点 是一款操作系统,跟windows,macos一样,有下面的特点 简单和高效,一切皆文件,所有配置都通过修改文件解决,不需要繁琐的权限和设置 权限高,把所有细节都交给用户,可完全自定义 安全,所有程序只有自己执行才会启动 分类 1、debian系主要有Debian&#xff0c;Ubun…

出海合规云安全,AWS Landing Zone解决方案建立安全着陆区

在出海的大环境中&#xff0c;企业数字化转型的趋势之一就是上云。然而&#xff0c;上云也带来了新的挑战&#xff0c;特别是对企业的 IT 建设和管理提出了更高的要求。为了构建一个安全合规的云上信息系统环境&#xff0c;满足企业中不同用户的快速增长、资源访问可控、成本可…

Selenium在vue框架下求生存

vue框架下面&#xff0c;没有id、没有name&#xff0c;vue帮开发做了很多脏活累活&#xff0c;却委屈了写页面自动化测试的人&#xff08;当然&#xff0c;也给爬信息的也带来了一定的难处&#xff09;。这里只能靠总结&#xff0c;用一些歪门邪道&#xff1a; 一、跟开发商量…

三台CentOS7.6虚拟机搭建Hadoop完全分布式集群(二)

这个是笔者大学时期的大数据课程使用三台CentOS7.6虚拟机搭建完全分布式集群的案例&#xff0c;已成功搭建完全分布式集群&#xff0c;并测试跑实例。 6.安装JDK 以下操作现在master上操作&#xff0c;然后远程复制到slave01、slave02即可。 6.1 将压缩包发送到master节点机…

【连接池】-从源码到适配(下),使用dynamic-datasource导致连接池没生效(升级版本)

写在前面 书接上文&#xff0c;连接池没生效&#xff0c;启用了一个什么默认的连接池。具体是什么&#xff0c;一起来看看源码吧。 目录 写在前面一、问题描述二、本地调试三、升级dynamic-datasource四、新的问题&#xff08;一&#xff09;数据源初始化问题&#xff08;二&am…

【nodejs】前后端身份认证

前后端身份认证 一、web开发模式 服务器渲染&#xff0c;前后端分离。 不同开发模式下的身份认证&#xff1a; 服务端渲染推荐使用Session认证机制前后端分离推荐使用JWT认证机制 二、session认证机制 1.HTTP协议的无状态性 了解HTTP协议的无状态性是进一步学习Session认…

Vue2+element-ui 实现select选择器结合Tree树形控件实现下拉树效果

效果&#xff1a; DOM部分 &#xff1a; // 设置el-option隐藏的下拉选项&#xff0c;选项显示的是汉字label&#xff0c;值是value // 如果不设置一个下拉选项&#xff0c;下面的树形组件将无法正常使用 <el-form-item label"报警区域" prop"monitorId"…

Spring Boot 基于Redisson实现注解式分布式锁

依赖版本 JDK 17 Spring Boot 3.2.0 Redisson 3.25.0 源码地址&#xff1a;Gitee 导入依赖 <properties><redisson.version>3.25.0</redisson.version> </properties><dependencies><dependency><groupId>org.projectlombok</…

Linux 安装Jupyter notebook 并开启远程访问

文章目录 安装Python安装pip安装Jupyter启动Jupyter Notebook1. 生成配置文件2. 创建密码3. 修改jupyter notebook的配置文件4. 启动jupyter notebook5. 远程访问jupyter notebook 安装Python 确保你的系统上已经安装了Python。大多数Linux发行版都预装了Python。你可以在终端…

QT/C++ 远程数据采集上位机+服务器

一、项目介绍&#xff1a; 远程数据采集与传输 课题要求:编写个基于TCP的网络数据获取与传输的应用程序; 该程序具备以下功能: 1)本地端程序够通过串口与下位机(单片机)进行通信&#xff0c;实现数据采集任务 2)本地端程序能将所获取下位机数据进行保存(如csv文本格式等); 3…

[ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择

文章目录 一、前言二、Amazon SNS 服务&#xff08;Amazon Simple Notification Service&#xff09;三、Amazon SQS 服务&#xff08;Amazon Simple Queue Service&#xff09;四、SNS 与 SQS 的区别&#xff08;本文重点&#xff09;4.1 基于推送和轮询区别4.2 消费者数量对应…

【教学类-43-04】20231229 N宫格数独4.0(n=2,4,6,8) (ChatGPT AI对话大师生成 回溯算法)

作品展示&#xff1a; 背景需求&#xff1a; 幼儿表示自己适合做5宫格 第一次AI生成九宫格数独python代码 【教学类-43-03】20231229 N宫格数独3.0&#xff08;n1、2、3、4、6、8、9&#xff09; &#xff08;ChatGPT AI对话大师生成&#xff09;-CSDN博客文章浏览阅读162次&…