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

  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 使配置文件生效

export JAVA_HOME=/usr/local/jdk1.8.0_152
export PATH=$JAVA_HOME/bin:$PATH
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目录下执行。

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

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

./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,添加如下配置

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#跳过权限表校验
#skip-grant-tables
skip-name-resolve
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/mysql-5.7.27
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql-5.7.27/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 表名不区分大小写
lower_case_table_names=1
max_allowed_packet=16M
log-error=/var/log/mysqld.log
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

cp /usr/local/mysql-5.7.27/support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld,添加第46,47行地址
basedir=/usr/local/mysql-5.7.27
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. PHP中定义常量的区别,define() 与 const

      正文 在PHP5.3中,有两种方法可以定义常量: 使用const关键字 使用define()方法 const FOO = 'BAR'; define('FOO','BAR'); 这两种方式的根本区 ...

  2. sql server 使用SqlBulkCopy批量插入数据库

    sql server sqlbulkcopy 批量数据插入数据库使用的是System.Data.SqlClient中的 SqlBulkCopy批量数据插入数据库 sql server 使用SqlBul ...

  3. [Java复习] 分布式锁 Zookeeper Redis

    一般实现分布式锁都有哪些方式? 使用 Redis 如何设计分布式锁?使用 Zookeeper 来设计分布式锁可以吗? 这两种分布式锁的实现方式哪种效率比较高? 1. Zookeeper 都有哪些使用场 ...

  4. python使用redis实现协同控制的分布式锁

    python使用redis实现协同控制的分布式锁 上午的时候,有个腾讯的朋友问我,关于用zookeeper分布式锁的设计,他的需求其实很简单,就是节点之间的协同合作. 我以前用redis写过一个网络锁 ...

  5. PAT 甲级 1054 The Dominant Color (20 分)(简单题)

    1054 The Dominant Color (20 分)   Behind the scenes in the computer's memory, color is always talked ...

  6. Intellij-编码设置

    目录 文件编码修改 @(目录) 文件编码修改 • 上图标注 1 所示,IDE 的编码默认是 UTF-8 , Project Encoding 虽然默认是 GBK ,但是一般都建议 修改为 UTF-8 ...

  7. 单点登录系统(SSO)详细设计说明书(上篇)

    1.引言 1.1编写目的 为了单点登录系统(SSO系统)的可行性,完整性,并能按照预期的设想实现该系统,特编写需求说明书.         同时,说明书也发挥与策划和设计人员更好地沟通的作用. 1.2 ...

  8. 通过Httpclient工具类,实现接口请求

    package luckyweb.seagull.util; import org.apache.http.NameValuePair; import org.apache.http.client.e ...

  9. php 因循环数据 赋值变量 占用内存太大 提示错误

    Fatal error: Allowed memory size of 134217728 bytes exhausted 网上很多解决方法:就简单记录下 一个csv导入功能 由于数据太多 占用内存太 ...

  10. 【Linux内核】编译与配置内核(x86)

    [Linux内核]编译与配置内核(x86)  https://www.cnblogs.com/jamesharden/p/6414736.html