mycat实现读写分离_mycat主从复制

mycat实现读写分离_mycat主从复制1,课程回顾2,本章重点mysql主从原理,好处mycat概念,读写分离好处,读写分离的实现3,具体内容3.1mysql主从3.1.1linux下mysql安装以mysql5.6为例1)修改IP地址,修改主机名称vim/etc/sysconfig/network-scripts/ifcfg-ens33vim/etc/hostname2)安装mysql查看已经安装mysql组件:(centos6.9需要卸载原来的mysql

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1,课程回顾

2,本章重点

  mysql 主从原理,好处

  mycat 概念,读写分离好处,读写分离的实现

3,具体内容

3.1 mysql 主从

3.1.1 linux下mysql安装

     以mysql5.6为例

1)修改IP地址,修改主机名称

    vim /etc/sysconfig/network-scripts/ifcfg-ens33

    vim /etc/hostname 

2)安装mysql

查看已经安装mysql组件:(centos6.9 需要卸载原来的mysql组件)

       yum list installed | grep mysql

   卸载:

      yum -y remove mysql-libs.x86_64

 centos7.0之后,上面两句可以省略

如果wget没有安装

     yum -y install wget

下载yum源

  wget  [http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm](http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm)

安装yum源

rpm -ivh mysql-community-release-el6-5.noarch.rpm

查看yum源中mysql有效版本

   yum repolist all | grep mysql

使用下载yum源安装

yum install mysql-community-server -y

查看mysql服务是否启动

service mysqld status

启动mysql服务

   service mysqld start  

使用mysql客户端命令,连接mysql,默认密码为空

 mysql -u  root  -p     回车   再回车(默认密码为空)

查看所有数据库

 show databases;

选择数据库:

 use mysql;

查看所有表:

show tables;

查看表结构:

desc   user; //两个命令都可以

describe  user;

修改密码(使用空密码不太好):

 update user set password=password('tiger')  where user='root';

 password('tiger') 加密,把tiger密码加密存储

刷新权限,让密码生效:

 flush privileges;

退出:

 quit

再次连接:

msyql  -uroot -ptiger;  

远程使用navicat连接时报错(默认安装msql后,只允许localhost和127.0.0.1连接):

在这里插入图片描述

修改允许远程连接为统配符%,这样远程的IP就可以连接

update user set host=‘%’ where host=‘::1’;

刷新权限(让修改生效):

   flush privileges;      

3.1.2 mysql主从及双主双从配置

1)双主双从规划图:

在这里插入图片描述

2)具体实现:

 以mysql1为基础,克隆出mysql2,mysql3,mysql4 修改IP及主机名称

      vim /etc/sysconfig/network-scripts/ifcfg-ens33

      vim /etc/hostname

配置主从:

        master:

   主服务器上修改配置文件,添加日志操作

        vim /etc/my.cnf     mysql1操作

   修改第12行  binary.log 日志文件名称可以随便起

    log_bin=binary_log

   添加一行当前服务器唯一识别

    server-id=111

   重启服务,让修改生效

    service mysqld restart

   登录mysql

    mysql -uroot -ptiger

   查看master状态

    show master status;

在这里插入图片描述

slave:

    vim /etc/my.cnf

添加一行

   server-id=112

重启服务,让修改生效

     service mysqld restart

登录mysql

   mysql -uroot -ptiger

关闭slave(第一次操作不需要,但是以后如果修改该服务器为其他服务的从节点时,需要先停止slave服务)

  stop slave;

配置当前服务器为master(111)服务器的从机

  change master to master_host='192.168.170.111',master_user='root',master_password='tiger',master_log_file='binlog.000001',master_log_pos=120;

 启动slave服务:

     start slave;

查看slave的状态

     show slave status \G;

没有错最好(两台机子都全新安装mysql),克隆时,会报下面错误:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

原因因为克隆机子,两边的sever-uuid完全一致,所以错误

cat /var/lib/mysql/auto.cnf     在all session 中运行,发现4台mysql的uuid都一样     删除后3台的uuid 并重启服务

在mysql2,mysql3,mysql4都执行:

      rm -rf /var/lib/mysql/auto.cnf

     service mysqld restart

 再次查看uuid是否一致(发现不同):

     cat /var/lib/mysql/auto.cnf  

在mysql2上再次连接

     mysql -uroot -ptiger

 再次执行命令,发现IO,SQL线程都是正常,说明主从配置成功

     show slave status \G;

