首页 > 其他分享 >实训日记day29

实训日记day29

时间:2024-08-15 19:22:47浏览次数:7  
标签:bin day29 数据库 mycat master 实训 root 日记 usr

MySQL读写分离

1、读写分离的目的

数据库负载均衡:

当数据库请求增多时,单例数据库不能够满足业务 需求。需要进行数据库实例的扩容。多台数据库同时相 应请求。也就是说需要对数据库的请求,进行负载均衡 但是由于数据库服务特殊原因,数据库扩容基本要 求为:数据的一致性和完整性。所以要保证多台数据库 实例的数据一致性和完整性,以MySQL为例来说,官方 提供了主从复制机制。

读写分离:

数据库的负载均衡不同于其他服务的负载均衡,数 据要求一致性。基于主从复制的基础上,常见的数据库 负载均衡使用的是读写分离方式。写入主数据库,读取 到从数据库。可以认为数据库读写分离,是一种特殊的 负载均衡实现。 实际业务中,读写分离存在的一个问题,不够实时性。  对于要求实时性高的业务  ①缓存 写主库 写缓存 读缓存  ②可以读主  ③添加完数据之后,有一个跳转等待的时间(5s),数 据正在审核中

2、读写分离常见的实现方式

①业务代码的读写分离

需要在业务代码中,判断数据操作是读还是写,读连接 从数据服务器操作,写连接主数据库服务器操作 以当前LNMP为例,需要通过PHP代码实现读写分离。

②中间件代理方式的读写分离

在业务代码中,数据库的操作,不直接连接数据库,而 是先请求到中间件服务器(代理) 由代理服务器,判断是读操作去从数据服务器,写操作 去主数据服务器, 也就是如下图示架构: 问:如何选择?  ①业务实现读写分离,操作方便,成本低,当前的开发 框架基本支持读写分离  ②中间件代理服务器,除了能够实现读写分离,还可以 作为数据库集群的管理平台

MySQL读写分离案列实现

0、搭建M-S复制: 主从复制的原理 :主服务器开启bin-log(记录了写操 作) 从服务器获取到主服务器的bin-log 记录到relaylog中。从服务器在通过异步的线程方式,对于relay-log 进行重放操作。 1、master配置 ①在master服务器授权,slave服务器replication slave权限 slave是通过MySQL连接登录到master上来读取二进制 日志的,因此需要在 master上给slave配置权限 mysql > grant replication slave on *.* to 'slave'@'192.168.17.%'identified by '123456'; ②master服务器打开bin-log日志,并标识server-id shell > vim /etc/my.cnf 配置文件内容 [mysqld]  log-bin = mysql-index  server-id = 1 注意重启mysql使配置生效 ③制作一个完整的备份( 如果确认主从的数据库,默认开始数据是一致的,可以 不做备份 ) shell > mysqldump -uroot -p'123456' --alldatabases > /root/mysql.sql ④查看master上的bin-log及其position位置 mysql > show master status; 查看并记录File的值,Position的值。之后需要在从服务 器上,指向这些信息 File 记录到的bin-log日志文件名称  Position bin-log日志文件所记录的位置 2、slave配置 ①恢复备份文件( 如果slave和master的数据本身就是相同的,可以不选择 备份和导入 ) ②配置server-id,标识服务器 shell > vim /etc/my.cnf 配置文件内容 [mysqld]  server-id=2 由于是克隆获取的MySQL实例,所以auto.conf里记录的 UUID一样,需要删除/usr/local/mysql/data/auto.conf 文件,否则主从无法识别互相身份,重启自动生成新的 即可。 ③配置slave replication mysql > stop slave;  mysql> change master to  master_host='192.168.17.101' ,master_user='sl ave1' ,master_password='123456' ,master_log_fi le='mysql-bin.000002' ,master_log_pos=333;  mysql > start slave; 参数说明  master_host 主master的IP  master_user 主master允许登录,拥有replication slave权限  master_password 用户的密码  需要通过mysql > show master status; 在master执行  master_log_file 主master记录的bin-log日志文件名称  master_log_pos 主master记录的bin-log日志文件对 应的位置 ④启动replication,并检查结果 mysql > show slave status\G; 查看到两个yes,主从复制成功。否则,查看显示最下面 信息,通过error信息进行排查问题。

简单业务代码实现

示例语法代码: 将此代码上传到web服务器,测试是否可以实现读写分离。注意修改对应的连接地址、用户名称、密码等信息。 #命令行执行php代码的方式 #php需要提前配置环境变量 xxx.php为需要执行的php 脚本文件 shell > php xxx.php

框架配置实现读写分离

