1、Mycat简介

  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品
    官网:http://www.mycat.org.cn/

2. Mycat优势

基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到Mycat的基因中,使Mycat在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
  Mycat背后有一支强大的技术团队,其参与者都是5年以上软件工程师、架构师、DBA等,优秀的技术团队保证了Mycat的产品质量。
  Mycat并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。

3. 前期准备

3.1、安装Mysql主从复制(请参考mysql8主从复制)
3.2、安装jdk
# yum源安装
$ yum search jdk$ yum -y install java-1.8.0-openjdk.x86_64# 查看jsk版本
$ java -version
3.3、下载Mycat1.6.7.6安装包
$ cd /usr/local/src/
$ wget http://dl.mycat.org.cn/1.6.7.6/20211016233725/Mycat-server-1.6.7.6-release-20211016233725-linux.tar.gz
#mysql8的驱动
$ wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar

4、安装mycat

# 解压
# 解压
$ tar -zxvf Mycat-server-1.6.7.6-release-20211016233725-linux.tar.gz# 改名(可忽略)
$ mv mycat/ mycat-1.6.7.6# 移动到/usr/local目录
$ mv mycat-1.6.7.6/ /usr/local/#替换mysql-connector-java-8.0.18.jar
$ cd /usr/local/mycat-1.6.7.6/lib
$ mv mysql-connector-java-8* /tmp
$ mv /usr/local/src/mysql-connector-java-8.0.18.jar .

5. 配置(一主一从)

# 进入配置文件目录,并查看文件
$ cd /usr/local/mycat-1.6.7.6/conf# 修改server.xml
$ vi server.xml# 修改底部管理员用户和只读用户信息及密码,配置schemas<user name="root" defaultAccount="true"><property name="password">Xinnet@2021</property><property name="schemas">ZABBIXDB</property><property name="defaultSchema">ZABBIXDB</property></user><user name="zabbixuser" defaultAccount="true"><property name="password">zabbixuser@2021</property><property name="schemas">ZABBIXDB</property><property name="defaultSchema">ZABBIXDB</property></user><user name="user"><property name="password">user</property><property name="schemas">ZABBIXDB</property><property name="readOnly">true</property><property name="defaultSchema">ZABBIXDB</property></user>#多创建了一个zabbixuser用户# 修改schema.xml
vi schema.xml# 替换为以下内容
# 其中10.12.69.51为写主机(主数据库)IP,10.12.69.52为读主机(从数据库)IP。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="ZABBIXDB" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1"></schema><dataNode name="dn1" dataHost="host1" database="zabbix" /><dataHost name="host1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="jdbc:mysql://10.12.69.51:3306" user="root" password="Xinnet@2021"><readHost host="hostS1" url="jdbc:mysql://10.12.69.52:3306" user="root" password="Xinnet@2021" /></writeHost></dataHost>
</mycat:schema>

dataHost节点中的balance(负载均衡类型)属性值共四种情况:

  • balance

​ balance=“0”
   不开启读写分离机制,所有读操作都发送到当前可用的writeHost上;

​ balance=“1”
   全部的readHost与stand by writeHost参与select 语句的负载均衡,简单的说,当双主双从
模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与 select语句的负载均衡;

​ balance=“2”
   所有读操作都随机的在writeHost、readhost上分发;

​ balance=“3”
   所有读请求随机的分发到readhost 执行,writerHost不负担读压力。

  • writeType
      writeType=“0” ,所有写操作发送到配置的第一个writeHost,第一个挂了切到正常的第二个writeHost;writeType=“1”,所有写操作都随机的发送到配置的 writeHost,1.5版本后不推荐使用。
  • writeHost
      Mycat重新启动后以切换后的为准,即可能因为写主机异常而发送写主机变动的情况,切换记录在配置文件中:dnindex.properties。
  • switchType
      switchType=“1”,默认值,自动切换;switchType="-1",表示不自动切换;switchType=“2”,基于Mysql 主从同步的状态决定是否切换。

6、启动mycat

