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
EOFcat >> /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 TOMASTER_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 TOMASTER_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 TOMASTER_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 TOMASTER_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

写入数据(测试)

只往 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/"><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;

配置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  端口是8066mysql -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 以后废弃不推荐。

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ Qt开发:Charts绘制各类图表详解

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍TreeWidget与QCharts的常用方法及灵活运用。 …

56.0/DIV+CSS 布局(详细版)

目录 56.1 本章简介 56.2 实例讲解 56.2.1 菜单制作 56.2.2 美化滚动条 56.2.3 DIV+CSS 布局 56.3 综合示例 56.3.1 总体分析 56.3.2 Header 层 56.3.3 最终代码 56.1 本章简介 本章通过几个实例讲解 DIV+CSS 的应用。 采用表格布局的页面内,为了实现设计的布局,制作者往往…

2023读书笔记57|《顾城诗选》——我们走进了夜海, 去打捞遗失的繁星

2023读书笔记57|《顾城诗选》——我们走进了夜海&#xff0c; 去打捞遗失的繁星 细雨&#xff0c;洗去空气中的浮尘&#xff0c; 薄暗里蜜酒散开阵阵醇香。 野蜂在风雨的摇荡中开始安眠&#xff0c; 带着无限甜美的梦想。 河岸边&#xff0c;开满了耀眼的冰花。 沙洲上&#x…

一个基于多接口的业务自动化测试框架!

这是一个成熟的框架&#xff0c;不是要让别人当小白鼠&#xff0c;它已经先后在两家公司的5条业务线进行了推广应用&#xff0c;用例条数到了几千条以上&#xff0c;并且从2018年开始每天都在CI/CD流程中被调用执行。 已有那么多接口测试框架&#xff0c;为什么重复造轮子&…

为什么那么多人劝退软件测试?月薪1万以上的就别点进来了

2023年已经进入倒计时了&#xff0c;今天跟大家聊一聊软件测试薪资这个话题 和大家说一句掏心窝的话&#xff1a;直到现在&#xff0c;软件测试依旧是寒门改变命运的一个最佳选择之一&#xff0c;要不是怕被喷&#xff0c;我都想把之一去掉&#xff0c;因为想了半天&#xff0…

力扣-收集足够苹果的最小花园周长[思维+组合数]

题目链接 题意&#xff1a; 给你一个用无限二维网格表示的花园&#xff0c;每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 &#xff0c;且每条边都与两条坐标轴之一平行。 给你一个整…

【WPF.NET开发】数据绑定应用场景

目录 1、实现属性更改通知 示例 2、双向绑定​​​更新源 示例 3、对分层数据使用主-从模式 示例 4、对分层 XML 数据使用主-从模式 示例 5、绑定两个控件的属性 示例 6、创建和绑定到 ObservableCollection 示例 7、使用 XMLDataProvider 和 XPath 查询绑定到 XML…

【UML】第13篇 序列图(2/2)——建模的方法

目录 三、序列图建模 3.1 概述 3.2 建模的步骤 3.3 举例说明步骤 1.确定主要场景和流程 2.确定参与的对象 3.绘制序列图 4.注意事项 3.4 特殊的情况 序列图是我个人认为&#xff0c;UML中最重要的图之一。 而且序列图&#xff0c;对于业务建模&#xff0c;也有非常好…

Flutter详解及案例代码

概念 Flutter是由Google开发的开源UI框架&#xff0c;旨在快速构建高质量的移动应用程序。与传统的移动应用开发方式不同&#xff0c;Flutter使用单一代码库构建应用程序&#xff0c;可以同时在iOS和Android上运行。 Flutter的核心是使用Dart语言编写的&#xff0c;并且具有自…

ChatGPT/GPT4+AI绘图+论文写作+编程结合到底有多强大?带你详细了解

ChatGPT在论文写作与编程方面具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题&#xff0c;ChatGPT都能为您提供实用且高质量的建议和指导&#xff0c;提高编程效率和准确性。此外&#xff0c;ChatGPT是一位出色的合作伙伴&#xff0c;可以为您提供论文写作的支持…

RK3588平台开发系列讲解(AI 篇)RKNN 数据结构详解

文章目录 一、rknn_sdk_version二、rknn_input_output_num三、rknn_tensor_attr四、rknn_perf_detail五、rknn_perf_run六、rknn_mem_size七、rknn_tensor_mem八、rknn_input九、rknn_output沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解 RKNN 相关的数…

如何用零代码工具去经营好企业的客户

内容来自演讲&#xff1a;丁厚平 | 重庆云之佳科技股份有限公司 | CEO 摘要 云之佳是一家工业互联网公司&#xff0c;提供工业互联网与云服务、智能制造服务和供应链协同管理服务。其主要产品包括供应链协同服务平台、制造运营管理平台、管理及业务咨询和全员数字化应用等。他…