■ 河南 郭建伟
编者按:MyCat是一个新颖的数据库中间件,其支持事务和ACID,可以替代MySQL的加强版数据库,可以实现企业级MySQL数据库集群,是融合了内存缓存技术、NoSQL技术和HDFS大数据的新型SQL Server,结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品。
在安装MyCat之前,首先需要执行“vi/etc/hosts”命令,将所有相关主机名和IP地址绑定起来。之后下载Sun JDK组件,例如执行“tar zxvf/jdk-8u171-linux-x64.tar.gz”命令将其解压。
之后下载MyCat组件,执行“tar zxvf Mycatserver-1.x-linux.tar.gz”命令,将其解压,其中的“x”表示具体的版本信息。这里将JDK和MyCat均解压到“/mysql/app”目录中。执行“vi~/.bashrc”命令,输入“export JAVA_HOME=/mysql/app/jdk1.8.0_171”,“expo rt$JAVA_HOME/bin:$PATH”行,来设置环境变量,注意这是将这些环境变量权限控制到当前用户级别。
执行“vi/etc/profile”命令,输入“export JAVA_HO ME=/mysql/app/jdk1.8.0_1 71”,“export JRE_HOME=$JA VA_HOME/jre”,“export MYC AT_HOME=/mysql/app/mycat”,“export CLASSPATH=.:$J AVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH”,“export PATH=$JAVA_HOME/bin:$MYCAT_HOME:$JRE_HOME/bin:$PATH”等行,设置针对所有用户的环境变量。
执行“java -version”命令,查看Java版本信息。执行“groupadd mycat”,“useradd -g mycat mycat”,“cd/mysql/app”,“chrown-R mycat mycat/mysql/app/mycat ”,“pass mycat”等命令,来创建所需的用户组和账户信息。进入MyCat安装路径下的“bin”目录,执行“./startup_nowrap.sh”命令,可以手动启动MyCat。也可以执行“mycat console”命令,检测前台启动是否报错。执行“mystop”,“mycat start”命令,来停止和启动MyCat。
如果想让MyCat自动运行,可以执行“vi/usr/lib/systemd/system/mycat.service”命令,在其中输入“[Unit]”,“Description=Mycat Datab ase”,“Descripton=mycat”,“After=syslog.target”,“after=network.target”,“[Service]”,“Type=simple”,“Restart=on-abort”,“PIDFile=/mysql/app/logs/mycat.pid”,“ExecStart=/mysql/app/mycat/bin/myca t start”,“PrivateTmp=tru e”,“[Install]”,“WantedBy=multi-user.target”行,之后保存该文件。
执行“systemctl enable mycat”,“systemctl daemon-reload”,“systemctl start mycat”命令,可以让MyCat跟对系统启动自动运行。当其启动后,执行“ps-ef|grep mycat”命令,可以查看MySQL的启动信息。
对于MyCat,默认使用的端口为TCP 8066,MyCat利用该端口接收数据库客户端的访问请求,其管理端口为TCP 9066,用来接收MyCat监控命令,查询MyCat运行状态,重新加载配置文件等。
执行“netstat -tnlp”命令,可以查看端口信息。也可以执行“ss -lntup|grep java”命令,也可以显示上述端口信息。
对于MyCat来说,是通过配置文件的方式,来定义逻辑库和相关配置的,其主要包括MyCat安装路径下的“conf”目录中的“schema.xml”,“rule.xml”和“serve r.xml”等配置文件。在“schema.xml”文件中定义来逻辑库,表以及分片节点等内容,对应的是物理数据库和数据库表的配置。在“rule.xml”文件中定义分片(即分库分表)规则,在“server.xml”文件中定义用户以及系统相关变量配置文件,账号以及参数等。
在本例中就在MySQL主动复制的基础上实现读写分离操作,在“server01”上部署MyCat,其IP为172.16.1.100,在“serverdb 01”到“serverdb03”主机上安装MySQL,其IP从172.16.1.51到172.16.1.5 3,其中“serverdb01”为Master节点,其余两台作为Slave节点。
在默认情况下,在从节点上实现读操作,在主节点上实现写操作。
注意,在MySQL主动复制配置中,如果涉及到函数或者存储过程的同步复制的话,需要在“my.cnf”文件中的“mysqld”段中添加“log_bin_trust_function_creators=true”行,也可以在客户端执行“set global bin_trust_function_creators=1”命令进行配置。如果要执行读写分离下的主从切换(例如主节点出现故障等),那么某个从节点有可能变成主节点,因此在从节点上就不能设置为只读“read_only=1”参数。
为了防止因为大小写不明确导致找不到表的问题,可以在“/etc/my.cnf”文件中的“mysqld”段添加“lower_case_table_names=1”行。对于如何配置MySQL主动复制,这里限于篇幅就不在赘述了,其主要步骤是先准备主从二进制和中断日志目录。
之后在主从节点上配置“my.cnf”文件,准备主库和从库参数。
注意,其中的“autocommit=0”行需要屏蔽,启用自动提交功能,否则数据无法提交到后端。
接着在主从节点创建用于复制操作的账户并授权,最后在从库上使Slave和Master节点建立连接。
进入MyCat中的“conf”目录,执行“vi schema.xml”命令,在其中添加“
这些逻辑库仅仅在MyCat中可见,并不是真正意义上的数据库。
注意,其中“checkSQLschema”参数用来检查并过滤SQL中包含Schema的情况。
“sqlMaxLimit”参数设置默认返回的最大记录数。“dataNode”参数定义数据节点名称。添加“
输 入“
输 入“
进入MyCat中的“conf”目 录,执 行“vi server.xml”命 令,输 入“
输 入“
DML权限设置设置顺序为“insert”,“update”,“select” 和“delete”。Privileges节点中的“check”属性用来标识是否开启DML权限检 查,默认为“false”不进行检查。输入“
例如,执行“mysql-uadminuser -pxxx -P9066-h172.16.1.100”命令,使用上述定义的管理用户在客户端连接MyCat。连接完成后,执行“show databases;”命令,显示逻辑库信息。执行“show@@heartbeat;”命令,显示心跳信息。执行“show@@datasource;”命令,显示数据源信息。执行“mysql-uadminuser -pxxx -P8066-h172.16.1.100”命令,可以连接MyCat业务系统。执行“show databases;”命令,查看数据库信息。
注意,这里并没有使用MySQL的Root账户,有利于提高访问的安全性。
执行“use mycatdb1;”命令,切换到指定的逻辑库中,执行“show tables;”命令,查看其中的表信息。您可以根据需要,在数据库中执行各种操作。
如果其中一台MySQL宕 机,可以执行“mysql-uadminuser -pxxx -P8066-h172.16.1.100 -e "select@@hostname";”命令,来进行测试,发现数据库依然可以正常访问。
如果是MySQL群集中的Mastsr主机宕机,可以切换到“serverdb02”主机上,让其顶替Mastere工作。之后将上述“schema.xml”中的““