Mycat读写分离(一主一从)

我们一共使用2个虚拟机,每个机器的作用如下:

主机名

IP地址

任务角色

数据库

node1

192.168.1.121

Mycat, master

MySQL

node2

192.168.1.122

slave

MySQL

Mysql主服务器配置

第一步:修改/etc/my.cnf文件:

在[mysqld]段下添加:

datadir=/var/lib/mysql                        默认数据存储目录

server-id=1                                            主机唯一id

log-bin=/var/lib/mysql/mysqlbin                  启用二进制日志

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

binlog-do-db=boot_security                  设置需要复制的数据库

binlog-ignore-db=mysql                           设置不要复制的数据库

binlog_format=STATEMENT                 设置logbin格式

第二步:重启mysql服务

systemctl mysqld restart

第三步:建立帐户并授权slave

mysql> GRANT REPLICATION SLAVE ON *.* TO 'sendcode'@'%' IDENTIFIED BY '123456';

#一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

刷新权限

mysql> FLUSH   PRIVILEGES;

查看mysql现在有哪些用户

mysql>select user,host from mysql.user;

第四步:查询master的状态

mysql> show master status;

+----------------------+------------+--------------------+------------------+-----------------------------+

| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+----------------------+------------+--------------------+------------------+-----------------------------+

| mysql-bin.000001 |  120    | boot_security  | mysql        |                    |

+----------------------+------------+--------------------+------------------+-----------------------------+

注意:File    Position :两个值稍后配置从库的时候可能会用到! 

Mysql从服务器配置

第一步:修改my.cnf文件

[mysqld]

server-id = 2

relay-log=mysql-relay

注意:修改完成后,必须重启mysql服务:

systemctl mysqld
restart

第二步:配置从服务器

CHANGE MASTER TO MASTER_HOST='192.168.1.121',MASTER_USER='sendcode',MASTER_PASSWORD='123456',MASTER_LOG_FILE=' mysql-bin.000001',MASTER_LOG_POS=120;

注意语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户。

Mysql5.6以前的版本配置需要增加2个参数:

master_log_file='mysql-bin.000001'   //主服务器日志文件名称

master_log_pos=120               //主服务器日志线程号

第三步:启动从服务器复制功能

Mysql>start
slave;

第四步:检查从服务器复制功能状态:

mysql> show
slave status \G;

……………………(省略部分)

Slave_IO_Running:
Yes //此状态必须YES

Slave_SQL_Running:
Yes //此状态必须YES

……………………(省略部分)

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

错误处理:

如果出现此错误:

Fatal error: The
slave I/O thread stops because master and slave have equal MySQL server
UUIDs; these UUIDs must be different for replication to work.

因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改。

解决方法:

删除/var/lib/mysql/auto.cnf文件,重新启动服务。

以上操作过程,从服务器配置完成。

如果需要重新配置主从 需要从机操作

stop slave;  
                  停止从服务复制功能

reset master;                重新配置主从

Mycat配置

Mycat 1.6 支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠,配置如下:

1.修改文件位置:/usr/local/mycat/conf/Schema.xml

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM
"schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

<schema name="TESTDB" checkSQLschema="false"
sqlMaxLimit="100" dataNode="dn1">

</schema>

<dataNode name="dn1" dataHost="host1"
database="boot_security" />

<dataHost name="host1" maxCon="1000"
minCon="10" balance="3"

writeType="0" dbType="mysql"
dbDriver="native" switchType="1"  slaveThreshold="100">

<heartbeat>select
user()</heartbeat>

<!-- can have multi write
hosts -->

<writeHost host="hostM1"
url="192.168.1.121:3306" user="root"

password="123456">

<readHost
host="hostS2" url="192.168.1.122:3306"
user="root" password="123456" />

</writeHost>

</dataHost>

</mycat:schema>

Schema标签:name指明schema逻辑数据库的名称,checkSQLschema是否去除sql语句中的数据库名称,如果sql查询语句没有limit语句,sqlMaxLimit为查询语句加上limit。

dataNode标签:定义节点,指定数据虚拟服务器,数据库等属性

dataHost标签:定义具体的数据库实例,读写分离配置,心跳包语句。maxCon属性指定每个读写实例连接池的最大连接。minCon属性指定每个读写实例连接池的最小连接。

balance属性,目前的取值有 4 种:

balance="0",
不开启读写分离机制,所有读写操作都发送到当前可用的writeHost 上。

balance="1",所有读操作都随机的发送到readHost

balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。

balance="3", 所有读请求随机分发到 wiriterHost 对应的 readhost 执行

2.根据 server.xml(/usr/local/mycat/conf/server.xml)配置的用户名和密码,我配置的是mycat,123456,Mycat运行默认端口为8066

测试读写分离

  1. 1.  启动Mycat:

进入bin目录启动mycat (确保配置的读写分离Host已经配置了主从数据同步)

cd /usr/local/mycat/bin

./mycat start

查看Mycat是否正常启动(查看logs的wrapper.log)

  1. 2.  Mycat已经成功启动,连接上Mycat

mysql -umycat   -p123456 -h 192.168.1.121 -P8066

  1. 3.  查看当前可使用数据库

