mycat中间件(二)linux版本mycat1.6版本安装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YuYunTan/article/details/53160960

前言

前面的文章,介绍了关于mycat的相关概念,为了简要描述,故而去掉了有关mycat的起源等内容。

本节内容则是讲述,如何安装mycat1.6版本。


安装前环境要求

环境要求如下:

环境 版本
mysql 5.5版本以上(本文使用5.6.33)
jdk 1.7版本以上(本文环境1.8.0_65)
centOS 7.2
虚拟机 VMware12
远程连接 MobaXterm Personal Edition 9.1
mycat 1.6

MyCAT使用Java开发,因为用到了JDK 7的部分功能,所以在使用前请确保安装了JDK 7.0,并设置了正确的Java环境变量(可在命令行窗口输入:“java –version”获知是否安装成功,以及获取JDK的版本)。


安装

1、查看jdk版本

java -version

这里写图片描述


2、安装mysql


2.1、下载mysql并解压

wget http://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-5.6/mysql-5.6.33.tar.gz

这里写图片描述

 tar -zxvf mysql-5.6.33.tar.gz 

这里写图片描述


2.2 、安装cmake编译工具

yum install cmake -y

这里写图片描述


2.3、安装依赖

 yum install ncurses-devel –y    ##用于终端操作的开发包 

这里写图片描述


2.4、添加用户

useradd -u 8001 -s /sbin/nologin mysql

这里写图片描述


2.5 、创建数据库存放目录

mkdir /data

这里写图片描述


2.6 、编译安装

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/data -DMYSQL_USER=mysql

扩展

参数说明

-DCMAKE_INSTALL_PREFIX #数据文件存放目录
-DMYSQL_UNIX_ADDR #sock文件路径
-DDEFAULT_CHARSET #默认字符集
-DDEFAULT_COLLATION #默认字符校对
-DWITH_EXTRA_CHARSETS #扩展字符支持 默认all
-DWITH_storage_STORAGE_ENGINE #存储引擎的支持,默认支持MyISAM,MERGE,MEMORY,CVS存储引擎
-DENABLED_LOCAL_INFILE=1 #启用加载本地数据
-DMYSQL_DATADIR #数据存放目录
-DMYSQL_USER #mysql运行用户

扩展

-DWITH_PARTITION_STORAGE_ENGINE=1 #支持分区表
-DINSTALL_LIBDIR=dir_name
-DSYSCONFDIR=dir_name #The default my.cnf option file directory

这里写图片描述


 make -j 4 && make install

这里写图片描述

该编译过程过长,各位耐心等待些哈


2.7 、授权用户

chown -R mysql:mysql  /usr/local/mysql/
chown -R mysql:mysql /data
chmod 1777 /tmp

这里写图片描述

2.8 、创建配置文件

cd  /usr/local/mysql/
cp support-files/my-default.cnf /etc/my.cnf

这里写图片描述

2.9、设置环境变量

echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
source !$

这里写图片描述

2.10、创建服务启动脚本,添加开机启动

cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld     ##给脚本添加执行权限

这里写图片描述


修改mysqld的内容,修改这两个属性字段的内容

basedir=/usr/local/mysql  MySQL安装目录
datadir= /data   数据存放目录

这里写图片描述


 chkconfig mysqld on  添加开机启动

这里写图片描述


查看是否已经在开机自启动列表中

chkconfig --list

这里写图片描述


2.11 、初始化数据库

chmod +x scripts/mysql_install_db
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data --user=mysql

这里写图片描述


2.12 、初始化安全配置

mysql_secure_installation  ## 安全初始化配置

没有启动mysql然后这样使用命令,必然会报错


这里写图片描述


所以先用ctrl+c终止运行,然后启动mysql

service mysqld restart 

service mysqld start

这里写图片描述


我们查看mysql是否已经真的启动了


这里写图片描述

再次运行上诉的命令

mysql_secure_installation  ## 安全初始化配置

这里写图片描述


这里写图片描述


其余情况下,输入y

2.13 、登录测试

这里写图片描述


此时此刻,可以确定,mysql安装成功。

