在学习数据库中间件前,我们先抛出三个问题

  1、数据库数据量不大,但并发读写操作很大,应该怎么办?

  此时我们首先考虑使用缓存中间件来减轻读压力,如果不能满足则考虑数据库读写分离,此时就会引入新的问题,这会对我们的应用代码dao产生影响,如何隔离呢

  2、应用数据模块很多,总的数据量很大,并发读写超过了单个数据库服务器的能力?

  这时候我们可以按业务将数据库拆分为多个数据库,此时就面临如果管理多数据源的问题以及跨库联表查询等问题

  3、单表数据量很大,超过了单表的存储上线,例如mysql单表数据量超过1000万,类似订单表超过这个数值怎么办?

  此时可以需要按一定的条件分表,分表又会带来数据库如何存储到对应位置的问题以及查询是如何找到这些数据,分表规则怎么定等

  为了解决以上问题,我们就有必要引入数据库中间件,来隔离应用代码和数据库,实现快速的读写分离,分库分表,数据库中间件有两种方式:客户端模式,在我们的应用集成数据库中间件模块,在这个模块来配置要访问的数据源,使用于中小系统;第二种服务端代理模式,应用直接像访问数据库一样访问数据库中间件,由中间件去访问对应的数据库。常用的客户端模式有sharding-jdbc、TDDL,常用的proxy则有mycat、oneproxy等,数据库中间件使用比较多的就是sharding-jdbc和mycat(因为开源),下面进入正题mycat的安装部署

  为了满足最基本的读写分离和分表,我们至少要准备两台centos7服务器,mycat是java开发的,所以我们需要安装的有jdk、mysql和mycat

  jdk安装

  1、卸载openjdk,没有就算了,rpm -qa | grep jdk   查看jdk信息,卸载yum -y remove java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7

  2、下载地址 :http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  3、解压安装包到/usr/local/ 例如: tar  -zxvf jdk-8u152-linux-x64.tar.gz -C /usr/local/

  4、添加环境变量,在/etc/profile文件最后加上下面配置,source /etc/profile 使配置文件生效

  1. export JAVA_HOME=/usr/local/jdk1.8.0_152
  2. export PATH=$JAVA_HOME/bin:$PATH
  3. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar

  mysql安装

  这里使用最基础的tar包安装

  1、下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz,解压安装包到/usr/local/ 例如: tar  -zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz -C /usr/local/,建议修改解压好的包名为 mysql.5.7.27,进入 mysql.5.7.27 ,创建data文件夹mkdir data,用来存放数据库文件

  2、检查 linux 是否安装了 mariadb数据库,mariadb数据库是 mysql的分支,是免费开源的和msyql会有冲突。如果安装了需要先卸载,查看是否安装yum list installed | grep mariadb 卸载,yum -y remove mariadb-libs.x86-64

  3、创建用户,创建mysql用户和用户组,用来执行MYSQL的命令mysqld    useradd mysql; groupadd mysql

  4、使用mysql的mysqld 命令初始化数据库的基本信息。切换到mysql-5.7.27/bin目录下执行。

  1. 命令:./mysqld --initialize --user=mysql --datadir=/usr/local/mysql-5.7.27/data --basedir=/usr/local/mysql-5.7.27
  2. 参数说明:
  3. --initialize 初始化mysql,创建mysqlroot, 随机生成密码。记住密码,登录msyql使用。
  4. --user执行msyqld 命令的linux用户名
  5. --datadir : mysql数据文件的存放位置,目录位置参照本机的设置。
  6. --basedir : msyql安装程序的目录,目录位置参照本机的设置。
  7. 该命令执行后,会生成一个临时的mysql数据库root用户的密码,请先拷贝出来记住,后续第一次登录mysql
  8. 例如#/T3ds.jhdUM

  5、启用安全功能:在服务器与客户机之间来回传输的所有数据进行加密。通过证书提供了身份验证机制,mysql命令程序,mysql_ssl_rsa_setup提供了开启数据加密功能,生成数字证书。在mysql-5.7.27/bin目录下执行命令:

  1. ./mysql_ssl_rsa_setup --datadir=/usr/local/mysql-5.7.27/data

  6、mysql安装后,需要更改mysql-5.7.27整个文件夹目录权限,更改所属的用户和组,是之前创建的mysql用户。在mysql安装目录的上级(/usr/local/)位置,执行命令chown .

