Mycat读写分离(一主一从)
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 因为是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 <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" </schema> <dataNode name="dn1" dataHost="host1" <dataHost name="host1" maxCon="1000" writeType="0" dbType="mysql" <heartbeat>select <!-- can have multi write <writeHost host="hostM1" password="123456"> <readHost </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. 启动Mycat:
进入bin目录启动mycat (确保配置的读写分离Host已经配置了主从数据同步)
cd /usr/local/mycat/bin
./mycat start
查看Mycat是否正常启动(查看logs的wrapper.log)
- 2. Mycat已经成功启动,连接上Mycat
mysql -umycat -p123456 -h 192.168.1.121 -P8066
- 3. 查看当前可使用数据库
show databases;
- 4. 使用数据库
use TESTDB;
- 5. 创建测试数据表
CREATE TABLE id body varchar(100) NOT NULL , PRIMARY KEY (id) ) ; |
- 6. 查看数据表是否创建成功
desc company;
7读写分离测试:
确保2台已经配置好主从的MYSQL服务器主从连接状态正常。
向company表插入1条数据:
insert into |
查询数据:select * from company;
分别查看主、从2个数据库,可以看到数据都已经存在。
主数据库的数据正常通过mycat代理层插入了。
从服务器的数据通过主从复制同步过来了。
Mycat读写分离(一主一从)的更多相关文章
- MyCat读写分离-笔记(四)
概述 Mycat能够实现数据库读写分离,不能实现主从同步,数据库的备份还是基于数据库层面的.Mycat只是数据库的中间件: Mycat读写分离配置 在MySQL中间件出现之前,对于MySQL主从集群, ...
- Mycat读写分离、主从切换、分库分表的操作记录
系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...
- Mysql之Mycat读写分离及分库分表
## 什么是mycat ```basic 1.一个彻底开源的,面向企业应用开发的大数据库集群 2.支持事务.ACID.可以替代MySQL的加强版数据库 3.一个可以视为MySQL集群的企业级数据库,用 ...
- Mycat读写分离的简单实现
目录 1.Mycat读写分离的配置 1.1.Mycat是什么 1.2.Mycat能干什么 1.2.1.数据库的读写分离 1.2.1.1.数据库读写分离图解 1.2.2.数据库分库分表 1.2.2.1. ...
- web 项目 连接mycat 读写分离失效问题,
问题描述:mycat 读写分离已配好,在sql工具上查询操作是可以的,但是在项目中,读数据就走write 数据库, 解决 :环境spring +mvc +ibaites,在java中自己写j ...
- LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)
1 配置MYSQL主备同步 1.1 测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...
- LVS+MYCAT+读写分离+MYSQL主备同步部署手册
LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1 配置MYSQL主备同步…. 2 1.1 测试环境… 2 1.2 配置主数据库… 2 1.2.1 ...
- 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)
LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1 配置MYSQL主备同步…. 2 1.1 测试环境… 2 1.2 配置主数据库… 2 1.2.1 ...
- mysql主从同步+mycat读写分离+.NET程序连接mycat代理
背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...
随机推荐
- springboot打包jar包后运行
我们知道,spring boot内嵌tomcat,打包成jar包以后,直接就可以运行. 我们也可以使用启动项里面的mian入口来运行程序. 运行jar包时,我们一般是java -jar xxx.jar ...
- CNCF 宣布成立应用交付领域小组,正式开启云原生应用时代
作者|赵钰莹 作为云原生领域的顶级开源社区, Cloud Native Computing Foundation (云原生基金会,以下简称 CNCF)近日宣布成立 Application Delive ...
- Elastic Stack 笔记(四)Elasticsearch5.6 索引及文档管理
博客地址:http://www.moonxy.com 一.前言 在 Elasticsearch 中,对文档进行索引等操作时,既可以通过 RESTful 接口进行操作,也可以通过 Java 也可以通过 ...
- linux常见报错
零.目录 一. 文件和目录类 File exist 文件已经存在 No such file or directory 没有这个文件或目录(这个东西不存在) command not found 命令找不 ...
- 豆瓣电影TOP250和书籍TOP250爬虫
豆瓣电影 TOP250 和书籍 TOP250 爬虫 最近开始玩 Python , 学习爬虫相关知识的时候,心血来潮,爬取了豆瓣电影TOP250 和书籍TOP250, 这里记录一下自己玩的过程. 电影 ...
- 转:怎么用Sql语句获取一个数据库中的所有表的名字
用sql获取数据库中所有的表名的方法:1.oracle下:select table_name from all_tables;2.MySQL下:select table_name from infor ...
- Java匹马行天下之Java帝国的崛起(大结局)
Java匹马行天下之Java帝国的崛起大结局 前言: [博客*缘] 网络真情伴, 博客友谊连. 笑中藏泪暖中寒. 回想那些悲喜, 苦涩也缠绵. 往事难回首, 新篇染旧言. 世间多少梦能全. 感谢相牵, ...
- 基于Spark的电影推荐系统(实战简介)
写在前面 一直不知道这个专栏该如何开始写,思来想去,还是暂时把自己对这个项目的一些想法 和大家分享 的形式来展现.有什么问题,欢迎大家一起留言讨论. 这个项目的源代码是在https://github. ...
- Servlet与Tomcat运行示例
Servlet与Tomcat运行示例 本文将写一个servlet,然后将其部署到Tomcat的全过程.本文参考<深入拆解Tomcat_Jetty>内容. 一.基于web.xml开发步骤 下 ...
- C# 事件 Event
一.事件是什么 微软的定义:和委托类似,事件是后期绑定机制. 实际上,事件是建立在对委托的语言支持之上的.事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式. 任何其他组件都可以订阅事件 ...