就业班 第二阶段 2401--3.25 day5 mycat读写分离

@[TOC]

启动并更改临时密码

[root@mysql1~]# systemctl start mysqld && passwd=`grep password /var/log/mysqld.log | awk 'END{ print NF} '\`\&\& mysqladmin -p"passwd" password 'Qwer123..';

MyCAT读写分离

Mycat 是一个开源的数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有存 储引擎,所以并不是完全意义的数据库系统。 那么 Mycat 是什么?Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。

MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。

部署环境

1下载JDK

复制代码
官网下载

2.解压文件

复制代码
[root@mycat ~]# tar -xf jdk-8u181-linux-x64.tar.gz   -C  /usr/local/

3.配置环境变量

复制代码
[root@mycat ~]# vim /etc/profile.d/java.sh

JAVA_HOME=/opt/java 告诉java程序,java编译器的位置(自己设置位置)

PATH=PATH:JAVA_HOME/bin 告诉系统,java命令的位置

export JAVA_HOME PATH 使这两个环境变量生效

复制代码
​
使环境变量生效
[root@mycat ~]# source /etc/profile.d/java.sh

验证是否成功

部署Mycat
复制代码
下载
[root@mycat ~]# wget http://dl.mycat.org.cn/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz(建议用课件)
解压
[root@mycat ~]# tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
配置Mycat

认识配置文件

MyCAT 目前主要通过配置文件的方式来定义逻辑库和相关配置:

/usr/local/mycat/conf/server.xml 定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接 mycat 的用户信息。

/usr/local/mycat/conf/schema.xml 定义逻辑库,表、分片节点等内容。

配置 server.xml

以下为代码片段

下面的用户和密码是应用程序连接到 MyCat 使用的,可以自定义配置

而其中的schemas 配置项所对应的值是逻辑数据库的名字,也可以自定义,但是这个名字需要和后面 schema.xml 文件中配置的一致。

复制代码
vim server.xml
<!--下面的用户和密码是应用程序连接到 MyCat 使用的.schemas 配置项所对应的值是逻辑数据库的名字,这个名字需要和后面 schema.xml 文件中配置的一致。-->
​
     

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mycat:server SYSTEM "server.dtd">

<mycat:server xmlns:mycat="http://io.mycat/">

<user name="xa2401" defaultAccount="true">

<property name="password">111111</property>

<property name="schemas">faker</property>

</user>

</mycat:server>

上面的配置中,假如配置了用户访问的逻辑库,那么必须在 schema.xml 文件中也配置这个逻辑库,否则报错,启动 mycat 失败

配置schema.xml

以下是配置文件中的每个部分的配置块儿

逻辑库和分表设置

复制代码
<schema name="testdb"           // 逻辑库名称,与server.xml的一致
        checkSQLschema="false"    // 不检查sql
        sqlMaxLimit="100"         // 最大连接数
        dataNode="dn1">        //  数据节点名称
<!--这里定义的是分表的信息-->        
</schema>

数据节点

复制代码
<dataNode name="dn1"             // 此数据节点的名称
          dataHost="localhost1"     // 主机组
          database="testdb" />  // 真实的数据库名称

主机组

复制代码
<dataHost name="localhost1"                       // 主机组
          maxCon="1000" minCon="10"               // 连接
          balance="0"                             // 负载均衡
          writeType="0"                           // 写模式配置
          dbType="mysql" dbDriver="native"        // 数据库配置
          switchType="1"  slaveThreshold="100">
<!--这里可以配置关于这个主机组的成员信息,和针对这些主机的健康检查语句-->
</dataHost>
复制代码
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 以后废弃不推荐。

健康检查

复制代码
<heartbeat>select user()</heartbeat>

读写配置

复制代码
<writeHost host="hostM1" url="192.168.62.153:3306" user="root" password="Syf_123456">
                        <!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.62.152:3306" user="root" password="Syf_123456" />
</writeHost>

