MysqL使用Mycat实现读写分离

读写分离实践

绝大多数的企业的应用场景对于数据库来说都是读多写少,比如微博,明星发一条微博,上千万人读。所以为了分担数据库压力,做负载均衡,首先考虑到的就是读写分离,读写分离基于上面实现的主从复制,使用主库作为写库,从库为读库,提高数据库性能,提高IO性能

读写分离的实现方式

为了实现读写分离,出现了很多解决方案,其中比较流行的是采用中间件做为Proxy,保持应用层代码不随数据库的变动而发生变化,这里包括Amoeba、Atlas、Cobar、Mycat、MySQL Proxy等,而Mycat是目前开源的数据库中间件中比较成熟的解决方案。

MysqL使用Mycat实现读写分离_第1张图片

一、前提条件

     1、需要三台虚拟机(代理机、主机、从机)

     2、提前关闭三台主机的 firewalld 、selinux/config/下ELINUX=disabled 、getenforce=0

     3、将主机和从机搭建主存备份,并且确定一个共用数据库

     4、下载并安装Navicat(GUI界面)

     5、下载并安装Mycat(CLI界面)

     6、安装jdk1.8 (后续有详细步骤)

     7、查看三台主机的密码算法及使用权限要相同

MysqL使用Mycat实现读写分离_第2张图片

 

二、开始搭建

1、下载安装Mycat

         • Mycat 官网: http://www.mycat.io/
             可以了解下 Mycat 的背景和应用情况,这样使用起来比较有信心。
         • Mycat 下载地址: http://dl.mycat.io/
            官网有个文档,属于详细的介绍,初次入门,看起来比较花时间。

  Mycat的安装其实只要解压下载的目录就可以了,非常简单

 安装完成后,目录如下:

目录

说明

bin

mycat命令,启动、重启、停止等

catlet

catletMycat的一个扩展功能

conf

Mycat 配置信息,重点关注

lib

Mycat引用的jar包,Mycatjava开发的

logs

日志文件,包括Mycat启动的日志和运行的日志。

配置

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件

文件

说明

server.xml

Mycat的配置文件,设置账号、参数等

schema.xml

Mycat对应的物理数据库和数据库表的配置

rule.xml

Mycat分片(分库分表)规则

MyCat的架构

Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。

MysqL使用Mycat实现读写分离_第3张图片

    Mycat作为主数据库中间件,肯定是与代码弱关联的,所以代码是不用修改的,使用Mycat后,     连接数据库是不变的,默认端口是8066。连接方式和普通数据库一样,如              jdbc:mysql://192.168.0.1:806

 2、安装jdk1.8

   --- 解压缩包   tar -xzvf jdk-8u161-linux-x64.tar.gz -C /usr/local/java

   --- 环境变量文件/etc/profile配置 (添加到/etc/profile中)

      export JAVA_HOME=/usr/local/java/jdk1.8.0_161

      export JRE_HOME=${JAVA_HOME}/jre

      export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH

      export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin

      export PATH=$PATH:${JAVA_PATH}

  --- 使用source命令使修改即时生效,无需重启服务器

       source /etc/profile

3、配置Mycat

--- mycat/conf/server.xml 的配置 MysqL使用Mycat实现读写分离_第4张图片这里 第一个name后的字段和Navicat登录的用户名一致,第二个name后的password和Navicat登录的密码一致,第三个name后的schemas字段跟配置文件mycat/conf/schema.xml中name字段一致

各配置参数含义 

MysqL使用Mycat实现读写分离_第5张图片

这里配置了一个账号root,密码也是root,针对逻辑数据库nebula(自己定义别名,不是真实的物理数据库,读写权限都有,没有针对表做任何特殊的权限。

--- mycat/conf/schema.xml的配置

    schema.xml是最主要的配置项,首先看我的配置文件。 database=“nebula_cloud” 必须是主从  库都存在的数据库。

MysqL使用Mycat实现读写分离_第6张图片

下面是关于每个节点的配置说明

MysqL使用Mycat实现读写分离_第7张图片

MysqL使用Mycat实现读写分离_第8张图片

4、创建读库的test用户

create user 'test'@'%' identified with mysql_native_password by 'Nebula@123';
GRANT select ON *.* TO 'test';

flush privileges;(刷新用户请求表)

MysqL使用Mycat实现读写分离_第9张图片

5、启动Mycat

 --- Mycat的启动也非常简单,进入到mycat/bin目录下:

      ##启动 ./mycat start(后台启动)   ./mycat console(前台启动)

      ##停止 ./mycat stop

     ##重启 ./mycat restart

--- 如果在启动时发现异常,在logs目录中查看日志。

wrapper.log 为程序启动的日志,启动时的问题看这个
mycat.log 为脚本执行时的日志, SQL 脚本执行报错后的具体错误内容 , 查看这个文件。 mycat.log 是最新的错误日志,历史日志会根据时间生成目录保存。

--- 启动正常的结果如下

 出现successfully就说明启动成功

MysqL使用Mycat实现读写分离_第10张图片

三、搭建完成,使用Navicat登录Mycat实现读写分离

1、 连接9066端口

MysqL使用Mycat实现读写分离_第11张图片

MysqL使用Mycat实现读写分离_第12张图片

右击mycat_manager 进入命令行界面输入 show @@help ;  查看帮助

MysqL使用Mycat实现读写分离_第13张图片

 RS_CODE 状态:
         OK_STATUS = 1;正常状态
         ERROR_STATUS = -1; 连接出错
         TIMEOUT_STATUS = -2; 连接超时
         INIT_STATUS = 0; 初始化状态
如果是-1 使用window测试 2.查看防火墙 3.授权

2、连接8066端口

MysqL使用Mycat实现读写分离_第14张图片

 --- 连接成功则会出现如下的绿色,否则请检查

MysqL使用Mycat实现读写分离_第15张图片

--- 可以用简单的指令查看当前数据库

show databases;

use xxx; # 其中xxx为刚才看到的数据库中的一个

show tables;

select * from xxx; #为后续做验证准备,这个我们可以按照我们真实表来,此处因为我的数据库中有xxx表,所以以此来示例

!!! 注意 !!!

这里的数据库名可能不会使用自己设定的数据库的真名(为了隐藏详细)

四、测试 

1、 

MysqL使用Mycat实现读写分离_第16张图片

2、MysqL使用Mycat实现读写分离_第17张图片

五、读写分离完成

你可能感兴趣的:(MysqL,vim,html5,小程序)