# 重新启动
$ cd /usr/local/mycat-1.6.7.6/bin/
$ ./mycat restart# 查看启动状态
$ ./mycat status# 注意关闭防火墙或者放开端口8066
#查看日志是否启动成功
tail -f ../logs/switch.log
tail -f ../logs/mycat.log  -n 400

7、测试读写分离

7.1、打开主从数据库日志(两台机器全部都操作)
#查看主数据库日志记录开关、日志记录路径是否打开
mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | OFF   |
+---------------+-------+
1 row in set (0.00 sec)mysql> show variables like 'general_log_file';
+------------------+------------------------------------------------------+
| Variable_name    | Value                                                |
+------------------+------------------------------------------------------+
| general_log_file | /var/lib/mysql/bj-smzy-devops-zabbix-10-12-69-51.log |
+------------------+------------------------------------------------------+
mysql> set global general_log=ON; ## 打开记录日志开关
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'general_log'; #再次查看
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | ON    |
+---------------+-------+
7.2、监控日志

打开多个终端监控日志

主数据库:

$ tail -f /var/lib/mysql/bj-smzy-devops-zabbix-10-12-69-51.log

从数据库:

$ tail -f  /var/lib/mysql/bj-smzy-devops-zabbix-10-12-69-52.log
7.3、通过mycat连接数据库(10.12.69.53位mycat机器)
$  mysql -h 10.12.69.53 -uroot -p -P8066mysql> show databases;+----------+| DATABASE |+----------+| ZABBIXDB |+----------+# 创建测试表mysql> create table t_data2_test(`id`int not null primary key auto_increment, `value` varchar(255));# 插入一条记录mysql> insert into t_data2_test(`value`) values('C3Stones');# 查询mysql> select * from t_data2_test;
7.4、通过日志验证

读查询语句是否只从从库执行

写库语句是否只从主库执行

可以看到读只从读库52上执行,写库只从51主库上执行(因为配置了主从复制,所以看写库日志的时间,主库是先写进去的,从库是随后通过binlog执行写操作的)

8、mycat配置多用户登陆

场景:应用使用zbbixuser用户连接mycat

8.1、主从库执行
#主从库全部创建zabbixuser用户并且访问授权mysql>  create user 'zabbixuser'@'%' identified with mysql_native_password by 'zabbixuser@2021';Query OK, 0 rows affected (0.33 sec)mysql> grant all privileges on *.* to 'zabbixuser'@'%' with grant option;   Query OK, 0 rows affected (0.11 sec)mysql>  flush privileges;Query OK, 0 rows affected (0.02 sec)
8.2、mycat配置server.xml
 <user name="root" defaultAccount="true">                <property name="password">Xinnet@2021</property>                <property name="schemas">ZABBIXDB</property>                <property name="defaultSchema">ZABBIXDB</property>        </user>        <user name="zabbixuser" defaultAccount="true">                <property name="password">zabbixuser@2021</property>                <property name="schemas">ZABBIXDB</property>                <property name="defaultSchema">ZABBIXDB</property>        </user>        <user name="user">                <property name="password">user</property>                <property name="schemas">ZABBIXDB</property>                <property name="readOnly">true</property>                <property name="defaultSchema">ZABBIXDB</property>        </user>

新增user zabbixuser 其他保持不变 ,重启macat

$ cd /usr/local/mycat-1.6.7.6/bin/$ ./mycat restart# 测试使用zabbixuser用户连接数据库$ mysql -h 10.12.69.53 -uzabbixuser -p -P8066Enter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 7Server version: 5.6.29-mycat-1.6.7.6-release-20211018151034 MyCat Server (OpenCloudDB)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

成功!

