一 mycat安装详细步骤
1.mycat安装路径
Mycat1.6Mycat1.6数据库分库分表中间件http://www.mycat.org.cn/mycat1.html
2.我们先把他拉倒opt目录下
3. 开始解压
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
解压完成之后
4.解压完成之后cp到usr/local目录下
cp -r mycat /usr/local
5. 查看是否粘贴到usr/local目录下
ls /usr/local
6.切换到usr/local/mycat目录下
cd /usr/local/mycat/
7.进到 mycat里面的conf目录下
cd conf
里面有三个重要的配置文件
8.将server.xml文件替换成已下内容
(文件所在位置)
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
<property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="sequnceHandlerType">2</property>
<!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
<!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!--
<property name="processors">1</property>
<property name="processorExecutor">32</property>
-->
<!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
<property name="processorBufferPoolType">0</property>
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
<!--<property name="maxStringLiteralLength">65535</property>-->
<!--<property name="sequnceHandlerType">0</property>-->
<!--<property name="backSocketNoDelay">1</property>-->
<!--<property name="frontSocketNoDelay">1</property>-->
<!--<property name="processorExecutor">16</property>-->
<!--
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
<property name="handleDistributedTransactions">0</property>
<!--
off heap for merge/order/group/limit 1开启 0关闭
-->
<property name="useOffHeapForMerge">1</property>
<!--
单位为m
-->
<property name="memoryPageSize">1m</property>
<!--
单位为k
-->
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<!--
单位为m
-->
<property name="systemReserveMemorySize">384m</property>
<!--是否采用zookeeper协调切换 -->
<property name="useZKSwitch">true</property>
</system>
<!-- 全局SQL防火墙设置 -->
<!--
<firewall>
<whitehost>
<host host="127.0.0.1" user="mycat"/>
<host host="127.0.0.2" user="mycat"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
-->
<user name="mycat">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
server.xml有mycat的用户名跟密码
9.将schema.xml文件修改成一下内容(记得认真看文件里面的注释哦)
(文件所在位置
)
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<!-- testdb是数据库名 你没有这个testdb数据库会报错 或者换成自己的数据库 -->
<dataNode name="dn1" dataHost="host1" database="testdb" />
<!-- balance="1" 开启读写分离 -->
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心跳机制检测 -->
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<!-- 128是写 133是读 密码是数据库密码 下面两个密码都是 128跟133 IP地址数据库的密码 -->
<writeHost host="hostM1" url="192.168.138.128:3306" user="root"
password="root">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.138.133:3306" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
database="testdb" 128跟133两个连接都需要testdb(数据库名) 可以使用你自己的
10 修改完两个配置文件之后验证数据库的访问情况
远程测试访问
(1)先测试133
mysql -u账号 -p密码 -h 远程访问 IP地址 -大写P 端口号
mysql -uroot -proot -h 192.168.138.133 -P 3306
以上是没有问题 exit 退出
(2) 测试128
mysql -u账号 -p密码 -h 远程访问 IP地址 -大写P 端口号
mysql -uroot -proot -h 192.168.138.128 -P 3306
完成之后 exit退出即可
验证远程没问题
11.启动程序
进到 mycat的bin目录下
cd /usr/local/mycat/bin/
我们选择控制台启动,因为控制台启动可以看到输出日志,对我们解决问题很方便
./mycat console
12.登陆Mycat(两种登陆方式,我们使用第二中方式登陆)
(1)登陆后台管理窗口
用于咱运维人员维护mycat用的 可以看到mycat的数据(不使用此方法登陆)
(2)登陆数据窗口 (使用此方法登陆)
次登陆方式用于通过mycat查询数据
格式: mysql -umycat账号 -p密码 -h ip地址 -P 8066
mysql -umycat -p123456 -h 192.168.138.128 -P 8066
查看数据库
(命令后面的分号是必须要)
show databases;
进入数据库(区分大小写)
use TESTDB
查看数据库的表
(命令后面的分号是必须要)
show tables;
以上mycat安装完成,我们需要搭建mycat的主从赋值
二 mycat的读写分离 一主一从
1 . 修改主机配置文件(我使用的主机是安装mycat的): vim /etc/my.cnf
[mysqld] 主服务器唯一ID server-id=1 启动二进制日志 log-bin=mysql-bin 设置不要复制的数据库(可设置多个) binlog-ignore-db=mysql 设置需要复制的数据库 binlog-do-db=需要复制的主数据库名字 设置logbin格式 binlog_format=STATEMENT |
[mysqld] server-id=1 log-bin=mysql-bin binlog-ignore-db=mysql binlog-do-db=testdb binlog_format=STATEMENT |
schema.xml在usr/local/mycat/conf目录下
改完之后wq保存退出
2 .修改从机配置文件:vim /etc/my.cnf
[mysqld] 从服务器唯一ID server-id=2 启动中继日志 relay-log=mysql-relay |
[mysqld] server-id=2 relay-log=mysql-relay |
修改完保存退出即可;
3 .主机从机重启mysql
我们修改完配置文件,还没有生效,我们需要重启一下mysql(主机跟从机都需要重启)
systemctl restart mysqld
查看mysql状态
systemctl status mysqld
4 .主机从机关闭防火墙
(1)先查询是否关闭防火墙
systemctl status firewalld
关闭状态
(2)如果没有关闭,关闭一下
systemctl stop firewalld
5. 在主机上建立账号并授权slave
在主机mysql里面执行授权命令 (1) 先进入mysql 格式 : mysql -u数据库账号 -p数据库密码 mysql -uroot -proot (2)进行授权 GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '密码';(分号必须要) GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'root'; 下面是成功:
|
查询master的状态(后面的;号必须加) show master status;
|
6 . 在从机上配置需要复制的主机
(1)登录 主机数据库 命令格式: mysql -u账户 -p密码 mysql -uroot -proot (2)直接输入命令 CHANGE MASTER TO MASTER_HOST='主机的ip地址', MASTER_USER='slave', MASTER_PASSWORD='数据库密码', MASTER_LOG_FILE='binlog日志的名字',(看上图,数字 ) MASTER_LOG_POS=接入点; (如果之前搭建过主从,会报错,需要先执行一下:(stop slave;)分号必须要 然后执行:(reset master;)分号必须要 ) (3) 启动从服务器复制功能(分号必须要) start slave; show slave status\G; |
以上主从已经配置完成!下面让我们来测试一下
测试主从:
在主机测试
(1)登陆mysql(登陆过了就不用登陆) mysql -u数据库名 -p数据库密码 (2)切换数据库 use testdb (3)填写建表 create table mytbl(id int,name varchar(20)); (4) 添加字段 insert into mytbl values(1,'zhang3'); (5)查询 select * from mytbl;
|
到从机测试:
(1)登陆mysql(登陆过了就不用登陆) mysql -u数据库名 -p数据库密码 (2)切换数据库 use testdb (3)查询 select * from mytbl;
|
主从已经没有问题了!
下面这张图片可以重新配置主从
读写分离:
上面我们已经在schema.xml配置好了读写分离
balance=“1” 开启读写分离
(1) 打开一个主机窗口 先启动mycat 先进入bin目录 cd /usr/local/mycat/bin 启动 ./mycat console (2) 然后在打开一个主机窗口 登陆mycat 格式: mysql -umycat账号 -pmycat密码 -h 自己的IP地址 -P 端口号 mysql -umycat -p123456 -h 192.168.138.128 -P 8066 (3) 切换数据库 use TESTDB; (4)然后再打开个主机窗口 登陆mysql mysql -u数据库账号 -p密码 mysql -uroot -proot 登陆完成之后增加一条数据 insert into mytbl values (2,@@hostname); 然后查询表 select * from tytbl; 先登录mysql mysql -uroot -proot 然后切换数据库 use testdb 然后查询表 select * from tytbl;
(6) 切换到mycat查询 select * from mytbl;
我的主机: 我的从机:
|
搭建完毕!
请耐心搭建,一步错,步步错