①通过查看thinkphp5手册找到处理方案  ②修改项目配置文件 (一定要先去确定主从数据库的数据一致(tp5shop), 用户名称和密码可以进行登录使用) shell > vim /usr/local/nginx/html/tp5shop/application/da tabase.php 配置文件示例
return [
    // 数据库类型
    'type' => 'mysql' ,
    // 服务器地址
    // 1、主从数据库的连接地址 主在前 从在后
    'hostname' => '192.168.17.100,192.168.17.105' ,
    // 2、主从数据库的名称、用户、密码一样的话,只 配置一份即可。如果不一样,按照先后顺序,逗号分隔
    // 数据库名
    'database' => 'tp5shop' ,
    // 用户名
    'username' => 'tp5shop' ,
    // 密码
    'password' => '$Abc3721' ,
    // 端口
    'hostport' => '3306' ,
    // 连接
    dsn 'dsn' => '' ,
    // 数据库连接参数
    'params' => [],
    // 数据库编码默认采用utf8
    'charset' => 'utf8' ,
    // 数据库表前缀
    'prefix' => 'tpshop_' ,
    // 数据库调试模式
    'debug' => true,
    // 3、项目框架的业务代码实现读写分离,使用的是 分布式(主从服务器) 配置为1
    // 数据库部署方式:0 集中式(单一服务器),1 分布 式(主从服务器)
    'deploy' => 1,
    // 4、数据库读写分离是业务代码实现的,配置为 true
    // 数据库读写是否分离 主从式有效
    'rw_separate' => true,
    // 读写分离后 主服务器数量
    'master_num' => 1,
    // 指定从服务器序号
    'slave_no' => '' ,
    // 是否严格检查字段是否存在
测试down主库,看从库是否可以访问。thinkphp5中, 如果slave宕机,master提供读服务。

MyCAT实现读写分离

jdk安装

①下载安装jdk  https://www.oracle.com/technetwork/java/javase/do wnloads/jdk8-downloads-2133151.html  选择下载x64架构.tar.gz包  上传mycat和jdk到soft目录下  ②配置环境变量  shell > tar xvf jdk-8u192-linux-x64.tar.gz shell > mv jdk1.8.0_192 /usr/local/java ②配置环境变量 #追加环境变量 shell > echo "PATH=/usr/local/java/bin:$PATH" >> /etc/profile shell > source /etc/profile #检测java环境变量 如果看到版本信息即为成功 shell > java -version

mycat安装和测试启动

①解压安装MyCAT( 上传jdk和mycat安装包 ) shell > tar xvf Mycat-server-1.6.5-release20180122220033-linux.tar.gz -C /usr/local #解压并且添加到指定的位置 [root@mycat ~]# ls  anaconda-ks.cfg  frp  initserver.sh  jdk1.8.0_192  jdk-8u192-linux-x64.tar.gz  mycat  Mycat-server-1.6.5-release20180122220033-linux.tar.gz  [root@mycat ~]# cp -r jdk1.8.0_192/ /usr/local/jdk  [root@mycat ~]# cp -r mycat/ /usr/local/ ②软件目录介绍 bin 相关软件管理命令等  conf 配置文件目录  logs 日志目录 ③ 查看并且配置jdk环境 [root@mycat ~]# ls /usr/local/jdk/ bin             man COPYRIGHT       README.html include         release javafx-src.zip  src.zip jre             THIRDPARTYLICENSEREADME-JAVAFX.txt lib             THIRDPARTYLICENSEREADME.txt LICENSE [root@mycat ~]# sed -i '$aexport JAVA_HOME=/usr/local/jdk' /etc/profile [root@mycat ~]# source /etc/profile [root@mycat ~]# $JAVA_HOME -bash: /usr/local/jdk: 是一个目录 [root@mycat ~]# sed -i '$aexport PATH=$PATH:$JAVA_HOME/bin' /etc/profile [root@mycat ~]# source /etc/profile [root@mycat ~]# $PATH -bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/jdk/bin: 没有那个文件或目录 ④ 测试启动myca就可以了 [root@mycat ~]# ls /usr/local/mycat/ bin catlet conf lib logs version.txt [root@mycat ~]# ll /usr/local/mycat/ [root@mycat ~]# ls /usr/local/mycat/bin/ [root@mycat ~]# /usr/local/mycat/bin/mycat console ⑤ 找到server.xml和schema.xml更改 shell > /usr/local/mycat/conf  shell > vim server.xml schema=>dataNode=>dataHost=>writeHost=>rea dHost ⑥ 启动服务 /usr/local/mycat/bin/mycat start ⑦ 检查启动的是否成功 [root@mycat ~]# netstat -lnput|grep 8066  tcp6 0 0 :::8066  :::* LISTEN  4547/java ⑧ 连接测试 [root@client ~]# cd mysql-8.0.33-linuxglibc2.12-x86_64/  [root@client mysql-8.0.33-linuxglibc2.12-x86_64]# cd bin/  [root@client bin]# ./mysql -h10.1.1.60 - P8066 -uzhangmin -pzhangmin

标签:bin,day29,数据库,mycat,master,实训,root,日记,usr
From: https://blog.csdn.net/weixin_70759189/article/details/141230061

相关文章

  • [Python学习日记-6] 基本数据类型(上)
    简介    在学习数据类型之前我们要先回答一个问题:为什么计算机要有数据类型呢?计算机不是很NB,很智能吗,为什么会需要人类标注好数据的具体类型呢?这里就要从计算机的角度看一下数据是什么形式的了,举个例子:Jove和1234,这两个数据在我们看来是很清晰的,左边的是字符串,右边......
  • 网络安全实训第二天
    1.业务逻辑漏洞注册一个账号在输入购买数量的输入框中输入-1并提交,然后点击提交订单提交订单后查看余额,发现账号多出6000元,漏洞利用成功2.更改支付金额在选定一个商品之后,使用BP拦截提交订单的请求,并找到价格修改为0查看用户下单界面单价是否为0点击提交订......
  • 网络安全实训第三天
    1文件上传漏洞准备一句话文件wjr.php.png,进入到更换头像的界面,使用BP拦截选择文件的请求拦截到请求后将wjr.phh.png修改为wjr.php,进行转发由上图可以查看到上传目录为网站目录下的upload/avator,查看是否上传成功使用时间戳在线工具获取到上传文件的名称打开......
  • Mybatis学习日记-day4-ResultMap
    一、学习目标    在之前的学习博客里对数据进行增删改查的操作,都是基于数据库表的列名Java对象的属性名一致的情况下,但是,这个世界并不是这么美好。        当数据库表的列名与Java对象的属性名不一致,或者数据类型需要特殊处理;此外,如果数据库中的某个列是枚......
  • 云计算实训28——haproxy(七层代理)、python代码的读写分离
    一、haproxy----高可用、负载均衡1.安装安装ntpdate[root@haproxy~]#yum-yinstallntpdate.x86_64安装ntp[root@haproxy~]#yum-yinstallntp同步时间[root@haproxy~]#ntpdatecn.ntp.org.cn启动ntp服务[root@haproxy~]#systemctlstartntpd设置开机自......
  • 我的Golang语言学习日记(简单快速易懂,保姆级包教会!)
    文章目录前言一、Golang是什么?二、Golang本地部署1.引入库2.读入数据总结前言随着云的不断发展,Golang这门语言也越来越重要,很多人都开启了学习Golang,本文就介绍了Golang的基础内容。一、Golang是什么?Golang,也被称为Go,是由Google公司于2009年发布的一种开源编......
  • 蒟蒻CC的补题日记
    A——FindKDistinctPointswithFixedCentern为偶数输出(x−1,y−1),(x+1,y+1),...,(x−n/2,y−n/2),(x+n/2,y+n/2)(x-1,y-1),(x+1,y+1),...,(x-n/2,y-n/2),(x+n/2,y+n/2)(x−1,y−1),(x+1,y+1),...,(x−n/2,y......
  • 【日记】总感觉今天很感性呢(2424 字)
    正文高温橙色预警。我并没有受到影响,因为今天上班……今天又和柜面主管吵了起来。两个人观念上的不同。今天装了三本档案,她嫌弃我装得不好,说不好看。当时她反问我信贷档案也是这样装的吗?装得这么随便。当时我跟她说,我原来去市分行找放款资料的时候,他们的档案只是拿个夹......
  • 代码随想录day29 || 134 加油站,135 分糖果,860 柠檬水找零,406 根据身高重建队列
    加油站funccanCompleteCircuit(gas[]int,cost[]int)int{ //思路,首先统计一个差值数组,表示行驶到下一个加油站可以补充的油量,然后加总差值数组, //如果小于0,表示从起始位置到目前为止剩余油量小于0,不足以跑完全程,同时将起始位置放到遍历的下一个位置 iflen(gas)==0......
  • 【日记】酸奶冻成冰块了 QvQ(457 字)
    正文我不知道一楼的冷藏柜已经修好了,早知道我就把酸奶放一楼了。放在六楼,现在酸奶已经冻成冰块了……今天基本上一整天都在摸鱼看书,中午把经济师报名了,报名费122块。有点贵……昨天给全家上了一个10万的意外险,包含医疗责任,一共200多块钱。但是似乎没办法给......