Linux安装Mycat1.6.7.6实现Mysql数据库读写分离相关推荐

  1. mybatis获取mysql源数据类型_spring集成mybatis实现mysql数据库读写分离

    前言 在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈.幸运的是目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库的数据更新同步到另一台服务器上. ...

  2. mysql数据库字段变形_详解如何利用amoeba(变形虫)实现mysql数据库读写分离

    摘要:这篇MySQL栏目下的"详解如何利用amoeba(变形虫)实现mysql数据库读写分离",介绍的技术点是"MySQL数据库.数据库读写分离.amoeba.MySQL ...

  3. Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划...

    作者 | Pythonicc 责编 | 王晓曼 出品 | CSDN博客 简介 1.什么是数据库读写分离 读写分离,基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELET ...

  4. ceph集群和数据库到底是储存数据_Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划...

    作者 | Pythonicc责编 | 王晓曼出品 | CSDN博客简介1.什么是数据库读写分离读写分离,基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从 ...

  5. mycat定时向mysql存储数据_【实战演练】Linux操作系统20-MyCat实现Mysql数据库读写分离与自动切换...

    #本文欢迎转载,转载请注明出处和作者. 理论部分,详见:繁星亮与鲍包包:[理论研究]业务系统高可用及负载均衡​zhuanlan.zhihu.com 本篇主要实现"8.Mysql读写分离&qu ...

  6. amoeba mysql exists_Amoeba实现MySQL数据库读写分离

    一 环境以及软件版本: 系统:CentOS Linux release 7.2.1511 (Core) MySQL:Server version: 5.6.33 Amoeba:amoeba-mysql ...

  7. 利用mycat实现mysql数据库读写分离

    1.这里是在mysql主从复制实现的基础上,利用mycat做读写分离,架构图如下: 2.Demo 2.1 在mysql master上创建数据库创建db1 2.2 在数据库db1创建表student ...

  8. 你如何理解mysql的读写分离_面试官:谈谈你对Mysql数据库读写分离的了解,并且有哪些注意事项?...

    这篇文章讲述的不是Mysql具体的如何实现读写分离,而是指什么时候需要上读写分离,及其相关的注意事项. 因为用户的增多,数据的增多,单机的数据库往往支撑不住快速发展的业务,所以数据库集群就产生了!今天 ...

  9. yii2 mysql in_yii2 mysql数据库读写分离配置

    复制和读写分离(Replication and Read-Write Splitting) 许多数据库支持数据库复制来获得更好的数据库可用性, 以及更快的服务器响应时间.通过数据库复制功能, 数据从所 ...

最新文章

  1. Git之深入解析如何贮藏工作分支与清理工作目录
  2. 移植根文件系统到linux内核 s3c2440,u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统...
  3. sklearn 安装_sklearn-classification_report
  4. python语言中整型对应的英文_Python基本数据类型详细介绍(转)
  5. linux查看文件和目录大小(du)
  6. failed to keep to the max pss of 66560
  7. 4步搞定MySQL安装部署(附MySQL一键式部署脚本)
  8. linux 权限管理命令
  9. ultraedit 运行的是试用模式_原来用Unittest框架写接口测试用例这么简单!
  10. C++基础知识点(3)
  11. dependency报错
  12. 腾讯云跨云迁移工具案例实践:阿里云迁移到腾讯云
  13. php采集百度热搜,爬取百度热搜
  14. RxJava模式与原理-----标准观察者与RxJava观察者
  15. 数字图像处理Matlab
  16. 如何构建自己的python package
  17. each 和 forEach 和{{each}}
  18. 两条边延长角会有什么变化_用图中这种测量工具可以量出图中零件上ab cd这两条轮廓线的延长线所成的角你能说出其中的道理吗...
  19. Java中有些好的特性(一):静态导入
  20. 直扩 单音干扰抑制 matlab,数学计算软件MATLAB资料集锦分享

热门文章

  1. 百名学生教学用计算机,【敲敲黑板】本科教学合格评估知识学习之内涵解读 Day 13...
  2. React-Native集成极光推送(Android和IOS)
  3. 2021 CCF CSP-J2
  4. V8、JSCore、Hermes、QuickJS,hybrid开发JS引擎怎么选
  5. 雨听|获取微信公众号推送文章封面图片
  6. 斯坦福大学数据可视化课程学习笔记:第一节 可视化的发展与目标
  7. 如何下载学习通mooc上的课件,不需要任何工具
  8. c#与西门子smart200联合使用
  9. Ubuntu 安装中文支持
  10. 数据中台为什么不好搞?