在这里插入图片描述

  测试主从:

      在mysql1上创建库,创建表,添加数据   发现mysql2都有!



 配置mysql3和mysql4主从:

       同上

 配置mysql1和mysql2互为主从:

      在mysql1和mysql3上, 新加一些配置

         vim /etc/my.cnf    

      在配置文件中添加(让从机作为其他主机的从机进行写操作时,该从机的从机也会进行写操作)

          log-slave-updates

      修改配置重启服务

测试:     

 在mysql1和mysql3进行任意写操作,4台服务器都进行了同步

3.1.3 主从配置原理
在这里插入图片描述

         1,主服务器(master)进行写操作时,会把所有的更新语句以二进制日志(binary log)的形式存储

            2,从服务器(slave)中有一个i/o线程,会读取主服务器上的二进制日志文件到中继文件中(relay log)

           3, 从服务器(slave)中另外一个sql线程,会读写中继文件中的语句,执行并持久化到从服务器的数据库文件中,从而实现了主从复制的功能

3.1.4 好处

负载均衡 :业务量增大时,I/O读写频率变高,单机可能无法满足需求,使用主从,让从服务器分担读压力,实现负载均衡

数据备份 : 传统的备份,都是本地备份,但是存在弊端,无法防止服务器本身出问题,配置主从,可以把本地数据备份到其他服务器

提高可用性 : 一旦主服务器出现问题,可以直接使用从服务器进行更新或者查询

3.2 mycat 读写分离,自动容错

3.2.1 mycat 概念,原理

概念:

mycat 是活跃的、性能好的数据库中间件,是mysql集群数据库中间件。基于心跳的自动故障切换,支持读写分离。支持分表分库。支持全局序列号,解决分布式下的主键生成问题。mycat 是阿里的开源数据库中间件cobar为基础,所以站在巨人肩膀。

原理:

Mycat 的原理并不复杂,复杂的是代码,如果代码也不复杂,那么早就成为一个传说了。

Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了 一些特定的分析:如分片分析、路由分析、读写分离分析(看是select 还是 insert,update,delete操作)、缓存分析等,然后将此 SQL 发往后端的真实数据库, 并将返回的结果做适当的处理,最终再返回给用户。
在这里插入图片描述

3.2.2 mycat 读写分离配置

在这里插入图片描述

1),拿最基础的机子克隆一台mycat服务器 ,修改IP,修改主机名称。

          依赖jdk

          vim  /etc/sysconfig/network-scripts/ifcfg-ens33

vim /etc/hostname

2),下载,解压mycat,配置环境变量

          从官网下载相关版本,使用xftp上传到linux服务器

    解压:

  tar -xzvf /root/software/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz  -C /usr/

    配置环境变量:

      vim /etc/profile

     复制下面内容:

export MYCAT_HOME=/usr/mycat
export PATH=$PATH:$JAVA_HOME/bin:$MYCAT_HOME/bin

    让配置文件生效:
    source /etc/profile

     测试:

     echo $MYCAT_HOME

3), server.xml配置

   server.xml 几乎保存了所有 mycat 需要的系统配置信息(全局配置,在server.xml配置可以全局产生影响)。其在代码内直接的映射类为 SystemConfig 类。server.xml 中的标签本就不多,这个标签主要用于定义登录 mycat 的用户(密码)和权限(能问那些表,以及针对该表的访问权限)。



     vim /usr/mycat/conf/server.xml

在这里插入图片描述
在这里插入图片描述

4), schema.xml配置

    Schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库、表、分片规则、DataNode(数据节点,分表分库专用) 以及 DataSource(数据源)。弄懂这些配置,是正确使用 MyCat 的前提。这里就一层层对该文件进行解析。

       vim /usr/mycat/conf/schema.xml

        ![图片]
        

删除了6到32行

 底行模式中使用   :6,32d

http://dl.mycat.org.cn/mycat-definitive-guide.pdf

5)读写分离测试

3.2.3 mycat 读写分离,自动容错测试

 让M1宕机     如果M1宕机,写操作切换到M2(第一个还生存writehost上),M2进行写操作,M2下的S2进行读  整个数据库不会宕机(注意:虽然S1正常,但S1包含M1下的读节点,所以S1不参与读)

      让M1恢复     M2继续写,M1,S1和S2参与读的负载均衡。。。。

   

   实践:

在mysql1上执行:   service mysqld stop

– 执行查询

select * from tb_dept;

