资讯专栏INFORMATION COLUMN

MySQL数据库运维之读写分离02

高璐 / 2746人阅读

摘要:上篇文章中介绍了读写分离的含义及读写分离的意义,然后结合中间件介绍了读写分离的搭建及验证过程,本篇文章将继续介绍另一种流行的数据库中间件的搭建及使用过程一的启动及停止脚本编辑,然后写入如下内容然后写入如下内容目录配置文件和日志目录

上篇文章中介绍了读写分离的含义及读写分离的意义,然后结合mysql-proxy中间件介绍了读写分离的搭建及验证过程,本篇文章将继续介绍另一种流行的数据库中间件MyCat的搭建及使用过程!

一、mysql-proxy的启动及停止脚本
1、编辑/etc/init.d/mysqlproxy,然后写入如下内容

[root@mysql-proxy ~]# vim /etc/init.d/mysqlproxy

2、然后写入如下内容

#!/bin/bash
#
# chkconfig: - 85 15
# description: mysql-proxy start|stop|restart|status
#
# Source function libary
. /etc/rc.d/init.d/functions
#目录、配置文件和日志目录根据自身的安装目录而定
BASEPATH=/usr/local/mysql-proxy-0.8.5
CMD=$BASEPATH/bin
CONF_FILE=$BASEPATH/conf/mysql-proxy.conf
LOG_PATH=$BASEPATH/logs

# log dir
if [ ! -z "$LOG_PATH" ]; then
   mkdir -pv $LOG_PATH
fi
function Usage() {
   echo "Please Use service mysqlproxy {start|stop|restart|status}"
   exit 1
}
# desision the mysql-proxy is running or not
function isrunning(){
   if [ `ps -ef| grep mysql-proxy | grep -v grep | wc -l` -gt 1 ]; then
      return 1
   else
      return 0
   fi
}
# start the mysql-proxy service
function start_mysql_proxy() {
   isrunning
   RET_VAL=$?
   if [ $RET_VAL -eq 1 ]; then
      echo "mysql-proxy already running!"
   else
      $CMD/mysql-proxy --defaults-file=$CONF_FILE
      sleep 2
      isrunning
      RET_VAL=$?
      if [ $RET_VAL -eq 1 ]; then
          action "mysql-proxy start success!" /bin/true
      else
          action "mysql-proxy start failure!" /bin/false
          exit 2
      fi
   fi
}
# stop the mysql-proxy service
function stop_mysql_proxy() {
   isrunning
   RET_VAL=$?
   if [ $RET_VAL -eq 0 ]; then
      echo "mysql-proxy already stopped!"
   else
      killall mysql-proxy
      sleep 1
      isrunning
      RET_VAL=$?
      if [ $RET_VAL -eq 0 ]; then
          action "mysql-proxy stop success!" /bin/true
      else
          action "mysql-proxy stop failure!" /bin/false
          exit 2
      fi
   fi
}
# restart the mysql-proxy service
function restart_mysql_proxy() {
   stop_mysql_proxy
   sleep 2
   start_mysql_proxy
}
# show status for mysql-proxy
function status_mysql_proxy() {
   isrunning
   RET_VAL=$?
   if [ $RET_VAL -eq 1 ] ;then
      echo "mysql-proxy is running!"
   else
      echo "mysql-proxy is stopped!"
   fi
}
if [ ! $# -eq 1 ]; then
   Usage
fi
case $1 in
start)
  start_mysql_proxy
  ;;
stop)
  stop_mysql_proxy
  ;;
restart)
  restart_mysql_proxy
  ;;
status)
  status_mysql_proxy
  ;;
*)
  Usage
  ;;
esac

3、将服务添加到系统服务中

[root@mysql-proxy ~]# chkconfig --add mysqlproxy

二、MyCat中间件介绍
1、MyCat是什么
简单介绍:MyCat是一个基于Java开发的数据库中间件产品,可以支持市面上大多数的数据库,提供强大的数据分片处理能力。
详细介绍:请参考官网http://www.mycat.io/

