Mycat1.6连接mysql三台主机安装部署

一、项目环境配置

1.1、centos 7虚拟机安装(准备三台虚拟机)

分别为master、slave01、slave02

1.2、jdk安装配置(mycat需要最低安装jdk1.7版本)

在master上安装,master作为主节点安装mycat

注意:rpm与软件相关命令 相当于window下的软件助手 管理软件

步骤:

  1. 查看当前Linux系统是否已经安装java

输入 rpm -qa | grep java

 

 

  1. 卸载两个openJDK

输入rpm -e --nodeps 要卸载的软件

 

  1. 上传jdk到linux
  2. 安装jdk运行需要的插件yum install glibc.i686(选做)
  3. 解压jdk到/usr/local下 tar –xvf jdk-7u71-linux-i586.tar.gz –C /usr/local
  4. 配置jdk环境变量,打开/etc/profile配置文件,将下面配置拷贝进去

      #set java environment

      JAVA_HOME=/usr/local/jdk1.7.0_71

      CLASSPATH=.:$JAVA_HOME/lib.tools.jar

      PATH=$JAVA_HOME/bin:$PATH

      export JAVA_HOME CLASSPATH PATH

     5.重新加载/etc/profile配置文件 source /etc/profile

1.3mysql安装(三台虚拟中都安装)

1、先检查系统是否装有mysql

rpm -qa | grep mysql

这里返回空值,说明没有安装

这里执行安装命令是无效的,因为centos-7默认是Mariadb,所以执行以下命令只是更新Mariadb数据库

yum install mysql

删除可用

yum remove mysql

2、下载mysql的repo源

# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

安装mysql-community-release-el7-5.noarch.rpm包

# sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

安装这个包后,会获得两个mysql的yum repo源:/etc/yum.repos.d/mysql-community.repo,/etc/yum.repos.d/mysql-community-source.repo。

3、安装mysql

# sudo yum install mysql-server

根据步骤安装就可以了,不过安装完成后,没有密码,需要重置密码。

安装后再次查看mysql

如果报错,内容含有

Error: Package: mysql-community-libs-5.6.35-2.el7.x86_64 (mysql56-community)

           Requires: libc.so.6(GLIBC_2.17)(64bit)

Error: Package: mysql-community-server-5.6.35-2.el7.x86_64 (mysql56-community)

           Requires: libc.so.6(GLIBC_2.17)(64bit)

Error: Package: mysql-community-server-5.6.35-2.el7.x86_64 (mysql56-community)

           Requires: systemd

Error: Package: mysql-community-server-5.6.35-2.el7.x86_64 (mysql56-community)

           Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)

Error: Package: mysql-community-client-5.6.35-2.el7.x86_64 (mysql56-community)

           Requires: libc.so.6(GLIBC_2.17)(64bit)

 You could try using --skip-broken to work around the problem

 You could try running: rpm -Va --nofiles --nodigest

解决:

#yum install glibc.i686

# yum list libstdc++*

4、重置密码

重置密码前,首先要登录

# mysql -u root

登录时有可能报这样的错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2),原因是/var/lib/mysql的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户:

# sudo chown -R openscanner:openscanner /var/lib/mysql

如果报chown: 无效的用户: "openscanner:openscanner"错误,更换命令,并用 ll 查看目录权限列表

chown root /var/lib/mysql/

ll

附: 
① 更改文件拥有者 (chown ) 
[root@linux ~]# chown 账号名称 文件或目录 
② 改变文件的用户组用命令 chgrp 
[root@linux ~]# chgrp 组名 文件或目录 
③ 对于目录权限修改之后,默认只是修改当前级别的权限。如果子目录也要递归需要加R参数 
Chown -R : 进行递归,连同子目录下的所有文件、目录

然后,重启服务:

service mysqld restart

接下来登录重置密码:

 

接下来登录重置密码:

 mysql -u root -p
  •  
mysql > use mysql;
mysql > update user set password=password('123456') where user='root';
mysql > exit;
  •  

重启mysql服务后才生效 # service mysqld restart

必要时加入以下命令行,为root添加远程连接的能力。链接密码为 “root”(不包括双引号)

mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";  
  •  

6、查询数据库编码格式,确保是 UTF-8

show variables like "%char%";
  •  

这里写图片描述

需要修改编码格式为UTF-8,导入数据库sql的时候,请确保sql文件为utf8编码 
进入mysql命令行后 输入

set names utf8;
  •  

(测试数据库数据) 
再进入数据库 use test; 
在导入sql脚本 source test.sql;

7、开放3306端口号 
firewalld 防火墙(centos-7)运行命令,并重启:

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
  •  

iptables 防火墙(centos6.5及其以前)运行命令

vim /etc/sysconfig/iptables
  •  

在文件内添加下面命令行,然后重启

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
  •  
# service iptables restart
  •  

外部链接访问效果(一般建立sql数据库和数据表,建议通过远程链接控制,直观易操作)

如果丢失mysql密码,可尝试如下方法修改充值密码

方法一:运行grep ‘temporary password’ /var/log/mysqld.log命令
运行后会得到一个密码,这里我用这个没出现密码,故采用第二种。
方法二:安全初始化MySQL:
执行 mysql_secure_installation命令配置。
方法三:该方法先修改MySQL配置文件使其可以无密码登陆,然后进入MySQL修改密码,修改完后复原配置文件。
步骤:
1、vim /etc/my.cnf
2、给配置文件添加skip-grant-tables ,保存退出。
3、重启MySQL:systemctl restart mysql
4、免密登陆MySQL:mysql -u root
5、执行USE mysql;
6、执行UPDATE user SET password = ‘此处填写新密码’ WHERE user =‘root’ 重置MySQL密码
普通用户更改密码同上。

1.4mycat的安装

1.下载解压Mycat-server-1.6-RELEASE-20161010173036-linux.tar.gz /usr/local/mycat

2.

vim /etc/profile

 添加绿色部分:

#set java environment
    JAVA_HOME=/usr/local/jdk1.7.0_71
    CLASSPATH=.:$JAVA_HOME/lib.tools.jar
    PATH=$JAVA_HOME/bin
:$MYCAT_HOME/bin:$PATH
    export JAVA_HOME CLASSPATH PATH 
  
 export MYCAT_HOME=/usr/local/mycat
 

使得变量生效

source /etc/profile

二、启动mycat和相关配置

2.1mycat重要配置

2.1.1、server.xml

几乎保存了所有 mycat 需要的系统配置信息。其在代码内直接的映射类为 SystemConfig 类。

我的server.xml用户配置文件

 <user name="root">
                <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>

这是配置的mycat登录的用户名和密码,其它默认配置无改动

schmas为配置的逻辑表,在schema.xml中会详细配置

2.1.2、schema.xml

Schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库、表、分片规则、DataNode 以
及 DataSource。弄懂这些配置,是正确使用 MyCat 的前提。这里就一层层对该文件进行解析。

<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="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
                <!-- random sharding using mod sharind rule -->
                <table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
                           rule="mod-long" />
                <!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global"
                        needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3"
                        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>
                <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
                        /> -->
        </schema>

schema 标签用于定义 MyCat 实例中的逻辑库,MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配
置。可以使用 schema 标签来划分这些不同的逻辑库。
如果不配置 schema 标签,所有的表配置,会属于同一个默认的逻辑库。
如上所示的配置就配置的默认逻辑库,逻辑库的概念和 MYSQL 数据库中 Database 的概念相同,我
们在查询这两个不同的逻辑库中表的时候需要切换到该逻辑库下才可以查询到所需要的表。


如果你发现显示该错误信息,需要到 server.xml 添加该用户可以访问到的 schema 就可以了。

checkSQLschema

 False 过滤schema定义。

 select * from testdb.company => select * from company;

 True  不过滤schema定义。有可能报错。

sqlMaxLimit

 Limit 自动加入limit,会影响最后返回条数。例如:select * from company。

table标签

制定Mycat中的逻辑表。最后要做数据分片的表。

mycat中的表,可以和实体有具体映射关系,也可以没有具体映射关系(如果没有映射关系会报错)。