以下是组合为完整的配置文件,适用于一主一从的架构

复制代码
<?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="testdb" />
        
        
  <dataHost name="localhost1" 
            maxCon="1000" minCon="10" 
            balance="0"
            writeType="0" 
            dbType="mysql" dbDriver="native" 
            switchType="1"  slaveThreshold="100">
            
            
   <heartbeat>select user()</heartbeat>
       <!-- can have multi write hosts -->
   <writeHost host="hostM1" url="192.168.62.153:3306" 
              user="root"  password="Syf_123456">
      <!-- can have multi read hosts -->
      <readHost host="hostS2" url="192.168.62.152:3306" 
                user="root" password="Syf_123456" />
     </writeHost>
   </dataHost>
</mycat:schema>

双主双从

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

<schema name="faker" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">

</schema>

<dataNode name="dn1" dataHost="localhost1" database="db1" />

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<writeHost host="hostM1" url="mysql1:3306" user="mycat"

password="Qwer123..">

<readHost host="hostS1" url="mysql3:3306" user="mycat" password="Qwer123.." />

</writeHost>

<writeHost host="hostM2" url="mysql2:3306" user="mycat"

password="Qwer123..">

<readHost host="hostS2" url="mysql4:3306" user="mycat" password="Qwer123.." />

</writeHost>

</dataHost>

</mycat:schema>

启动 mycat(使用自己的安装目录启动)
复制代码
[root@mycat ~]# /usr/local/mycat/bin/mycat  start

支持一下参数
start | restart |stop | status

启动过程中可以动态查看日志观察过程

真实的 master 数据库上给用户授权
复制代码
mysql> grant all on testdb.* to root@'%' identified by 'Syf_123456';
mysql> flush privileges;
测试

在 mycat 的机器上测试用户权限有效性

测试是否能正常登录上 主服务器

复制代码
mysql -uroot -p'Syf_123456' -h192.168.62.153

继续测试是否能登录上从服务器

复制代码
mysql -uroot -p'Syf_123456' -h192.168.62.152

通过客户端进行测试是否能登录到 mycat 上

192.168.62.151 是 mycat 的主机地址(配置文件那个服务器可以说是)

注意端口号是 8066

复制代码
[root@mysqlclient ~]# mysql -uroot -pSyf_123456 -h192.168.62.151 -P 8066

MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| testdb |
+----------+
1 row in set (0.00 sec)

继续测试读写分离策略

使用 mysql 客户端工具使用 mycat 的账户和密码登录 mycat , 之后执行 select 语句。

之后查询 mycat 主机上 mycat 安装目录下的 logs/mycat.log 日志。

在日志重搜索查询的语句或者查询 从库的 ip 地址,应该能搜索到

相关推荐
夏炎正好眠36 分钟前
mysql练习
数据库·mysql
琪琪花2 小时前
sshfs 将远程服务器上的文件系统挂载到本地目录
linux·运维·服务器
wayuncn2 小时前
哈尔滨服务器租用的流程
运维·服务器
驜鸈3 小时前
MySQL 的EXPLAIN 计划 type 字段详细说明
android·数据库·mysql
fanxiaohui121384 小时前
元脑服务器的创新应用:浪潮信息引领AI计算新时代
运维·服务器·人工智能
嗨起飞了4 小时前
MySQL入门手册
数据库·mysql
Elastic 中国社区官方博客5 小时前
使用 Elastic-Agent 或 Beats 将 Journald 中的 syslog 和 auth 日志导入 Elastic Stack
大数据·linux·服务器·elasticsearch·搜索引擎·信息可视化·debian
程序员的世界你不懂5 小时前
Mysql配置文件My.cnf(my.ini)配置参数说明
数据库·mysql·百度·新浪微博
ChinaRainbowSea5 小时前
MySQL 索引的数据结构(详细说明)
java·数据结构·数据库·后端·mysql
追风赶月、5 小时前
【MySQL】事务(隔离性、MVCC)
数据库·mysql