前面的文章,介绍了关于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的版本)。
java -version
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
yum install cmake -y
yum install ncurses-devel –y ##用于终端操作的开发包
useradd -u 8001 -s /sbin/nologin mysql
mkdir /data
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
该编译过程过长,各位耐心等待些哈
chown -R mysql:mysql /usr/local/mysql/
chown -R mysql:mysql /data
chmod 1777 /tmp
cd /usr/local/mysql/
cp support-files/my-default.cnf /etc/my.cnf
echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
source !$
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
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
mysql_secure_installation ## 安全初始化配置
没有启动mysql然后这样使用命令,必然会报错
所以先用ctrl+c终止运行,然后启动mysql
service mysqld restart
或
service mysqld start
我们查看mysql是否已经真的启动了
再次运行上诉的命令
mysql_secure_installation ## 安全初始化配置
其余情况下,输入y
此时此刻,可以确定,mysql安装成功。
地址:
https://github.com/MyCATApache/Mycat-download
为了方便,我已经下载下来。我选择的版本是1.6版本
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
cp -r mycat/ /usr/local/
为了以后更好看目录结构,下tree(可选)
yum -y install tree
为了更好的进入mycat,设置MYCAT_HOME的变量
vim /etc/profile
修改增加下列内容
MYCAT_HOME=/usr/local/Mycat
使得变量生效
source !$
vim conf/server.xml
开启实时统计,便于后期安装mycat-eye的监测
<property name="useSqlStat">1property>
这四项都去掉注释,使得生效
<property name="maxStringLiteralLength">65535property>
<property name="sequnceHandlerType">0property>
<property name="backSocketNoDelay">1property>
<property name="frontSocketNoDelay">1property>
最主要的看下面的配置,这是连接mycat的时候的用户名和密码
用户名 | 密码 |
---|---|
root | 123456 |
user | user |
vim conf/schema.xml
修改的内容是有关于table的地方,主要是将主键名改掉
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
<table name="company" primaryKey="company_id" type="global" dataNode="dn1,dn2,dn3" />
<table name="goods" primaryKey="goods_id" type="global" dataNode="dn1,dn2" />
<table name="hotnews" primaryKey="hotnews_id" autoIncrement="true" dataNode="dn1,dn2,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更好)
既然修改了表的主键名,所应用的规则,也应该一并修改
具体按照实际情况来,不一定非要按照我所写的。
准备3个sql文件,用于初始化mycat测试。
/*
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
-- ----------------------------
/*
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
-- ----------------------------
/*
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
-- ----------------------------
将sql文件均放在了root/init_sql/下
mkdir /usr/local/init_sql
mv /root/init_sql/* /usr/local/init_sql/
mysql -u root -p
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
./bin/mycat start
ps faux | grep mycat
mysql -u root -p -P8066 -h 127.0.0.1
show databases;
由此确定,是真正的安装成功了。
为了让信息启动时更好定位,需要将conf/log4j2.xml的文件修改为debug级别。
关于MyCAT的配置其实是蛮简单的,最主要的是熟悉各配置文件的规则。以上用户名,密码,如何分库,都是在配置文件中定义的,后续,有时间再一一详解。
关于配置文件,conf目录下主要以下三个需要熟悉。
server.xml是Mycat服务器参数调整和用户授权的配置文件
schema.xml是逻辑库定义和表以及分片定义的配置文件
rule.xml是分片规则的配置文件