正常 ,但是所有的读数据都是S2的

– 继续执行添加

insert into tb_dept(dname,loc) values(‘dev7’,‘zz7’);

insert into tb_dept(dname,loc) values(‘dev8’,‘zz8’);

M1宕机恢复后

select * from tb_dept;

insert into tb_dept(dname,loc) values(‘dev9’,‘zz9’);

insert into tb_dept(dname,loc) values(‘dev10’,‘zz10’);

3.2.4 读写分离的好处

读写分离就是数据的写操作(insert udpate delete create alter drop等等)和查询(select等)让不同的数据库服务器执行。

    数据库读写分离对于大型系统或者访问量(并发量)很高的互联网应用来说,是必不可少的一个重要功能。 从数据库的角度来说,对于大多数应用来说,从集中到分布,最基本的一个需求不是数据存储(写)的瓶颈,而是在于计算(读)的瓶颈,即SQL查询的瓶颈,我们知道,正常情况下,Insert SQL就是几十个毫秒的时间内写入完成,而系统中的大多数Select SQL则要几秒到几分钟才能有结果,很多复杂的SQL,其消耗服务器CPU的能力超强,不亚于死循环的威力。在没有读写分离的系统上,很可能高峰时段的一些复杂SQL查询就导致数据库服务器CPU爆表,系统陷入瘫痪,严重情况下可能导致数据库崩溃。

4,知识点总结

5,本章面试题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182466.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软件测试的用例设计方法_测试用例设计

    软件测试的用例设计方法_测试用例设计1、测试用例定义测试用例又叫testcase,是为某个特殊目标而编制的一组测试输入,执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。2、测试用例的特性有效性:测试用例能够被使用,且被不同人员使用测试结果是一致的可复用性:良好的测试用例具有重复使用的功能,如:回归测试易组织性:好的测试用例会分门别类地提供给测试人员参考和使用可评估性:从测试管理的角度,测试用例的通过率和软件缺陷的数目是软件产品质量好坏的测试标准可管理性:从测试管理的角度,测试用例的通过率和软件缺陷的数目

    2022年10月12日
    4
  • Ubuntu下Chrome运行Silverlight程序

    Ubuntu下Chrome运行Silverlight程序

    2021年9月1日
    61
  • ffmpeg安装教程linux_ubuntu安装vim

    ffmpeg安装教程linux_ubuntu安装vim1简介FCN-4是一个应用于音频自动标注的全卷积神经网络。使用该网络完成音频标注任务时,首先需要使用python的音频处理工具包Librosa提取音频的时频特征,针对mp3格式的音频文件,Librosa读取音频文件的工作依赖音频处理后端ffmpeg完成,因此要求使用该网络进行mp3音频自动标注任务的环境具备Librosa依赖库和ffmpeg。Librosa是一个用于音频、音乐分析、处理的python工具包,具备时频处理、特征提取、绘制声音图形等常用功能。FFmpeg是处理多媒体内容(如音频、视频、

    2022年9月2日
    6
  • Kafka源码解析_kafka删除消费组命令

    Kafka源码解析_kafka删除消费组命令本文依然是以kafka0.8.2.2为例讲解一,如何删除一个topic删除一个topic有两个关键点:1,配置删除参数delete.topic.enable这个Broker参数配置为True。2,执行bin/kafka-topics.sh–zookeeperzk_host:port/chroot–delete–topicmy_topic_name假如不配置删除参数为true的话,topic其实并没有被清除,只是被标记为删除。此时,估计一般人的做法是删除topic在Zookeep

    2022年10月16日
    3
  • 双拼输入法快速入门

    双拼输入法快速入门转自少数派https://sspai.com/post/32809,作者@大唐废猫本文适合并仅适合以下人群观看:喜爱折腾熟练使用盲打对汉语拼音有敏感度对于输入速度有要求愿意慢慢看完这一大篇文章并坚持痛苦使用为什么要批判全拼输入?自从计算机发明之后,如何利用QWERTY键盘输入汉字便成为一大难题,在历经五笔、注音、双拼、手写等各类输入角逐后,全拼…

    2022年6月18日
    49
  • aria2 bt tracker_ar接入路由器产品文档

    aria2 bt tracker_ar接入路由器产品文档vi/root/trackers-list-aria2.sh内容如下:#!/bin/bash#/usr/sbin/servicearia2stoplist=`wget-qO-https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all.txt|awkNF|sed”:a;N;s/…

    2022年9月28日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号