例如:chown -R mysql:mysql /usr/local/mysql-5.7.27/

  7、创建mysql配置文件,vi /etc/my.cnf,添加如下配置

  1. [mysql]
  2. # 设置mysql客户端默认字符集
  3. default-character-set=utf8
  4. [mysqld]
  5. #跳过权限表校验
  6. #skip-grant-tables
  7. skip-name-resolve
  8. #设置3306端口
  9. port = 3306
  10. # 设置mysql的安装目录
  11. basedir=/usr/local/mysql-5.7.27
  12. # 设置mysql数据库的数据的存放目录
  13. datadir=/usr/local/mysql-5.7.27/data
  14. # 允许最大连接数
  15. max_connections=200
  16. # 服务端使用的字符集默认为8比特编码的latin1字符集
  17. character-set-server=utf8
  18. # 创建新表时将使用的默认存储引擎
  19. default-storage-engine=INNODB
  20. # 表名不区分大小写
  21. lower_case_table_names=1
  22. max_allowed_packet=16M
  23. log-error=/var/log/mysqld.log
  24. pid-file=/usr/local/mysql-5.7.27/data/mysqld.pid

  8、启动和关闭MySQL服务,mysql-5.7.18/bin目录下执行命令:./mysqld_safe &(其中& 符号表示后台启动),输入命令后按Enter,mysqld_safe程序会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。用mysqld_safe程序来启动MySQL服务器的做法在unix/linux系统上很常见,确认msyql是否启动,查看进程 ,使用ps -ef | grep mysql,mysql-5.7.18/bin目录下执行:./mysqladmin -uroot -p shutdown输入密码停止mysql

  9、通常我们会将mysql配置为一个服务,以方便管理,做一下操作后执行service mysqld start即可启动mysql ,service mysqld stop停止mysql

  1. cp /usr/local/mysql-5.7.27/support-files/mysql.server /etc/init.d/mysqld
  2. vim /etc/init.d/mysqld,添加第46,47行地址
  3. basedir=/usr/local/mysql-5.7.27
  4. datadir=/usr/local/mysql-5.7.27/data

  10、修改root密码并配置远程客户端连接,mysql启动后,登录进入mysql,mysql-5.7.18/bin目录下执行命令:./mysql-uroot -p,-u表示使用root用户登录系统,使用第8步生成的密码,-p表示使用密码登录,在mysql中修改root用户的密码:alter user 'root'@'localhost' identified by '123456';授权远程访问,在没有授权之前只能在本机访问msyql,远程授权就是让其他计算机通过网络访问mysql(这样远程客户端才能访问),grant all privileges on *.* to root@'%' identified by '123456';其中*.* 的第一个*表示所有数据库名,第二个*表示所有的数据库表;root@'%' 中的root表示用户名,%表示ip地址,%也可以指定具体的ip地址,比如root@localhost,root@192.168.10.129,更新权限信息,执行flush刷新权限: flush privileges ;执行exit退出msyql自己的客户端。

  11、防火墙开放,firewall-cmd --zone=public --add-port=3306/tcp --permanent,重新加载一次firewall-cmd --reload

  mycat安装

  1、下载最新版的mycat:wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz,解压到/usr/local目录下tar -zvxf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local。

  2、mycat目录构成

  bin 程序目录,存放了window 版本和linux 版本,除了提供封装成服务的版本之外,也提供了nowrap 的 shell 脚本命令,方便大家选择和修改

  conf 目录下存放配置文件,server.xml 是Mycat 服务器参数调整和用户授权的配置文件,schema.xml 是逻辑库定义和表以及分片定义的配置文件,rule.xml 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改,需要重启Mycat 或者通过9066 端口reload

  lib 目录下主要存放mycat 依赖的一些jar

  文件日志存放在logs/mycat.log 中,每天一个文件,日志的配置是在conf/log4j2.xml 中,根据自己的需要,可以调整输出级别为debug,debug 级别下,会输出更多的信息,方便排查问题

  3、配置环境变量

  vi /etc/profile,追加 export MYCAT_HOME=/usr/local/mycat,source /etc/profile

  4、新增用户mycat(建议不要用root用户来运行mycat),useradd mycat,passwd mycat,chown -R mycat:mycat /usr/local/mycat,切换到mycat用户 su mysql

  5、启动mycat,cd /usr/local/mycat/bin ./mycat start,ps -ef | grep mycat 查看是否启动成功

  6、配置防火墙,在/conf/server.xml 查看配置端口和用户,默认服务端口为8066,管理端口是9066,有root用户和user用户,密码为12346和user,执行如下命令

  firewall-cmd --zone=public --add-port=8066/tcp --permanent

  firewall-cmd --zone=public --add-port=9066/tcp --permanent

  firewall-cmd --reload,开发环境中也可以直接关闭防火墙

  7、在本机可以通过数据库客户端连接工具例如navicat,输入端口8066,数据库所在ip,用户密码测试配置是否有效。

  

