时间:2021-07-01 10:21:17 帮助过:9人阅读
然后解压到/usr/local/目录下
1 2 3 4 5 6 |
[root@youxi1 ~]# tar zxf Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz -C /usr/local/
[root@youxi1 ~]# ls /usr/local/
bin etc games include lib lib64 libexec mycat sbin share src
[root@youxi1 logs]# ls /usr/local/mycat/
bin catlet conf lib version.txt
[root@youxi1 logs]# mkdir /usr/local/mycat/logs //少一个logs目录就创建一个
|
添加mysql用户以及修改文件夹权限
1 2 3 4 5 6 7 8 9 10 11 |
[root@youxi1 ~]# useradd mycat
[root@youxi1 ~]# echo "mycat:123456" | chpasswd
[root@youxi1 ~]# chown -R mycat:mycat /usr/local/mycat/
[root@youxi1 ~]# ll /usr/local/mycat/
总用量 12
drwxr-xr-x 2 mycat mycat 190 6月 18 15:30 bin
drwxrwxrwx 2 mycat mycat 6 2月 13 14:46 catlet
drwxrwxrwx 4 mycat mycat 4096 6月 18 15:30 conf
drwxr-xr-x 2 mycat mycat 4096 6月 18 15:30 lib
drwxr-xr-x 2 mycat mycat 6 6月 20 15:09 logs
-rwxrwxrwx 1 mycat mycat 185 2月 13 15:02 version.txt
|
说明:bin 程序目录,存放了封装成服务的版本,还存放了nowrap的shell脚本命令,方便大家选择和修改。mycat支持的命令有{ console | start | stop | restart | status | dump }
conf目录下存放了配置文件,其中server.xml是Mycat服务器参数调整和用户授权的配置文件,schema.xml是逻辑库、表和分片定义的配置文件,rule.xml是分片规则的配置文件。另外分片规则的一些具体参数信息单独作为一个文件,也是存放在这个目录下。配置文件修改后,需要重启Mycat或者通过9066端口reload。
lib目录下主要存放mycat依赖的一些jar文件。
另外mycat启动后还会生成${sys:MYCAT_HOME}/logs/mycat.log,日志会存放在其中(默认250M上限,时间上限为1天,超出会创建新的日志文件,并且会自动备份),可以在conf/log4j.xml中配置日志文件,默认输出级别为info,可以调整为debug,输出更多信息方便排错。
注意:Linux下部署安装MySQL,默认不忽略表名大小写,需要手动到/etc/my.cnf下配置lower_case_table_names=1,使Linux环境下MySQL忽略表名大小写,否则使用MyCAT的时候会提示找不到表的错误!
解压JDK,添加jdk的环境变量文件,然后加载环境变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@youxi1 ~]# mkdir /usr/local/java/
[root@youxi1 ~]# tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local/java/
[root@youxi1 ~]# ls /usr/local/java/
jdk1.8.0_191
[root@youxi1 ~]# vim /etc/profile.d/java.sh //配置环境变量
JAVA_HOME=/usr/local/java/jdk1.8.0_191
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
[root@youxi1 ~]# source /etc/profile.d/java.sh //加载环境变量
[root@youxi1 ~]# java -version //查看是否生效
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
|
(4).Mycat启动
添加mycat的环境变量文件,然后加载环境变量
1 2 3 4 |
[root@youxi1 ~]# vim /etc/profile.d/mycat.sh
MYCAT_HOME=/usr/local/mycat
PATH=$MYCAT_HOME/bin:$PATH
[root@youxi1 ~]# source /etc/profile.d/mycat.sh
|
注意:JDK的环境变量和Mycat的环境变量也可以一次性添加到/etc/profile文件中,然后重新加载。不过没有分开编辑好管理。
配置mycat本身的用户信息server.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[root@youxi1 ~]# vim /usr/local/mycat/conf/server.xml
//直接拉到最后修改<user>部分,设置访问mycat的用户信息,以及其能够访问的逻辑库
<user name= "root" > //设置用户名。如果存在defaultAccount="true",则表示在不指定用户的情况下,默认以该用户访问mycat。
<property name= "password" >123456</property> //设置当前用户的密码
<property name= "schemas" >TESTDB</property> //能够访问的逻辑库(虚拟库),逻辑库需要在同目录下的schema.xml定义
//没有设置任何权限,则默认具有所有权限
<!-- 表级 DML 权限设置 -->
<!--
<privileges check= "false" >
<schema name= "TESTDB" dml= "0110" >
<table name= "tb01" dml= "0000" ></table>
<table name= "tb02" dml= "1111" ></table>
</schema>
</privileges>
-->
</user>
<user name= "user" > //设置用户名
<property name= "password" >123456</property> //设置当前用户的密码
<property name= "schemas" >TESTDB</property> //能够访问的逻辑库(虚拟库)
<property name= "readOnly" > true </property> //设置只读权限
</user>
|
配置schema.xml文件,定义逻辑库信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[root@youxi1 ~]# cp /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak //提供的是分库分表,用法比较高级了
[root@youxi1 ~]# vim /usr/local/mycat/conf/schema.xml
<?xml version= "1.0" ?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd" >
<mycat:schema xmlns:mycat= "http://io.mycat/" > //框定服务配置范围
/*schema标签用于定义mycat中的逻辑库。
*name是逻辑库名;
*checkSQLschema默认为false,含义为是否去掉表名前的逻辑库名,只能去除当前定义的逻辑库名;
*sqlMaxLimit是隐式limit,如果查询没有定义limit,则自动加上limit;
*dataNode指定所属的数据节点,也就是常说的数据分片。*/
<schema name= "TESTDB" checkSQLschema= "false" sqlMaxLimit= "100" dataNode= ‘dn1‘ />
//dataNote标签用于定义数据节点。name是数据节点名称;dataHost指定所属数据库实例;database指定数据库实例上的实际数据库名(要和真实数据库一样的名字)。
<dataNode name= "dn1" dataHost= "dthost" database= "ha" />
/*dataHost标签用于定义数据库实例。
*name数据库实例名称;
*maxCon指定每个读写实例连接池的最大连接;
*minCon指定每个读写实例连接池的最小连接,初始化连接池的大小
*balance和writeType请看下方说明;
*dbType指定后端连接的数据库类型,支持二进制的mysql协议,以及其他使用JDBC连接的数据库,例如mongodb、oracle、spark等;
*dbDriver指定后端数据库使用的驱动,可选值JDBC和native,其中native对应二进制的mysql协议,即mysql和maridb,其余都使用JDBC;
*switchType请看下发说明
*slaveThreshold slave服务器读的安全边界,如果Seconds_Behind_Master大于这个值,这台slave服务器会被临时剔除,以免被读。*/
<dataHost name= "dthost" maxCon= "500" minCon= "10" balance= "1" writeType= "0" dbType= "mysql" dbDriver= "native" switchType= "-1" slaveThreshold= "100" >
//heartbeat标签用于定义心跳语句,用语句执行成功与否来判断数据库的可用性
<heartbeat> select user()</heartbeat>
/*writeHost和readHost标签都指定数据库的相关配置,用于实例化后端连接池。writeHost定义写实例,readHost定义读实例。
*host是writeHost或readHost的名称,也是唯一标识;
*usrl指定后端实例连接地址;
*user指定后端存储实例需要的用户名(数据库的用户名);
*password指定后端存储实例需要的密码(数据库用户的密码);
*weight权重,是配置在readHost中作为读节点的权重*/
<writeHost host= "youxi2" url= "192.168.5.102:3306" user= "mycat" password= "123456" />
<writeHost host= "youxi3" url= "192.168.5.103:3306" user= "mycat" password= "123456" />
</dataHost>
</mycat:schema>
|
注意:如果使用readHost标签,请使用writeHost标签将readHost标签包裹。
说明:
balance负载均衡类型。0表示不开启读写分离,所有读操作(select查询)都发送到当前writeHost上。1表示全部的readHost和备用writeHost都参与读操作(select查询)的负载均衡。2表示读操作随机在writeHost和readHost上发布。3表示所有读操作随机分发到当前writeHost对应的readHost上执行,writeHost不用执行。
writeType负载均衡类型。0表示所有写操作发送到配置的第一个writeHost,挂了后切换到还生存的第二个writeHost,重新启动后以切换后的为准,切换记录在配置文件dnindex.properties中。1表示所有写操作都随机发送到配置的writeHost,mycat1.5以后已经废弃。
switchType切换类型。-1表示不自动切换。1表示自动切换,默认值。2表示基于Mysql主从同步状态决定是否切换,心跳语句为show slave status。3表示基于MySQL galary cluster的切换机制(适合集群),心跳语句为show status like ‘wsrep%‘。
启动测试Mycat,并设置开机自启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@youxi1 conf]# mycat start //因为已经配置环境变量,所以可以不写绝对路径
Starting Mycat-server...
[root@youxi1 conf]# tail /usr/local/mycat/logs/wrapper.log
STATUS | wrapper | 2019/06/20 15:26:47 | --> Wrapper Started as Daemon
STATUS | wrapper | 2019/06/20 15:26:47 | Launching a JVM...
INFO | jvm 1 | 2019/06/20 15:26:47 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0
INFO | jvm 1 | 2019/06/20 15:26:48 | Wrapper (Version 3.2.3) http: //wrapper.tanukisoftware.org
INFO | jvm 1 | 2019/06/20 15:26:48 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
INFO | jvm 1 | 2019/06/20 15:26:48 |
INFO | jvm 1 | 2019/06/20 15:26:57 | MyCAT Server startup successfully. see logs in logs/mycat.log //成功启动
[root@youxi1 conf]# echo "/usr/local/mycat/bin/mycat start" >> /etc/rc.local
[root@youxi1 conf]# chmod +x /etc/rc.d/rc.local
[root@youxi1 conf]# vim /usr/local/mycat/conf/wrapper.conf
wrapper.java.command=/usr/local/java/jdk1.8.0_191/bin/java //第5行,指向java
|
注意:如果防火墙是打开的,记得添加mysql的端口号。
1 2 3 4 5 6 |
[root@youxi1 ~]# firewall-cmd --permanent --zone= public --add-port=8066/tcp
success
[root@youxi2 ~]# firewall-cmd --reload
success
[root@youxi2 ~]# firewall-cmd --zone= public --list-ports
8066/tcp
|
(5).配置主从复制
1)youxi2上操作
创建mycat中schema.xml文件设置的用户名和密码,以及指定的数据库。创建复制用的用户
1 2 3 4 5 6 7 8 9 10 11 |
mysql> grant all privileges on *.* to ‘mycat‘ @ ‘192.168.5.%‘ identified by ‘123456‘ ; //mycat指定的用户
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> grant replication slave on *.* to ‘slave‘ @ ‘192.168.5.%‘ identified by ‘123456‘ ; //复制用的用户
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges; //刷新权限表
Query OK, 0 rows affected (0.00 sec)
mysql> create database ha; //mycat指定的数据库
Query OK, 1 row affected (0.00 sec)
|
修改配置文件,并重启
1 2 3 4 5 |
[root@youxi2 ~]# vim /etc/my.cnf
server-id=1
log-bin=mysql-bin-master
binlog- do -db=ha
[root@youxi2 ~]# systemctl restart mysqld
|
查看master状态
1 2 3 4 5 6 7 8 |
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin-master.000001
Position: 154
Binlog_Do_DB: ha
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
|
注意:如果防火墙是打开的,记得添加mysql的端口号。
1 2 3 4 5 6 |
[root@youxi2 ~]# firewall-cmd --permanent --zone= public --add-port=3306/tcp
success
[root@youxi2 ~]# firewall-cmd --reload
success
[root@youxi2 ~]# firewall-cmd --zone= public --list-ports
3306/tcp
|
2)youxi3上操作
创建mycat中schema.xml文件设置的用户名和密码,以及指定的数据库。
1 2 3 4 5 6 7 8 |
mysql> grant all privileges on *.* to ‘mycat‘ @ ‘192.168.5.%‘ identified by ‘123456‘ ; //mycat指定的用户
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges; //刷新权限表
Query OK, 0 rows affected (0.00 sec)
mysql> create database ha; //mycat指定的数据库
Query OK, 1 row affected (0.01 sec)
|
修改配置文件
1 2 3 |
[root@youxi3 ~]# vim /etc/my.cnf
server-id=2
[root@youxi3 ~]# systemctl restart mysqld
|
配置master信息
1 2 3 4 5 6 7 8 |
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
mysql> change master to master_host= ‘192.168.5.102‘ ,master_user= ‘slave‘ ,master_password= ‘123456‘ ,master_log_file= ‘mysql-bin-master.000001‘ ,master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
|
查看slave状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.5.102
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin-master.000001
Read_Master_Log_Pos: 154
Relay_Log_File: youxi3-relay-bin.000003
Relay_Log_Pos: 327
Relay_Master_Log_File: mysql-bin-master.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
|
注意:如果防火墙是打开的,记得添加mysql的端口号。
1 2 3 4 5 6 |
[root@youxi3 ~]# firewall-cmd --permanent --zone= public --add-port=3306/tcp
success
[root@youxi3 ~]# firewall-cmd --reload
success
[root@youxi3 ~]# firewall-cmd --zone= public --list-ports
3306/tcp
|
(6).测试
在youxi1上连接mycat,当然也可以使用软件客户端远程连接mycat。并创建测试数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[root@youxi1 ~]# mysql -uroot -p123456 -h192.168.5.101 -P8066 //这边的用户名和密码必须是mycat配置文件server.xml中定义的用户
mysql> show databases; //注意这里显示的是mycat定义的逻辑库TESTDB
+----------+
| DATABASE |
+----------+
| TESTDB |
+----------+
1 row in set (0.00 sec)
mysql> use TESTDB;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table user_tb(user int ,name varchar(20));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into user_tb values(1, ‘zhangsan‘ );
Query OK, 1 row affected (0.05 sec)
|
再到youxi2和yousi3上查看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@youxi2 ~]# mysql -uroot -p123456
mysql> select * from ha.user_tb; //查询时需要查询实际存在的数据库
+------+----------+
| user | name |
+------+----------+
| 1 | zhangsan |
+------+----------+
1 row in set (0.00 sec)
[root@youxi3 ~]# mysql -uroot -p123456
mysql> select * from ha.user_tb;
+------+----------+
| user | name |
+------+----------+
| 1 | zhangsan |
+------+----------+
1 row in set (0.01 sec)
|
再试一下只读用户user
1 2 3 4 5 6 7 8 |
[root@youxi1 ~]# mysql -uuser -p123456 -h192.168.5.101 -P8066
mysql> use TESTDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> insert into user_tb values(2, ‘lisi‘ );
ERROR 1495 (HY000): User readonly
|
如果master服务器youxi2宕机,那么mycat将只能读不能写。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//youxi2上停止mysqld,模拟宕机
[root@youxi2 ~]# systemctl stop mysqld
//此时的再进行测试
[root@youxi1 logs]# mysql -uroot -p123456 -h192.168.5.101 -P8066
mysql> use TESTDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from user_tb;
+------+----------+
| user | name |
+------+----------+
| 1 | zhangsan |
+------+----------+
1 row in set (0.03 sec)
mysql> insert into user_tb values(2, ‘lisi‘ );
ERROR 1184 (HY000): java.net.ConnectException: 拒绝连接
|
注意:再次启动mysqld,能够恢复正常
参考:https://www.cnblogs.com/conanwang/p/5961019.html
Mysql读写分离(Mycat版)【转】
标签:passwd 初始 规则 zone 模拟 官网 ado mysql读写分离 arc