mysql的主从配置沿用上一篇博客的配置:

1.首先安装MySQL ab:

实战操作可参考:

mycat下载地址:

192.168.6.163 master

一、环境

试验版本:Mycat-server-1.6-release 

192.168.6.167 slave

操作系统:CentOS-6.6-x86_64-bin-DVD1.iso

# cd /usr/local
# mv ~/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz /usr/local
# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
# cd /usr/local/mycat/conf/
# vim server.xml 查看mycat用户的默认配置

master: vi /etc/opt/rh/rh-mysql57/my.cnf.d/rh-mysql57-mysql-server.cnf

JDK版本:jdk1.7.0_45

<!– mycat的默认用户配置,保持不变即可 –>
<user name=”root”>
  <property name=”password”>123456</property>
  <property name=”schemas”>TESTDB</property>
</user>

log-bin=mysql-bin

MyCat版本:Mycat-server-1.4-release-20151019230038-linux.tar.gz

  # vim schema.xml 修改schema配置读写分离

server-id=101

MyCat节点IP:192.168.1.203      主机名:edu-mycat-01  主机配置:4核CPU、4G内存

<?xml version=”1.0″?>
<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>
<mycat:schema xmlns:mycat=”;
  <schema name=”TESTDB” checkSQLschema=”false”
sqlMaxLimit=”100″>
    <!– 设置物理表 –>
    <table name=”student” dataNode=”dn1″ />
  </schema>
  <!– 设置物理库 –>
  <dataNode name=”dn1″ dataHost=”localhost1″ database=”test”
/>  
    <!– balance=1设置为读写分离 –>
    <dataHost name=”localhost1″ maxCon=”1000″ minCon=”10″
balance=”1″ writeType=”0″ dbType=”mysql” dbDriver=”native”
switchType=”1″ slaveThreshold=”100″>
    <heartbeat>select user()</heartbeat>
    <!– 读库配置 –>
    <writeHost host=”hostM1″ url=”xxx.xxx.xxx.xxx:3306″
user=”root” password=”xxxxxx”>
      <!– 读库配置,可配置多个读库 –>
      <readHost host=”hostS2″ url=”xxx.xxx.xxx.xxx:3316″
user=”root” password=”xxxxxx” />
    </writeHost>
  </dataHost>
</mycat:schema>

* grant replication slave on *.* to replica@’%’ identified by
‘password’; *

MySQL版本:mysql-5.6.26.tar.gz

# cd ../bin
# ./mycat start 启动mycat
# ps -aux | grep mycat 查看mycat是否启动成功

flush privileges;

主节点IP:192.168.1.205     主机名:edu-mysql-01   主机配置:4核CPU、4G内存

在客户端新建一个链接到mycat的数据库连接,用户名密码为server.xml中配置的用户

exit

从节点IP:192.168.1.206     主机名:edu-mysql-02   主机配置:4核CPU、4G内存

图片 1  

slave:vi /etc/opt/rh/rh-mysql57/my.cnf.d/rh-mysql57-mysql-server.cnf

 

连接中库为TESTDB,也是在server.xm中配置的

log-bin=mysql-bin
server-id=102
read_only=1
report-host=node01.srv.world

二、依赖课程

图片 2

systemctl restart rh-mysql57-mysqld 

《高可用架构篇–第13节–MySQL源码编译安装(CentOS-6.6+MySQL-5.6)》

下面验证读写分离

master:

《高可用架构篇–第14节–MySQL主从复制的配置(CentOS-6.6+MySQL-5.6)》

mycat:图片 3

flush tables with read lock; 

注意:上一节课中讲到的MySQL主从复制配置,在用MyCat做主从读写分离或其结合实际项目场景应用中,主从复制配置还需要按实际需求情况进行调整。

写库:图片 4

show master status; 

(调整后的主从数据库my.cnf配置文件,随视频教程压缩包提供)

读库:图片 5

mysqldump -u root -p –all-databases –lock-all-tables –events >
mysql_dump.sql 

 

修改读库的数据:图片 6

unlock tables;

三、MyCat介绍  ( MyCat官网: )

mycat中的数据和读库数据一致:图片 7

scp mysql_dump.sql node01.srv.world:/tmp/ 

MyCat的读写分离是基于后端MySQL集群的主从同步来实现的,而MyCat提供语句的分发功能。MyCat1.4开始支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠。

停止读库的服务:图片 8

slave:

                                              
图片 9
 

mycat插入一条数据:图片 10

mysql -u root -p < /tmp/mysql_dump.sql 