3、安装mycat

1、下载mycat

地址:
https://github.com/MyCATApache/Mycat-download

为了方便,我已经下载下来。我选择的版本是1.6版本

2、解压

tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
cp -r mycat/ /usr/local/

这里写图片描述


这里写图片描述


为了以后更好看目录结构,下tree(可选)

yum -y install tree

这里写图片描述


这里写图片描述


3.3、创建用户并修改配置文件

为了更好的进入mycat,设置MYCAT_HOME的变量

vim /etc/profile

修改增加下列内容

MYCAT_HOME=/usr/local/Mycat

这里写图片描述


使得变量生效

source !$ 

这里写图片描述

修改server.xml

vim conf/server.xml

这里写图片描述

开启实时统计,便于后期安装mycat-eye的监测

<property name="useSqlStat">1</property>  
<!-- 1为开启实时统计、0为关闭 -->

这里写图片描述


这四项都去掉注释,使得生效

<!--默认是65535 64K 用于sql解析时最大文本长度 -->
                <property name="maxStringLiteralLength">65535</property>
                <property name="sequnceHandlerType">0</property>
                <property name="backSocketNoDelay">1</property>
                <property name="frontSocketNoDelay">1</property>

最主要的看下面的配置,这是连接mycat的时候的用户名和密码

这里写图片描述


mycat的用户名和密码
用户名 密码
root 123456
user user

修改schema.xml

vim conf/schema.xml

修改的内容是有关于table的地方,主要是将主键名改掉

<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

        <!-- global table is auto cloned to all defined data nodes ,so can join
            with any table whose sharding node is in the same data node -->
        <table name="company" primaryKey="company_id" type="global" dataNode="dn1,dn2,dn3" />
        <table name="goods" primaryKey="goods_id" type="global" dataNode="dn1,dn2" />
        <!-- random sharding using mod sharind rule -->
        <table name="hotnews" primaryKey="hotnews_id" autoIncrement="true" dataNode="dn1,dn2,dn3"
               rule="mod-long" />
        <!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global"
            needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3"
            rule="mod-long" /> -->
        <table name="employee" primaryKey="employee_id" dataNode="dn1,dn2"
               rule="sharding-by-intfile" />
        <table name="customer" primaryKey="customer_id" dataNode="dn1,dn2"
               rule="sharding-by-murmur">
            <childTable name="orders" primaryKey="order_id" joinKey="customer_id"
                        parentKey="customer_id">
                <childTable name="order_items" joinKey="order_id"
                            parentKey="order_id" />
            </childTable>
            <childTable name="customer_addr" primaryKey="customer_addr_id" joinKey="customer_id"
                        parentKey="customer_id" />
        </table>

其次,需要修改的还有writeHost部分,去掉非localhost(将其改成127.0.0.1更好)


这里写图片描述


修改rule.xml


既然修改了表的主键名,所应用的规则,也应该一并修改


这里写图片描述

具体按照实际情况来,不一定非要按照我所写的。

3.4、建表和库初始化连接数据

准备3个sql文件,用于初始化mycat测试。


db1.sql

/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 50623
Source Host           : localhost:3306
Source Database       : db1

Target Server Type    : MYSQL
Target Server Version : 50623
File Encoding         : 65001