dataNode

 把相应的表存到对应的DB中。

rule

  分片规则。对应rule.xml中的规则。

ruleRequired

  指定该属性的表是否需要分片规则。

  True 必须制定。如果没有制定,就会报错。

primaryKey

  如果使用非主键进行分片,那么Mycat会缓存主键和具体dataNode的信息,如果下次再使用非主键进行查询的时候,就不用广播所有dn。

autoIncrement

  Mycat根据last_insert_id()返回结果。这个需要mysql主键设置配合。

type

  逻辑表的类型。普通表和全局表。

needAddLimit

  是否自动在每一条SQL语句后面加上limit限制。

<dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost2" database="db2" />
        <dataNode name="dn3" dataHost="localhost3" 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="127.0.0.1:3306" user="root"
                                   password="123456">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS1" url="127.0.0.1:3306" user="root" password="123456" />
                        <!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="123456" />-->
                </writeHost>
                        <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="root"/> -->
        </dataHost>
        <dataHost name="localhost2" 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="hostM2" url="192.168.1.162:3306" user="root"
                                   password="123456">
                        <!-- can have multi read hosts -->
                        <!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="123456" />-->
                </writeHost>
                        <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="root"/> -->
        </dataHost>
        <dataHost name="localhost3" 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="hostM3" url="192.168.1.86:3306" user="root"
                                   password="123456">
                        <!-- can have multi read hosts -->

                        <!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="123456" />-->
                </writeHost>
                        <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="root"/> -->
        </dataHost>

 

datahost标签

主要定义和Mysql集群有关的信息,数据实例、读写分离配置和心跳检测语句。

balance

  负载均衡配置

  0 代表不开启读写分离,所有的读操作都发送到writeHost上。

  1 writeHost和readHost都要参与select语句的负载均衡。

     双主双从模式 M1->S1,  M2->S2, M1和M2互为主备。M2/S1/S2都要参与select语句的负载均衡。

  2 所有读操作都随机分配给writeHost/readHost

  3 所有的读操作随机分发到writeHost下面的readHost上执行。

writeType

  0 所有的写操作都分发到第一个writeHost。如果第二个挂了,分发到第二个。

  1 所有的写操作都要随机分发到所有配置的writeHost上。1.5以后不推荐。

dbType

  支持多种db类型。

switchType

  -1 代表不自动切换

  1 默认值,自动切换。

 

 

rule.xml文件

定义分片规则策略文件。

tableRule标签

  定义table分片策略

rule标签

  策略定义标签

columns

  对应的分片字段

algorithm标签

  tableRule分片策略对应的function名称

function标签

  定义分片函数

基本配置好后,就可以启动mycat了

进入mycat安装的bin目录下

./mycat console 控制台启动模式启动

如果报错以下错误

wrapper  | Launching a JVM...
wrapper  | JVM exited while loading the application.
jvm 1    | Invalid maximum heap size: -Xmx4G
jvm 1    | The specified size exceeds the maximum representable size.
jvm 1    | Error: Could not create the Java Virtual Machine.
jvm 1    | Error: A fatal exception has occurred. Program will exit.
wrapper  | Launching a JVM...

wrapper  | JVM exited while loading the application.

错误原因:mycat默认需要的内存要求大于机器的实际内存,需要修改mycat的配置文件。

解决方法:找到.../mycat/conf/wrapper.conf,修改

wrapper.java.additional.10=-Xmx4G    (大约在36行)

wrapper.java.additional.11=-Xms1G

改成:

wrapper.java.additional.10=-Xmx1G

wrapper.java.additional.11=-Xms256M

修改完成后,重新执行./mycat console
如果报【错误】mycat报错:close connection,reason:stream close ...

解决方法:是因为schema.xml和server.xml中配置的用户名密码不一致,修改为一致就好啦

如果报错ERROR 1130 (HY000): Host 'localhost' is not allowed to connect to this MySQL server

解决办法:参考https://www.cnblogs.com/chancy/p/9204042.html

不报错就是启动成功了。

三、mycat分表分库操作

参考人员可自行定义建表语句和分片规则

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值