四、MyCat的安装

写库中存在插入的数据:图片 11

change master to
master_host=’192.168.6.163′,
master_user=’replica’,
master_log_file=’mysql-bin.000001′,40
master_log_pos=732;

1、设置MyCat的主机名和IP与主机名的映射

 

start slave;

# vi /etc/sysconfig/network

至此通过mycat实现mysql的读写分离配置成功。

* show slave statusG*

NETWORKING=yes

ps.mycat最大的功能在于对数据库分片的处理,如果有机会,以后会进行相关的试验。

安装成功;

HOSTNAME=edu-mycat-01

 

2.安装mycat

# vi /etc/hosts

首先配置jdk:

127.0.0.1 edu-mycat-01

jdk-8u73-linux-x64.rpm 这个直接yum -y install 

192.168.1.203 edu-mycat-01

解压:Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

192.168.1.205 edu-mysql-01

groupadd dba

useradd -g dba mycat

passwd mycat

mkdri /home/mycat/app
mv mycat /home/mycat/app/mycat

192.168.1.206 edu-mysql-02

vim /home/mycat/.bash_profile

 

export MYCAT_HOME=/home/mycat/app/mycat
PATH=$PATH:$MYCAT_HOME/bin

source .bash_profile

vim /etc/my.cnf

lower_case_table_names = 1
我的server.xml,schema.xml

2、因为MyCat是用Java开发的,因此MyCat运行需要安装JDK(准确来说是JRE就够了),并且需要JDK1.7或以上版本

[root@java1 ~]# cat $MYCAT_HOME/conf/server.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<!– – – Licensed under the Apache License, Version 2.0 (the
“License”);

# vi /etc/profile

  • you may not use this file except in compliance with the License. –
    You
    may obtain a copy of the License at – –
    • 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=”;
    <system>
    <property name=”useSqlStat”>0</property> <!–
    1为开启实时统计、0为关闭 –>
    <property name=”useGlobleTableCheck”>0</property> <!–
    1为开启全加班一致性检测、0为关闭 –>

## java env

<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>

export JAVA_HOME=/usr/local/java/jdk1.7.0_72

<!–
off heap for merge/order/group/limit 1开启 0关闭
–>
<property name=”useOffHeapForMerge”>1</property>

export JRE_HOME=$JAVA_HOME/jre

<!–
单位为m
–>
<property name=”memoryPageSize”>1m</property>

export
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar

<!–
单位为k
–>
<property name=”spillsFileBufferSize”>1k</property>

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

<property name=”useStreamOutput”>0</property>

# source /etc/profile

<!–
单位为m
–>
<property name=”systemReserveMemorySize”>384m</property>

# java -version

<!–是否采用zookeeper协调切换 –>
<property name=”useZKSwitch”>true</property>

 

</system>

3、创建mycat用户并设置密码

<!– 全局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>
–>

# useradd mycat

<user name=”root”>
<property name=”password”>*****</property>
<property
name=”schemas”>information_schema,infosys,mysql,performance_schema,sys</property>

# passwd mycat

<!– 表级 DML 权限设置 –>
<!–
<privileges check=”false”>
<schema name=”TESTDB” dml=”0110″ >
<table name=”tb01″ dml=”0000″></table>
<table name=”tb02″ dml=”1111″></table>
</schema>
</privileges>
–>
</user>
</mycat:server>

 

[root@java1 logs]# cat ../conf/schema.xml
<?xml version=”1.0″?>
<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>
<mycat:schema xmlns:mycat=”;

4、上传安装包 Mycat-server-1.4-release-20151019230038-linux.tar.gz 到 MyCat服务器中的/home/mycat目录,并解压并移动到 /usr/local/mycat目录