Date: 2016-11-09 14:32:13
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `company`
-- ----------------------------
DROP TABLE IF EXISTS `company`;
CREATE TABLE `company` (
  `company_id` varchar(64) NOT NULL DEFAULT 'company',
  `company_name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of company
-- ----------------------------
INSERT INTO `company` VALUES ('1', 'hp');

-- ----------------------------
-- Table structure for `customer`
-- ----------------------------
DROP TABLE IF EXISTS `customer`;
CREATE TABLE `customer` (
  `customer_id` varchar(64) NOT NULL,
  `customer_name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`customer_id`),
  KEY `customer_id` (`customer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of customer
-- ----------------------------

-- ----------------------------
-- Table structure for `customer_addr`
-- ----------------------------
DROP TABLE IF EXISTS `customer_addr`;
CREATE TABLE `customer_addr` (
  `customer_addr` varchar(64) NOT NULL,
  `customer_id` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`customer_addr`),
  KEY `custom` (`customer_id`),
  CONSTRAINT `custom` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of customer_addr
-- ----------------------------

-- ----------------------------
-- Table structure for `employee`
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
  `employee_id` varchar(64) NOT NULL,
  `employee_name` varchar(64) DEFAULT NULL,
  `employee_address` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`employee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of employee
-- ----------------------------

-- ----------------------------
-- Table structure for `goods`
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
  `good_id` varchar(64) NOT NULL,
  `good_name` varchar(64) DEFAULT NULL,
  `good_price` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`good_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of goods
-- ----------------------------

-- ----------------------------
-- Table structure for `hotnews`
-- ----------------------------
DROP TABLE IF EXISTS `hotnews`;
CREATE TABLE `hotnews` (
  `hotnews_id` varchar(64) NOT NULL,
  `hotnews_an` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`hotnews_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of hotnews
-- ----------------------------
INSERT INTO `hotnews` VALUES ('795528865165479936', 'hp');

-- ----------------------------
-- Table structure for `orders`
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
  `orders_id` varchar(64) NOT NULL,
  `customer_id` varchar(64) NOT NULL,
  PRIMARY KEY (`orders_id`),
  KEY `customer_id` (`customer_id`),
  CONSTRAINT `customer_id` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of orders
-- ----------------------------

-- ----------------------------
-- Table structure for `order_items`
-- ----------------------------
DROP TABLE IF EXISTS `order_items`;
CREATE TABLE `order_items` (
  `order_items_id` varchar(64) NOT NULL,
  `order_id` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`order_items_id`),
  KEY `order` (`order_id`),
  CONSTRAINT `order` FOREIGN KEY (`order_id`) REFERENCES `orders` (`orders_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of order_items
-- ----------------------------

-- ----------------------------
-- Table structure for `travelrecord`
-- ----------------------------
DROP TABLE IF EXISTS `travelrecord`;
CREATE TABLE `travelrecord` (
  `travelrecord_id` varchar(255) NOT NULL,
  `travelrecord_name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`travelrecord_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of travelrecord
-- ----------------------------

db2.sql

/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 50623
Source Host           : localhost:3306
Source Database       : db2

Target Server Type    : MYSQL
Target Server Version : 50623
File Encoding         : 65001

Date: 2016-11-09 14:32:27
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `company`
-- ----------------------------
DROP TABLE IF EXISTS `company`;
CREATE TABLE `company` (
  `company_id` varchar(64) NOT NULL DEFAULT 'company',
  `company_name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of company
-- ----------------------------
INSERT INTO `company` VALUES ('1', 'hp');

-- ----------------------------
-- Table structure for `customer`
-- ----------------------------
DROP TABLE IF EXISTS `customer`;
CREATE TABLE `customer` (
  `customer_id` varchar(64) NOT NULL,
  `customer_name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`customer_id`),
  KEY `customer_id` (`customer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of customer
-- ----------------------------

-- ----------------------------
-- Table structure for `customer_addr`
-- ----------------------------
DROP TABLE IF EXISTS `customer_addr`;
CREATE TABLE `customer_addr` (
  `customer_addr` varchar(64) NOT NULL,
  `customer_id` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`customer_addr`),
  KEY `custom` (`customer_id`),
  CONSTRAINT `custom` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of customer_addr
-- ----------------------------

-- ----------------------------
-- Table structure for `employee`
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
  `employee_id` varchar(64) NOT NULL,
  `employee_name` varchar(64) DEFAULT NULL,
  `employee_address` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`employee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of employee
-- ----------------------------

-- ----------------------------
-- Table structure for `goods`
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
  `good_id` varchar(64) NOT NULL,
  `good_name` varchar(64) DEFAULT NULL,
  `good_price` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`good_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of goods
-- ----------------------------

-- ----------------------------
-- Table structure for `hotnews`
-- ----------------------------
DROP TABLE IF EXISTS `hotnews`;
CREATE TABLE `hotnews` (
  `hotnews_id` varchar(64) NOT NULL,
  `hotnews_an` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`hotnews_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of hotnews
-- ----------------------------
INSERT INTO `hotnews` VALUES ('1', 'hp');

-- ----------------------------
-- Table structure for `orders`
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
  `orders_id` varchar(64) NOT NULL,
  `customer_id` varchar(64) NOT NULL,
  PRIMARY KEY (`orders_id`),
  KEY `customer_id` (`customer_id`),
  CONSTRAINT `customer_id` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of orders
-- ----------------------------

-- ----------------------------
-- Table structure for `order_items`
-- ----------------------------
DROP TABLE IF EXISTS `order_items`;
CREATE TABLE `order_items` (
  `order_items_id` varchar(64) NOT NULL,
  `order_id` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`order_items_id`),
  KEY `order` (`order_id`),
  CONSTRAINT `order` FOREIGN KEY (`order_id`) REFERENCES `orders` (`orders_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of order_items
-- ----------------------------

-- ----------------------------
-- Table structure for `travelrecord`
-- ----------------------------
DROP TABLE IF EXISTS `travelrecord`;
CREATE TABLE `travelrecord` (
  `travelrecord_id` varchar(255) NOT NULL,
  `travelrecord_name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`travelrecord_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of travelrecord
-- ----------------------------

db3.sql

/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 50623
Source Host           : localhost:3306
Source Database       : db3

Target Server Type    : MYSQL
Target Server Version : 50623
File Encoding         : 65001

Date: 2016-11-09 14:32:36
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `company`
-- ----------------------------
DROP TABLE IF EXISTS `company`;
CREATE TABLE `company` (
  `company_id` varchar(64) NOT NULL DEFAULT 'company',
  `company_name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of company
-- ----------------------------
INSERT INTO `company` VALUES ('1', 'hp');

-- ----------------------------
-- Table structure for `hotnews`
-- ----------------------------
DROP TABLE IF EXISTS `hotnews`;
CREATE TABLE `hotnews` (
  `hotnews_id` varchar(64) NOT NULL,
  `hotnews_an` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`hotnews_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of hotnews
-- ----------------------------

-- ----------------------------
-- Table structure for `travelrecord`
-- ----------------------------
DROP TABLE IF EXISTS `travelrecord`;
CREATE TABLE `travelrecord` (
  `travelrecord_id` varchar(255) NOT NULL,
  `travelrecord_name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`travelrecord_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of travelrecord
-- ----------------------------

3.5 、建表和库


将sql文件均放在了root/init_sql/下

mkdir /usr/local/init_sql
mv /root/init_sql/* /usr/local/init_sql/

这里写图片描述


mysql -u root -p

这里写图片描述


创建db1,并运行sql文件

create schema db1;
use db1
source  /usr/local/init_sql/db1.sql

这里写图片描述

create schema db2;
use db2
source  /usr/local/init_sql/db2.sql

这里写图片描述


create schema db3;
use db3
source  /usr/local/init_sql/db3.sql

这里写图片描述


3.6 、运行mycat

 ./bin/mycat start

这里写图片描述


查看是否启动

ps faux | grep mycat

这里写图片描述

测试运行


mysql -u root -p -P8066 -h 127.0.0.1
show databases;

这里写图片描述


由此确定,是真正的安装成功了。

插入数据测试


这里写图片描述


这里写图片描述


3.7 、修改log4j的配置

为了让信息启动时更好定位,需要将conf/log4j2.xml的文件修改为debug级别。

这里写图片描述

总结

关于MyCAT的配置其实是蛮简单的,最主要的是熟悉各配置文件的规则。以上用户名,密码,如何分库,都是在配置文件中定义的,后续,有时间再一一详解。
关于配置文件,conf目录下主要以下三个需要熟悉。

server.xml是Mycat服务器参数调整和用户授权的配置文件

schema.xml是逻辑库定义和表以及分片定义的配置文件

rule.xml是分片规则的配置文件

猜你喜欢

转载自blog.csdn.net/YuYunTan/article/details/53160960