2、MyCat能做什么
常用的功能为基于心跳的自动故障切换,读写分离,分表;更多功能介绍请参考官网首页上的关键特性部分:

3、搭建
主库服务器:192.168.0.4:3306
从库服务器:192.168.0.5:3306
代理服务器:192.168.0.6
JDK:jdk1.8.0_161.tar.gz
操作系统:CentOS6.9 x86_64
(1)配置jdk环境,操作过程如下

[root@mysql-proxy java]# mkdir -pv /usr/local/java
[root@mysql-proxy java]# tar xf jdk-8u161-linux-x64.tar.gz -C /usr/local/java
[root@mysql-proxy java]# vim /etc/profile
#添加如下内容
  JAVA_HOME=/usr/local/java/jdk1.8.0_161
  CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  PATH=$PATH:$JAVA_HOME/bin
  export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL CLASSPATH
#使环境变量生效
[root@mysql-proxy java]# source /etc/profile
#验证是否配置成功
[root@mysql-proxy java]# java -version
  java version "1.8.0_161"
  Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
  Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
[root@mysql-proxy java]# javac -version
  javac 1.8.0_161

(2)下载mycat安装包,上传至服务器,然后解压
下载地址:http://dl.mycat.io/1.6-RELEAS...

[root@mysql-proxy ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

(3)配置schema.xml

[root@mysql-proxy local]# vim /usr/local/mycat/conf/schema.xml
#写入如下内容



        
        
        
        
        
                show slave status
                
                
                
                        
                        
                        
                
                
        

其他参数解释如下:
balance:负载策略
balance="0",不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-S1,M2-S2 并且M1 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
balance="2",所有读操作都随机的在writeHost、readHost上分发
balance="3",所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力。

writeType:负载均衡类型
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的 writeHost

switchType:发生故障是否自动切换
switchType="1",默认值 自动切换
switchType="2",基于MySql主从同步的状态决定是否切换心跳语句为 show slave status
switchType="3",基于mysql galary cluster 的切换机制(适合集群)1.4.1版本的心跳语句为 show status like "wsrep%"

(4)配置server.xml

[root@mysql-proxy conf]# vim server.xml
#写入如下内容



        
        
                
                user
                
                test_db
                
                false
        

(5)配置jdk的执行路径

[root@mysql-proxy conf]# vim wrapper.conf
#将如下内容改为自己java命令所在的路径
  wrapper.java.command=/usr/local/java/jdk1.8.0_161/bin/java

(6)如果主机配置有主机名称,需要在/etc/hosts文件中指定,否则启动mycat会提示找不到主机名类似的错误,本人配置的主机名称为mysql-proxy,所以需要在/etc/hosts文件中加如下内容

[root@mysql-proxy conf]# vim /etc/hosts
#添加如下内容
192.168.0.6 mysql-proxy

(7)启动mycat服务

[root@mysql-proxy conf]# cd /usr/local/mycat/bin/

(8)查看是否启动成功,mycat启动之后,会默认监听在tcp的8066端口

[root@mysql-proxy logs]# netstat -tunlp | grep 8066
 tcp        0      0 :::8066                     :::*                        LISTEN      2994/java

4、测试mycat的读写分离
(1)使用server.xml配置文件中配置的用户连接mycat服务

[root@mysql-proxy logs]# mysql -uuser -puser -P8066

(2)查看数据库,会看到配置文件中所配置的数据库

mysql> SHOW DATABASES;
+----------+
| DATABASE |
+----------+
| test_db  |
+----------+
1 row in set (0.01 sec)

注意:

 a、在server.xml中会配置数据库名称,这个数据库名称和schema.xml中配置的数据库关联,如果配置多个数据库,中间使用逗号隔开。如:db1,db2。
 b、配置的数据库提前需要存在,否则使用过程中会出现错误。

(3)验证读写分离,首先需要修改mycat的日志级别,因为mycat默认的日志级别为info级别,看不到主机,查询语句等信息,需要将其改为debug级别

[root@mysql-proxy conf]# cd /usr/local/mycat/conf/
[root@mysql-proxy conf]# vim log4j2.xml
#修改如下内容

    
    
        
        
    

(4)保存,重启mycat服务

[root@mysql-proxy conf]# cd ../bin/
[root@mysql-proxy bin]# ./mycat restart

(5)查看实时日志

[root@mysql-proxy bin]# tail -f ../logs/wrapper.log

(6)重新打开一个shell窗口,然后执行创建表操作

mysql> CREATE TABLE student(id int);
Query OK, 0 rows affected (0.21 sec)

执行完成之后,可以看到另外一个窗口中打印出的日志信息中的IP地址。如下,可以看到创建表的操作是在master(192.168.0.4)上完成的

(7)然后执行select操作,查看日志。如下,可以看到查询表的操作是在slave(192.168.0.5)上完成的

mysql> SELECT * FROM student;
Empty set (0.01 sec)

后续文章将更新在个人小站上,欢迎查看。

至此,基于MyCat的读写分离搭建及验证完毕!对于Mycat中间件,它的功能非常强大,还有其他好多高级功能。下篇文章将介绍MyCat的分库和分表操作,欢迎评论转发!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47849.html

相关文章

  • MySQL据库维之读写分离03

    摘要:上篇文章详细介绍了中间件的搭建及读写分离操作。以上内容介绍了使用取模的方式借助中间件实现数据库的分库分表及读写分离过程。 上篇文章详细介绍了MySQL中间件MyCat的搭建及读写分离操作。在实际场景中,面对大容量的数据,在数据库层面中通常的解决方案有两种,第一种是读写分离,第二种就是数据库的分库和分表了,本篇文章将基于MyCat中间件,详细介绍一下通过MyCat综合实现分库、分表及读写...

    ningwang 评论0 收藏0
  • MySQL据库维之读写分离01

    摘要:之前文章介绍了的主从同步复制,了解了主从同步的架构及搭建过程。这种通过将数据库按照职责划分的架构,称为数据库的读写分离架构。 之前文章介绍了MySQL的主从同步复制,了解了主从同步的架构及搭建过程。主从同步一方面用来做数据库的数据备份,另外一个很重要的因素是用来解决网站的读写瓶颈,本篇文章将介绍MySQL读写分离的原理,架构,然后使用mysql-proxy中间件搭建一个简单的mysql...

    cppowboy 评论0 收藏0
  • MySQL据库维之MySQL高可用01

    摘要:分库分表完成之后,数据容量及性能增加了,但是紧接着会面临着可用性的问题。但是,,,本身也是单点,需要实现高可用,后面介绍应用高可用时会详细介绍。至此,的高可用概念及使用实现的高可用已经搭建验证完毕,篇幅较长,难免有笔误,欢迎评论转发 前面文章介绍了MySQL的读写分离及分库分表过程。对于分库和分表,实现策略有好多种,需要根据业务来确定最适合的分库分表架构,文章中还有好多未涉及到的,读者...

    cnio 评论0 收藏0
  • MySQL据库维之数据恢复

    摘要:登录从库,查看信息是否正常,如果正常,登录主库,重新修改授权表,然后对外提供服务执行完成之后,主从数据恢复完毕。至此,数据恢复介绍完毕,上述介绍了使用全备加二进制日志实现单实例数据库和主从数据库的数据恢复过程,如有问题,欢迎评论指出。 之前三篇文章分别介绍了MySQL数据库常见的备份方法,其中包括逻辑备份和物理备份,本篇将总结一下MySQL数据库的数据恢复相关内容。这些数据恢复方案在之...

    Carl 评论0 收藏0
  • 单表60亿记录等大数据场景的MySQL优化和维之道 | 高可用架构

    摘要:此文是根据杨尚刚在高可用架构群中,针对在单表海量记录等场景下,业界广泛关注的问题的经验分享整理而成,转发请注明出处。杨尚刚,美图公司数据库高级,负责美图后端数据存储平台建设和架构设计。 此文是根据杨尚刚在【QCON高可用架构群】中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处。 杨尚刚,美图公司数据库高级DBA,负责美图后端数据...

    xcc3641 评论0 收藏0

发表评论

0条评论

高璐

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<