<schema name=”information_schema” checkSQLschema=”false”
sqlMaxLimit=”100″ dataNode=”dn1″>
</schema>
<schema name=”infosys” checkSQLschema=”false” sqlMaxLimit=”100″
dataNode=”dn2″>
</schema>
<schema name=”mysql” checkSQLschema=”false” sqlMaxLimit=”100″
dataNode=”dn3″>
</schema>
<schema name=”performance_schema” checkSQLschema=”false”
sqlMaxLimit=”100″ dataNode=”dn4″>
</schema>
<schema name=”sys” checkSQLschema=”false” sqlMaxLimit=”100″
dataNode=”dn5″>
</schema>
<dataNode name=”dn1″ dataHost=”192.168.6.163″ database=”infosys”
/>
<dataNode name=”dn2″ dataHost=”192.168.6.163″
database=”information_schema” />
<dataNode name=”dn3″ dataHost=”192.168.6.163″ database=”mysql”
/>
<dataNode name=”dn4″ dataHost=”192.168.6.163″
database=”performance_schema” />
<dataNode name=”dn5″ dataHost=”192.168.6.163″ database=”sys” />
<dataHost name=”192.168.6.163″ maxCon=”1000″ minCon=”10″
balance=”2″
writeType=”0″ dbType=”mysql” dbDriver=”native” switchType=”1″
slaveThreshold=”100″>
<heartbeat>select user()</heartbeat>
<!– can have multi write hosts –>
<writeHost host=”192.168.6.163″ url=”192.168.6.167:3306″
user=”root”
password=”******”>
<!– can have multi read hosts –>
<!– <readHost host=”hostS2″ url=”192.168.6.163:3306″ user=”root”
password=”*****” /> –>
<readHost host=”192.168.6.167″ url=”192.168.6.167:3306″ user=”root”
password=”******”>
</readHost>
</writeHost>
</dataHost>
</mycat:schema>

$ tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz

启动起来:mycat start
登录:
[root@java1 ~]# mysql -h192.168.6.168 -uroot -p**** -P 9066

图片 12
 

 

$ su root

好了,现在再研究它怎么使用和要出现的问题怎么处理。

Password:

后期 学习下面的,路漫漫啊:

# mv /home/mycat/mycat  /usr/local/

1, mycat (主从) + mysql (一主多从) 读写分离。

# cd /usr/local/mycat/

2, mycat(主从)+ mysql (多主N从) 分库分表。

# ll

3, haproxy + mycat + mysql

图片 13
 

4, haproxy +keepalive+mycat + mysql galera cluster + mysql

 

5, mycat + oracle (dg) 读写分离。

5、设置MyCat的环境变量

6, mycat+web 监控

# vi /etc/profile

## mycat env

export MYCAT_HOME=/usr/local/mycat

export PATH=$PATH:$MYCAT_HOME/bin

# source /etc/profile

 

五、配置MyCat

1、在配置MyCat前,请确认MySQL的主从复制安装配置已完成并正常运行。MySQL主从数据的同步在MySQL中配置,MyCat不负责数据同步的问题。

补充:

(1)
MySQL主从复制配置中,如果涉及到函数或存储过程的同步复制,需要在/etc/my.cnf中的[mysqld]段中增加配置log_bin_trust_function_creators=true 或在客户端中设置 set
global log_bin_trust_function_creators = 1;

(2) 如果要做读写分离下的主从切换,那么从节点也有可能会变为写节点,因此从节点就不能设置为只读 read_only=1 。

(3)
Linux版本的MySQL,需要设置为MySQL大小写不敏感,否则可能会发生找不到表的问题。可在/etc/my.cnf的[mysqld]段中增加lower_case_table_names=1 。

 

2、配置MyCat的schema.xml

schema.xml是MyCat最重要的配置文件之一,用于设置MyCat的逻辑库、表、数据节点、dataHost等内容,

[mycat@edu-mycat-01 conf]$ cd /usr/local/mycat/conf/

[mycat@edu-mycat-01 conf]$ vi schema.xml

<?xml version=”1.0″?>

<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>

<mycat:schema xmlns:mycat=”;

      <!– 定义MyCat的逻辑库,逻辑库的概念与MySQL中的 database 概念相同 –>

      <!– schema
name=”rc_schema1″ checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”rc_dn1″></schema
–>

<!–schema
name=”pay_schema1″ checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”pay_dn1″></schema–>

      <schema name=”rc_schema2″ checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”rc_dn2″></schema>

      <schema name=”pay_schema2″ checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”pay_dn2″></schema>

<!– 其中checkSQLschema表明是否检查并过滤SQL中包含schema的情况,如逻辑库为 TESTDB,则可能写为select
* from TESTDB.edu_user,此时会自动过滤TESTDB,SQL变为select * from
edu_user,若不会出现上述写法,则可以关闭属性为false –>

<!–sqlMaxLimit默认返回的最大记录数限制,MyCat1.4版本里面,用户的Limit参数会覆盖掉MyCat的sqlMaxLimit默认设置–>

 

      <!– 定义MyCat的数据节点 –>

      <!– dataNode
name=”rc_dn1″ dataHost=”dtHost1″ database=”roncoo” / –>

发表评论

电子邮件地址不会被公开。 必填项已用*标注