mysql+mycat分片環境部署


說明:

1、操作系統:64位CentOS Linux release 7.2.1511 (Core)

2、jdk版本:1.8.0_121

3、mysql版本: 5.7.17

4、兩台mysql服務器:192.168.1.70(mycat將安裝在這台機器上)和192.168.1.71

本文假設以上或者類似環境已經配置成功。

准備壓縮文件

1、下載網址:http://www.mycat.io/

選擇1.6版本,然后點擊進入下載頁面,如下圖:

選擇第一個,適合linux系統的

2、創建/soft目錄:

進入192.168.1.70機器

[root@localhost soft]# mkdir /soft

利用WinSCP將下載好的tar包放入/soft目錄

解壓縮

解壓

[root@localhost ~]# cd /soft

[root@localhost soft]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

移動到/soft目錄

[root@localhost soft]# mv mycat /usr/local/

配置環境變量

1、打開配置文件

[root@localhost bin]# vi /etc/profile

2、在文件末尾添加:

export MYCAT_HOME=/usr/local/mycat

export PATH=$PATH:$MYCAT_HOME/bin

保存並退出

3、使修改生效

[root@localhost bin]# source /etc/profile

4、測試是否生效

[root@localhost bin]# echo $MYCAT_HOME

配置主機名

[root@localhost bin]# vi /etc/hosts

拷貝以下代碼到文件末尾:

192.168.1.70 server_1

192.168.1.71 server_2

保存並退出

忽略大小寫

linux下部署安裝mysql,表名大小寫區分。

需要我們手動配置/etc/my.cnf,添加lower_case_table_names=1,使 linux 環境下 mysql 忽略表名大小寫,否則使用 mycat 的時候會提示找不到。

 

因為之前配置了兩台mysql服務器

192.168.1.70

192.168.1.71

所以兩台都需要修改

[root@localhost soft]# vi /etc/my.cnf

將“lower_case_table_names=1”加入文件末尾,保存並退出

 

重啟mysql服務

[root@localhost soft]# /etc/init.d/mysqld restart

配置schema.xml

[root@localhost conf]# vi 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">
        <table name="blog" primaryKey="id" dataNode="dn1,dn2" rule="mod-long" />
    </schema>
    
    <dataNode name="dn1" dataHost="server1" database="db1" />
    <dataNode name="dn2" dataHost="server2" database="db2" />
    
    <dataHost name="server1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="server_1" url="192.168.1.70:3306" user="root" password="123456" />
    </dataHost>
    <dataHost name="server2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="server_2" url="192.168.1.71:3306" user="root" password="123456" />
    </dataHost>
</mycat:schema>

保存並退出

配置rule.xml

因為我們就兩個mysql節點,且分片規則使用的是:rule="mod-long",所以需要修改此文件內容,將mod-long默認的3個節點修改成2個,不然mycat無法啟動。

既然啟動失敗,那么在后面的連接mycat的步驟會報以下錯誤:

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.70' (111)

我曾在這里卡了一段時間,最終通過查看mycat的wrapper.log日志文件才找到原因的。

[root@localhost conf]# vi rule.xml

如下圖:

----------------------------------------------------------------------------------

下面這段是日志文件里的錯誤信息,可以不看,寫出來的原因是方便自己以后理解