数据库中间件之mycat安装部署(一)的更多相关文章

  1. MyCat 安装部署,实现数据库分片存储

    一.安装MySQL或MariaDB(本文以MariaDB为例) MySQL手动安装方法:点击查看 MariaDB安装: 1.下载MariaDB的repo $ vi /etc/yum.repos.d/M ...

  2. 图数据库 Nebula Graph 的安装部署

    Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...

  3. 天兔(Lepus)数据库监控系统快速安装部署

    天兔(Lepus)数据库监控系统安装 实战 Part1:写在最前 Lepus安装需要Lamp环境,Lamp环境的安装个人认为比较费劲,XAMPP的一键部署LAMP环境省心省力, lepus官网手册也建 ...

  4. 数据库中间件之mycat读写分离

    mycat核心概念 逻辑库 mycat中定义.管理的数据库 逻辑表 逻辑库中包含的需分库分表存储的表 datanode 数据节点(分片节点),逻辑表分片的存放节点 datahost 数据主机(节点主机 ...

  5. MyCAT 1.6 安装部署

    1 mycat 安装部署 1 下载解压Mycat-server-1.6-RELEASE-20161010173036-linux.tar.gz 到/usr/local/mycat 2 下载解压jdk- ...

  6. 分布式数据库中间件 MyCat 搞起来!

    关于 MyCat 的铺垫文章已经写了三篇了: MySQL 只能做小项目?松哥要说几句公道话! 北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下! What?Tomcat 竟然也算中间件? ...

  7. 华为云分布式数据库中间件DDM和开源MyCAT对比

    前言 华为云分布式数据库中间件(Distributed Database Middleware)是解决数据库容量.性能瓶颈和分布式扩展问题的中间件服务,提供分库分表.读写分离.弹性扩容等能力,应对海量 ...

  8. MyCat:取代Cobar数据库中间件

    什么是MyCAT?简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务.ACID.可以替代Mysql的加强版数据库 ? 一个可以视为“Mysql”集群的企业级数据库 ...

  9. 数据库中间件mycat简单入门

    当在项目中mysql数据库成为瓶颈的时候,我们一般会使用主从复制,分库分表的方式来提高数据库的响应速度,比如mysql主从复制,在没有数据库中间件的情况下,我们只能由开发工程师在程序中控制,这对于一个 ...

随机推荐

  1. Go -- IP to int ip字符串和十进制相互转化

    package main import ( "fmt" "net" "reflect" "github.com/thinkerid ...

  2. uboot自定义添加命令

    1.添加命令 1.u-boot的命令格式: U_BOOT_CMD(name,maxargs,repeatable,command,”usage”,"help") name:命令的名 ...

  3. MySQL查询获取行号rownum

    MySQL中可以使用变量产生行号,下面是2个简单例子: 使用工具:MySQL Workbench 说明:表heyf_10中字段,empid(员工工号).deptid(部门编号).salary(薪资): ...

  4. Java并发包线程池之ScheduledThreadPoolExecutor

    前言 它是一种可以安排在给定的延迟之后执行一次或周期性执行任务的ThreadPoolExecutor.因为它继承了ThreadPoolExecutor, 当然也具有处理普通Runnable.Calla ...

  5. Android插件化(4):OpenAtlasの插件的卸载与更新

    Android插件化(4):OpenAtlasの插件的卸载与更新   转 https://www.300168.com/yidong/show-2779.html 核心提示:如果看过我的前两篇博客An ...

  6. 利用XMl标签定义动画

    渐变透明度动画 <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android=&qu ...

  7. osg Shader 着色器

    #ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include <osg/Group> #include <os ...

  8. (七)Centos之链接命令

    一.链接命令:ln  (link) ln -s [源文件] [目标文件] 功能描述:生成链接文件 选项: -s 创建软链接 二.硬链接 硬链接特征: 1,拥有相同的i节点和存储block块,可以看作是 ...

  9. Windows server 2008 R2 桌面服务器管理器打开提示:试图引用不存在的令牌

    来源:https://social.technet.microsoft.com/Forums/zh-CN/90f376a3-2b52-46c1-be34-4a2dbf4fdea2/winserver2 ...

  10. laravel原生sql

    转自:https://www.cnblogs.com/zouzhe0/p/6307077.html DB::insert(, ']); $user = DB::]); //我们还 可以看到在执行查询的 ...