show databases;

  1. 4.  使用数据库

use TESTDB;

  1. 5.  创建测试数据表

CREATE TABLE
company (

id 
bigint(20) NOT NULL ,

body varchar(100) NOT NULL ,

PRIMARY KEY (id)

) ;

  1. 6.  查看数据表是否创建成功

desc company;

7读写分离测试:

确保2台已经配置好主从的MYSQL服务器主从连接状态正常。

向company表插入1条数据:

insert into
company (id,body)values(1,’body1’);

查询数据:select * from company;

分别查看主、从2个数据库,可以看到数据都已经存在。

主数据库的数据正常通过mycat代理层插入了。

从服务器的数据通过主从复制同步过来了。

Mycat读写分离(一主一从)的更多相关文章

  1. MyCat读写分离-笔记(四)

    概述 Mycat能够实现数据库读写分离,不能实现主从同步,数据库的备份还是基于数据库层面的.Mycat只是数据库的中间件: Mycat读写分离配置 在MySQL中间件出现之前,对于MySQL主从集群, ...

  2. Mycat读写分离、主从切换、分库分表的操作记录

    系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...

  3. Mysql之Mycat读写分离及分库分表

    ## 什么是mycat ```basic 1.一个彻底开源的,面向企业应用开发的大数据库集群 2.支持事务.ACID.可以替代MySQL的加强版数据库 3.一个可以视为MySQL集群的企业级数据库,用 ...

  4. Mycat读写分离的简单实现

    目录 1.Mycat读写分离的配置 1.1.Mycat是什么 1.2.Mycat能干什么 1.2.1.数据库的读写分离 1.2.1.1.数据库读写分离图解 1.2.2.数据库分库分表 1.2.2.1. ...

  5. web 项目 连接mycat 读写分离失效问题,

    问题描述:mycat 读写分离已配好,在sql工具上查询操作是可以的,但是在项目中,读数据就走write 数据库, 解决      :环境spring +mvc +ibaites,在java中自己写j ...

  6. LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)

    1      配置MYSQL主备同步 1.1    测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...

  7. LVS+MYCAT+读写分离+MYSQL主备同步部署手册

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  8. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  9. mysql主从同步+mycat读写分离+.NET程序连接mycat代理

    背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...

随机推荐

  1. Django之使用内置函数和celery发邮件

    邮箱配置 开启stmp服务 以163邮箱为例,点击设置里面的stmp 开启客户端授权密码 如上所示,因为我已经开启了,所以出现的是以上页面. 这样,邮箱的准备就已经完成了. 使用Django内置函数发 ...

  2. 【最新】破解微信小程序,获取微信小程序源码,破解微信wxapkg,仅需5秒

    一个后端第一次接触iview,就简单写了个网站. 之前看到有人发解析wx小程序源码包的软件,但是因为微信的升级,之前的办法已经不行了.现在重新改了js文件,适配了最新的版本. 之前微信wxapkg包获 ...

  3. Python集训营45天—Day03

    目录 1. 分支结构 1.1 初步介绍 1.2 使用案例 1.3 练习 2.循环结构 1.1 初步介绍 1.2 使用案例 1. 分支结构 1.1 初步介绍 至今,我们所写的Python代码都是顺序执行 ...

  4. request对象的方法

    request对象封装的是请求的数据,由服务器创建,作为实参传递给Servlet的方法,一个请求对应一个request对象,request对象可以获得请求数据. 1.获取请求行信息 (1)get提交 ...

  5. Spring Boot 入门之基础构建篇(一)

    博客地址:http://www.moonxy.com 一.前言 随着 Spring 的功能越来越强,在使用 Spring 的时候,门槛也变得高了起来,诸如搭建一个基于 Spring 的 Web 程序却 ...

  6. Python3.7.4入门-0/1To Begin/数据类型与结构

    0 To Begin //:向下取整除法 **:乘方 在交互模式下,上一次打印出来的表达式被赋值给变量 _ 如果不希望前置了 \ 的字符转义成特殊字符,可以使用 原始字符串 方式,在引号前添加 r 即 ...

  7. 将maven项目导入到eclipse中

    一,前言 本文来演示一下如何将一个新的maven项目到入到eclipse中. 在文章使用命令行创建maven web项目中我们使用maven命令行,创建了web工程,接下来为了开发方便我要将新建的工程 ...

  8. 字符串转数字(with Java)

    1. 字符串中提取数字 两个函数可以帮助我们从字符串中提取数字(整型.浮点型.字符型...). parseInt().parseFloat() valueOf() String str = " ...

  9. jquery的api以及用法总结-数据/操作/事件

    数据 .data() 在匹配元素上存储任意相关数据或返回匹配的元素集合中的第一个元素的给定名称的数据存储的值 .data(obj) 一个用于更新数据的键/值对 .data()方法允许我们再dom元素上 ...

  10. Redis数据库之服务器主从配置

    目的 主要培养对分布式REDIS主从复制架构运用的能力.理解并掌握REPLICATION工作原理的同时,能独立配置Replication ,使数据库运行在主从架格上.针对主从复制架构的运用,着力掌握S ...