STATUS | wrapper  | 2017/08/19 20:13:36 | TERM trapped.  Shutting down.
STATUS | wrapper  | 2017/08/19 20:13:37 | <-- Wrapper Stopped
STATUS | wrapper  | 2017/08/19 20:13:41 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2017/08/19 20:13:41 | Launching a JVM...
INFO   | jvm 1    | 2017/08/19 20:13:41 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0
INFO   | jvm 1    | 2017/08/19 20:13:41 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO   | jvm 1    | 2017/08/19 20:13:41 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
INFO   | jvm 1    | 2017/08/19 20:13:41 | 
INFO   | jvm 1    | 2017/08/19 20:13:42 | 
INFO   | jvm 1    | 2017/08/19 20:13:42 | WrapperSimpleApp: Encountered an error running main: java.lang.ExceptionInInitializerError
INFO   | jvm 1    | 2017/08/19 20:13:42 | java.lang.ExceptionInInitializerError
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.MycatStartup.main(MycatStartup.java:53)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at java.lang.reflect.Method.invoke(Method.java:498)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:240)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at java.lang.Thread.run(Thread.java:745)
INFO   | jvm 1    | 2017/08/19 20:13:42 | Caused by: io.mycat.config.util.ConfigException: Illegal table conf : table [ BLOG ] rule function [ mod-long ] partition size : 3 > table datanode size : 2, please make sure table datanode size = function partition size
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.config.loader.xml.XMLSchemaLoader.checkRuleSuitTable(XMLSchemaLoader.java:563)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.config.loader.xml.XMLSchemaLoader.loadTables(XMLSchemaLoader.java:396)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.config.loader.xml.XMLSchemaLoader.loadSchemas(XMLSchemaLoader.java:173)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.config.loader.xml.XMLSchemaLoader.load(XMLSchemaLoader.java:122)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.config.loader.xml.XMLSchemaLoader.<init>(XMLSchemaLoader.java:83)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.config.loader.xml.XMLSchemaLoader.<init>(XMLSchemaLoader.java:87)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.config.ConfigInitializer.<init>(ConfigInitializer.java:74)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.config.MycatConfig.<init>(MycatConfig.java:72)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.MycatServer.<init>(MycatServer.java:144)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     at io.mycat.MycatServer.<clinit>(MycatServer.java:96)
INFO   | jvm 1    | 2017/08/19 20:13:42 |     ... 7 more
STATUS | wrapper  | 2017/08/19 20:13:44 | <-- Wrapper Stopped
View Code  

創建數據庫

192.168.1.70對應的mysql服務器創建數據庫:db1

[root@localhost soft]# /usr/local/mysql/bin/mysql -uroot -p123456

mysql> create database db1;

----------------------------------------------------------------------------------

192.168.1.71對應的mysql服務器創建數據庫:db2

[root@localhost soft]# /usr/local/mysql/bin/mysql -uroot -p123456

mysql> create database db2;

啟動mycat

[root@localhost ~]# mycat start

連接mycat

[root@localhost mycat]# /usr/local/mysql/bin/mysql -u root -p -P 8066 -h 192.168.1.70

如上圖,表示邏輯數據庫連接成功

說明:這里連接的就是邏輯數據庫了

測試

1、 建表

選擇邏輯數據庫

mysql> use TESTDB;
CREATE TABLE blog ( 
  id int(11) NOT NULL,
  title varchar(20) NOT NULL, 
  author varchar(30), 
  PRIMARY KEY (id) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

執行完上面的sql語句,會看到

192.168.1.70 db1下有了blog表

192.168.1.71 db2下也有了blog表

2、插入數據

insert into blog(id,title) values(1,'test');
insert into blog(id,title) values(2,'test');
insert into blog(id,title) values(3,'test');
insert into blog(id,title) values(4,'test');
insert into blog(id,title) values(5,'test');
insert into blog(id,title) values(6,'test');
insert into blog(id,title) values(7,'test');
insert into blog(id,title) values(8,'test');
insert into blog(id,title) values(9,'test');
insert into blog(id,title) values(10,'test');
insert into blog(id,title) values(11,'test');
insert into blog(id,title) values(12,'test');
insert into blog(id,title) values(13,'test');
insert into blog(id,title) values(14,'test');

3、查詢

Select * from blog;

分別在server_1和server_2上執行查詢語句

server_1返回的結果是:

server_2返回的結果是:

如果查詢TESTDB邏輯數據庫的話,出現的結果是:

好,到此大功告成,作為入門篇非常簡單。

遠程連接mycat

開啟端口8066

[root@localhost ~]# firewall-cmd --zone=public --add-port=8066/tcp --permanent

重啟防火牆

[root@localhost ~]# firewall-cmd –reload

Navicat for MySQL連接

參考文獻:

http://blog.csdn.net/testcs_dn/article/details/51438216  這篇主要參考環境配置

http://maosheng.iteye.com/blog/2306937 這篇文章主要參考它的簡單配置schema.xml

http://www.jb51.net/article/114290.htm 這篇文章主要參考它的簡單配置schema.xml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM