mycat三步曲之二(mycat的下载和配置)

一、下载mycat
mycat的官网网址  http://www.mycat.org.cn/,我使用的是mycat的1.4的Linux安装包
下载地址
https://github.com/MyCATApache/Mycat-download/blob/master/1.4-RELEASE/Mycat-server-1.4-release-20151019230038-linux.tar.gz
下载mycat的安装包到 /opt 目录下
[root@admin local]#cd /opt
[root@admin local]#wget https://github.com/MyCATApache/Mycat-download/blob/master/1.4-RELEASE/Mycat-server-1.4-release-20151019230038-linux.tar.gz
[root@admin local]# tar -xvf  Mycat-server-1.4-RELEASE-20151017210032-linux.tar.gz
解压后放到/usr/local下
[root@admin local]#mv mycat /usr/local
[root@admin local]# pwd
/usr/local/mycat
[root@admin local]# ls
bin  catlet  conf  lib  logs  version.txt
以上显示的就是mycat的文件夹.
 

二、配置环境变量

检查是否已经配置好了java的环境变量(本来不打算写的,结果发现还是有好多人搞不好!!!)
[root@admin local]#vim /etc/profile
向文件里面追加以下内容:(根据自己的jdk的路径来写java_home)
JAVA_HOME=/usr/java/jdk1.8.0
JRE_HOME=/usr/java/jdk1.8.0/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
使修改生效
[root@admin local]# source /etc/profile //使修改立即生效
[root@admin local]#java -version
显示
java version “1.8.0_45”
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
表示我的java环境变量配置好了
 

三、修改mycat配置文件

接下来修改mycat的配置文件
[root@admin local]#cd /usr/local/mycat/conf
[root@admin local]#ls
autopartition-long.txt       partition-hash-int.txt    sequence_db_conf.properties
cacheservice.properties      partition-range-mod.txt   sequence_time_conf.properties
dnindex.properties           router.xml                server.xml
ehcache.xml                  rule.xml                  wrapper.conf
index_to_charset.properties  schema.xml
log4j.xml                    sequence_conf.properties
 
配置文件非常多,配置项也远比amoeba复杂.如果只是简单配置在不同的服务器上进行读写分离只需要配置两个文件
server.xml 和  schema.xml
 

(一)先配置server.xml

找到这一段
</system>
<user name=”test”>
<property name=”password”>test</property>
<property name=”schemas”>TESTDB</property>
</user>
 
<user name=”user”>
<property name=”password”>user</property>
<property name=”schemas”>TESTDB</property>
<property name=”readOnly”>true</property>
</user>
 
这里配置了两个可以来连接的用户
用户1  test   密码test   给予了此用户TESTDB数据库的权限
用户2  user   密码user   给予了此用户TESTDB数据库的只读权限
注意这里的testdb 不一定是你数据库上的真实库名.可以任意指定.只要和接下来的schema.xml的配置文件中的库名统一即可

(二)接下来配置schema.xml

<?xml version=”1.0″?>
<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>
<mycat:schema xmlns:mycat=”http://org.opencloudb/”>
 
<schema name=”TESTDB” checkSQLschema=”false” sqlMaxLimit=”100″>
<!– auto sharding by id (long) –>
<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=”ID” type=”global” dataNode=”dn1,dn2,dn3″ />
<table name=”hotnews” primaryKey=”ID” dataNode=”dn1,dn2,dn3″
rule=”mod-long” />
<!– <table name=”dual” primaryKey=”ID” dataNode=”dnx,dnoracle2″ type=”global”
rule=”mod-long” /> –>
<table name=”employee” primaryKey=”ID” dataNode=”dn1,dn2″
rule=”sharding-by-intfile” />
<table name=”customer” primaryKey=”ID” dataNode=”dn1,dn2″
rule=”sharding-by-intfile”>
<childTable name=”orders” primaryKey=”ID” joinKey=”customer_id”
parentKey=”id”>
<childTable name=”order_items” joinKey=”order_id”
parentKey=”id” />
</childTable>
<childTable name=”customer_addr” primaryKey=”ID” joinKey=”customer_id”
parentKey=”id” />
</table>
/> –>
</schema>
<!– <dataNode name=”dn1$0-743″ dataHost=”localhost1″ database=”db$0-743″
/> –>
<dataNode name=”dn1″ dataHost=”localhost1″ database=”db1″ />
<dataNode name=”dn2″ dataHost=”localhost1″ database=”db2″ />
<dataNode name=”dn3″ dataHost=”localhost1″ database=”db3″ />
<!–<dataNode name=”dn4″ dataHost=”sequoiadb1″ database=”SAMPLE” />
<dataNode name=”jdbc_dn1″ dataHost=”jdbchost” database=”db1″ />
<dataNode       name=”jdbc_dn2″ dataHost=”jdbchost” database=”db2″ />
<dataNode name=”jdbc_dn3″       dataHost=”jdbchost” database=”db3″ /> –>
<dataHost name=”localhost1″ maxCon=”1000″ minCon=”10″ balance=”0″
writeType=”0″ dbType=”mysql” dbDriver=”native” switchType=”1″  slaveThreshold=”100″>
<heartbeat>select user()</heartbeat>
<!– can have multi write hosts –>
<writeHost host=”hostM1″ url=”localhost:3306″ user=”root”
password=”123456″>
<!– can have multi read hosts –>
 
</writeHost>
<writeHost host=”hostS1″ url=”localhost:3316″ user=”root”
password=”123456″ />
 
 
看着这一大篇你是否和我一样的开始蛋疼.好复杂有木有!
算了给大家来一份我的简单点的.因为我们现在只做库的读写分离,没用分库 没用分表这些东西.
<mycat:schema xmlns:mycat=”http://org.opencloudb/”>
<schema name=”TESTDB” checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”dn1″>
</schema>
<dataNode name=”dn1″ dataHost=”localhost1″ database=”db1″ />
<dataHost name=”localhost1″ maxCon=”1000″ minCon=”10″ balance=”0″ writeType=”0″ dbType=”mysql” dbDriver=”native” switchType=”1″  slaveThreshold=”100″>
<heartbeat>select user()</heartbeat>
<writeHost host=”hostM1″ url=”192.168.1.100:3306″ user=”root” password=”123456″>
<readHost host=”hostS1″ url=”192.168.1.101:3306″ user=”root” password=”123456″ />
</writeHost>
</dataHost>
 
 

(三)配置文件解释

一,  <schema name=”TESTDB” checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”dn1″>
这里TESTDB 就是我们对外声称的我们有数据库的名称  必须和server.xml中的用户指定的数据库名称一致
添加一个dataNode=”dn1″ 是指定了我们这个库只在dn1上.没有进行分库
 
二, <dataNode name=”dn1″ dataHost=”localhost1″ database=”db1″ />
这里只需要改database的名字 db1 就是你真实数据库服务上的数据库名 .
根据你自己的数据库名进行修改.
 
三<dataHost name=”localhost1″ maxCon=”1000″ minCon=”10″ balance=”0″ writeType=”0″ dbType=”mysql” dbDriver=”native” switchType=”1″  slaveThreshold=”100″>
 
这里只需要配置三个地方    balance=”1″与writeType=”0″ ,switchType=”1”

  1. balance 属性负载均衡类型,目前的取值有 4 种:
    1. balance=”0″, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
    2. balance=”1″,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
    3. balance=”2″,所有读操作都随机的在 writeHost、 readhost 上分发。
    4. balance=”3″, 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。
  2. writeType 属性
    负载均衡类型,目前的取值有 3 种:
    1. writeType=”0″, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
    writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
    2. writeType=”1″,所有写操作都随机的发送到配置的 writeHost。
    3. writeType=”2″,没实现。
  3. switchType 属性
    – -1 表示不自动切换
    – 1 默认值,自动切换
    – 2 基于MySQL 主从同步的状态决定是否切换

四,<writeHost host=”hostM1″ url=”192.168.1.100:3306″ user=”root” password=”123456″>
<readHost host=”hostS1″ url=”192.168.1.101:3306″ user=”root” password=”123456″ />
</writeHost>
这里是配置的我们的两台读写服务器IP地址访问端口和 访问用户的用户名和密码
注意:这里配置的连接的两个库,一定要先在mycat的这台服务器上使用命令登陆这两个数据库保证没有问题后再配置.(经常发现群里有小伙伴配置的时候启动起来了出各种问题,结果是他配置的两个数据库根本就连不上!!!!!!!)
 
 
 

四、启动mycat

主要就是这两个配置文件,配置完成.们试试能否正常启动
[root@admin local]#cd /usr/local/mycat/bin
[root@admin local]#./mycat console
Running Mycat-server…
wrapper  | –> Wrapper Started as Console
wrapper  | Launching a JVM…
jvm 1    | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was remove
d in 8.0jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | log4j 2015-10-24 12:07:08 [./conf/log4j.xml] load completed.
jvm 1    | MyCAT Server startup successfully. see logs in logs/mycat.log
 
如果你看到这一段说明你的服务已经启动起来了;
这里可以使用Navicat for MySQL,来尝试连接一下,能连接成功.如果没有连接成功过,有错误的话会在/logs/mycat.log中去查看
 

五、注意事项:

1,记得给你的防火墙开端口默认的mycat端口是8066,9066是管理端口
 
2,如果你在连接数据库的时候日志文件中一直报错错
错误:
Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’
这个时候估计是你的数据库的账号和密码错误了.所以IP被锁
.首先需要去数据库执行flush hosts;命令清除 被锁死的IP
 
3,错误mycat.log中:  Unknown charsetIndex:224
说明是字符集问题引起的数据库不能连接成功
#vim index_to_charset.properties
编辑配置文件中  设置224的字符集
比如我的数据库中 224=utf8mb4
设置完成后再重启服务就可以了!
 
4,host文件未修改报错unknown error!!!!

STATUS | wrapper  | 2015/11/24 16:05:32 | Launching a JVM…
INFO   | jvm 5    | 2015/11/24 16:05:32 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=300M; support was removed in 8.0
ERROR  | wrapper  | 2015/11/24 16:05:37 | JVM exited while loading the application.
INFO   | jvm 5    | 2015/11/24 16:05:37 | Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: DB-01: DB-01: unknown error
修改/etc/hosts就行,network不用动要解析hostM1 和hostS1 这两个到对应的ip!!!!!!!!!!!!!!!!!!!!!!

mycat三步曲之一(数据库主从配置)

mycat三步曲之一(数据库主从配置)

 
 
最近mycat非常的火热,单网上的资料非常的少.只有一本权威指南,不过指南比较多,不容快速入门,这里小整理了一些资料供大家入门使用!!
 
第一节  Mysql配置主从
1、编辑mysql的配置文件my.cnf
vi /etc/my.cnf
在[mysqld]下面增加
character_set_server = utf8
log-bin = mysql-bin
binlog-ignore-db = mysql
server-id = 1
在[client]下添加
default-character-set=utf8
 
2、重启mysql 加载新配置文件
[root@i ~]# /etc/init.d/mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                            [  OK  ]
 
3、查看mysql server级别的编码集
首先进入mysql使用命令 mysql -uroot –p
然后 执行命令查看:
mysql> show variables like ‘character%’;
+————————–+—————————-+
| Variable_name            | Value               |
+————————–+—————————-+
| character_set_client     | utf8                   |
| character_set_connection | utf8                    |
| character_set_database   | utf8                   |
| character_set_filesystem | binary                  |
| character_set_results    | utf8                    |
| character_set_server     | utf8                    |
| character_set_system     | utf8                   |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
 
4,为从服务器建立一个slave用的帐号。
# mysql -u root -p
mysql> grant replication slave on  *.*  to  ‘repl’@’%’  identified  by  ‘123456’;
mysql> flush privileges;
mysql> quit
 
5,锁库,备份数据库并查看状态
加锁
mysql> flush tables with read lock;
 
备份数据库
#mysqldump   -uroot -p123456 ceshi > ceshi.sql
查看并记录主库状态,并记录标红的值
mysql> show master statusG;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 7260
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
ERROR:
No query specified
解锁
mysql> unlock tables
 
6、编辑从库mysql的配置文件my.cnf
vi /etc/my.cnf
在[mysqld]下面增加
character_set_server = utf8
log-bin = mysql-bin
binlog-ignore-db = mysql
server-id = 1
在[client]下添加
default-character-set=utf8
重启mysql从库
[root@i ~]# /etc/init.d/mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                            [  OK  ]
 
7、还原备份文件到从数据库
Mysql>mysql  -uroot -p123456  ceshi<ceshi.sql
8,准备同步,需用到上面的记录的值
Mysql>change master to master_host=’10.165.59.91′,master_user=’repl’,master_password=’123456′,master_log_file=’mysql-bin.000001′,master_log_pos=7260
开始同步
Mysql>start slave;
 
查看主从状态
mysql> show slave statusG;
*************************** 1. row ***************************
Slave_IO_State: Queueing master event to the relay log
Master_Host: 10.164.23.01
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 327530772
Relay_Log_File: iZ28md7xZ-relay-bin.37957620
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 327530772
Relay_Log_Space: 564
Until_Condition: None
Until_Log_File:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 310760
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.05 sec)
 
ERROR:
 
主要看这两项:
 
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
配置完成后注意给mycat的所在的IP授予root用户的访问权限.