CentOS安装配置Mycat+mysql水平分割,实现分布式存储

    xiaoxiao2021-03-26  29

    转自http://blog.csdn.net/testcs_dn/article/details/51438216

    谢谢作者的贡献!

    环境:CentOS6.5

    JDK1.8

    MySQL5.6.35

    MyCat1.4

    1.首先安装MySQL,安装步骤可以参考http://blog.csdn.net/llgyzb/article/details/54691675

    2.安装JDK1.8

    安装MyCat

    修改MySQL配置文件(可选)

    vi /etc/my.cnf

    添加一行配置:lower_case_table_names=1,

    如果找不到my.cnf文件,copy一个: cp /usr/share/mysql/my-default.cnf /etc/my.cnf 注意:Linux 下部署安装 MySQL,默认不忍略表名大小写,需要手动到/etc/my.cnf 下配置 lower_case_table_names=1 使 Linux 环境下 MySQL 忍略表名大小写,否则使用 MyCAT 的时候会提示找不到表的错误!

    解压复制文件

    我这里将 mycat 放到“/usr/local/mycat/”目录下,你可以根据自己的需要选择合适的目录

    tar -zxvf Mycat-server-1.4-RELEASE-20160509173344-linux.tar.gz cp -r mycat /usr/local/mycat cd /usr/local/mycat/ chmod +x *

    chmod +x 命令是给文件添加可执行权限

    需要再装一台Mycat?直接用命令把文件复制过去:

    scp -r /usr/local/mycat root@192.168.0.153:/usr/local/

    配置环境变量

    vi /etc/profile

    在文件末尾添加一行: export MYCAT_HOME=/usr/local/mycat 使修改生效: source /etc/profile 测试是否生效: echo $MYCAT_HOME

    配置主机名映射

    vi /etc/hosts

    在文件中添加你的数据节点MySQL的IP映射: 192.168.0.151 sam_server_1 192.168.0.153 sam_server_2

    配置schema

    vi /usr/local/mycat/conf/schema.xml

    参考我的配置吧,我从官网下载的Release版本的里面带的文件有好多错误,我修改了很长时间才能用。

    <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/" > <!-- schema 中可以有多个table节点,列几个在Navicat中就能看到几个,库里有这里没有的话客户端中也看不到 --> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <table name="travelrecord" dataNode="dn1,dn2" rule="auto-sharding-long" /> <table name="company" primaryKey="ID" dataNode="dn2,dn1" rule="mod-long"/> <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" /> <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" dataHost="sam_server_1" database="db1" /> <dataNode name="dn2" dataHost="sam_server_2" database="db2" /> <!-- 节点主机信息 --> <dataHost name="sam_server_1" 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.0.151:3306" user="root" password="password"> <!-- 指定读取数据的主机,可以有多个 --> <readHost host="hostS1" url="192.168.0.152:3306" user="root" password="password" /> </writeHost> </dataHost> <dataHost name="sam_server_2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM2" url="192.168.0.153:3306" user="root" password="password"> <!-- can have multi read hosts --> <readHost host="hostS2" url="192.168.0.154:3306" user="root" password="password" /> </writeHost> </dataHost> </mycat:schema> 这里的用户密码是MySQL的远程登录用户名密码。

    配置用户

    vi /usr/local/mycat/conf/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://org.opencloudb/"> <system> <property name="defaultSqlParser">druidparser</property> <!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议--> <!-- <property name="processorBufferChunk">40960</property> --> <!-- <property name="processors">1</property> <property name="processorExecutor">32</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="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序 <property name="mutiNodePatchSize">100</property> 亿级数量排序批量 <property name="processors">32</property> <property name="processorExecutor">32</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> --> </system> <user name="test"> <property name="password">test</property> <property name="schemas">TESTDB</property> </user> <user name="mycat"> <property name="password">123456</property> <property name="schemas">TESTDB</property> <property name="readOnly">false</property> </user> <!-- <quarantine> <whitehost> <host host="127.0.0.1" user="mycat"/> <host host="127.0.0.2" user="mycat"/> </whitehost> <blacklist check="false"></blacklist> </quarantine> --> </mycat:server> 这里配置的是连接Mycat的用户,密码是明文的,schemas对应schema.xml文件中的schema节点

    创建数据库

    在每个数据节点MySQL上创建分库,数据将会根据你指定的策略分配保存到不同的节点上。

    这个要单独连接到每个MySQL上去创建,创建的数据库名称对应schema.xml文件中指定的名称,不做这一步的话客户端连接上操作的时候会不响应卡死。

    启动服务

    经过以上几个步骤的配置,就可以到/usr/local/Mycat/bin 目录下执行: ./mycat start 即可启动 mycat 服务! 注:mycat 支持的命令{ console | start | stop | restart | status | dump }

    可以通过以下命令查看服务是否启动成功:

    ./mycat status

    如果启动失败了,可以查看以下文件的内容,分析具体原因:

    /usr/local/mycat/logs/wrapper.log

    或者执行mycat console查看错误信息

    启动成功了,你应该已经知道怎么做了!马上用Navicat for MySQL连接上看看吧!

    测试

    这里使用mycat自带的表来测试 启动mycat: mycat start 使用Navicat for MySQL连接mycat: mycat/123456@192.168.0.151

    注意:

    远程连接时可能会遇到以下错误:

    连接MySQL错误:Can't connect to MySQL server (10060)

    你需要参考文中的方法开放“8066”端口!

    建表:

    create table employee (id int not null primary key,name varchar(100),sharding_id int not null);

    插入数据:

    insert into employee(id,name,sharding_id) values(1,'leader us',10000); insert into employee(id,name,sharding_id) values(2, 'me',10010); insert into employee(id,name,sharding_id) values(3, 'mycat',10000); insert into employee(id,name,sharding_id) values(4, 'mydog',10010); 分别到数据DB1,DB2查看,可以看到在DB1中有: 1 leader us 10000 3 mycat 10000 DB2中有: 2 me 10010 4 mydog 10010 这说明分片成功了。

    而我们还配置了主从复制,现在去从库看看,是不是也有主库中的数据了。

    结束语

    日志是最好的朋友,不明白出了什么问题,有日志的话就去查看它,没有比它更精确直接的了;

    即使官网提供的帮助也是很杂乱,各种版本,我是根据几个版本来完成的。

    对于用惯了Windows的图形配置界面的小伙伴,开始的时候会感觉比较吃力的。

    转载请注明原文地址: https://ju.6miu.com/read-663004.html

    最新回复(0)