linux下mysql基于mycat做主从复制和读写分离之基础篇
Linux下mysql基于mycat实现主从复制和读写分离
1.基础设施
两台虚拟机:172.20.79.232(主) 172.20.79.233(从)
1.1软件设施
mysql5.6.39 , mycat1.6-RELEASE , jdk1.7及其以上版本
2.实现步骤一(mycat实现读写分离)
1.首先在两台服务器安装mysql
1.下载mysql的repo源
$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
2.安装mysql-community-release-el7-5.noarch.rpm包
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
安装这个包后,会获得两个mysql的yum repo源:
/etc/yum.repos.d/mysql-community.repo
/etc/yum.repos.d/mysql-community-source.repo
3.安装mysql并修改my.cnf文件(才能使用mycat)
$ sudo yum install mysql-server
vi /etc/my.cnf
在后面追加一行或修改
lower_case_table_names = 1
根据提示安装就可以了,不过安装完成后没有密码,需要重置密码
4.重置mysql密码
$ mysql -u root
登录时有可能报这样的错:ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2),原因是/var/lib/mysql的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户:
$ sudo chown -R root:root /var/lib/mysql
5.开启mysql远程连接
grant all on *.* to root@'%' identified by 'admin123' with grant option;
flush privileges;
6.重启mysql服务
$ service mysqld restart
7.接下来登录重置密码:
$ mysql -u root //直接回车进入mysql控制台
mysql > use mysql;
mysql > update user set password=password('123456') where user='root';
mysql > exit;
2.在主服务器安装mycat
1.下载mycat1.6
https://github.com/MyCATApache/Mycat-download
2.上传至主服务器解压安装
tar zxvf Mycat-server-1.6-RELEASE-20160405120037-linux.tar.gz -C /usr/local
cd /usr/local/mycat
groupadd mycat
useradd -g mycat mycat
passwd mycat
chown -R mycat.mycat /usr/local/mycat
export MYCAT_HOME=/usr/local/mycat
2.1 修改(新增)
vi /etc/hosts
172.20.79.232 root232
172.20.79.233 root233
2.2 修改mycat启动jdk路径
vi /usr/local/mycat/conf/wrapper.conf
修改wrapper.java.command=%JAVA_HOME%/bin/java
2.3 配置mycat 文件schema.xml
vi /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 这里的mycatdb与server.xml 里面名称一致 dataNode有几个节点就配置几个节点,用逗号分隔-->
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" />
<!-- database有几个数据库就配置几行即可-->
<dataNode name="dn1" dataHost="localhost1" database="db01" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--
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",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
writeType表示写模式
writeType="0",所有的操作发送到配置的第一个writehost
writeType="1",随机发送到配置的所有writehost
writeType="2",不执行写操作
switchType指的是切换的模式,目前的取值也有4种:
switchType=‘-1‘ 表示不自动切换
switchType=‘1‘ 默认值,表示自动切换
switchType=‘2‘ 基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status
switchType=‘3‘基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为show status like ‘wsrep%‘。
-->
<heartbeat>select user()</heartbeat>
<!--配置mysql写入的节点-->
<writeHost host="hostM1" url="172.20.79.232:3306" user="root"
password="admin123">
<!--配置mysql读取的节点-->
<readHost host="hostS2" url="172.20.79.233:3306" user="root" password="admin123" />
</writeHost>
</dataHost>
</mycat:schema>
2.4 配置mycat 用户名和密码在文件server.xml
vi /usr/local/mycat/conf/schema.xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
<property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="sequnceHandlerType">2</property>
<!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
<property name="processorBufferPoolType">0</property>
<property name="handleDistributedTransactions">0</property>
<!--
off heap for merge/order/group/limit 1开启 0关闭
-->
<property name="useOffHeapForMerge">1</property>
<!--
单位为m
-->
<property name="memoryPageSize">1m</property>
<!--
单位为k
-->
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<!--
单位为m
-->
<property name="systemReserveMemorySize">384m</property>
<!--是否采用zookeeper协调切换 -->
<property name="useZKSwitch">true</property>
</system>
<user name="root">
<property name="password">admin123</property>
<property name="schemas">mycatdb</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">mycatdb</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
3.测试
3.1 首先启动mycat
cd /usr/local/mycat/bin
./mycat start
3.2 查看mycat是否启动
netstat -ntulp |grep 8066
8066为mycat监听端口
3.3 修改日志级别为debug
vi /usr/local/mycat/conf/log4j2.xml 修改asyncRoot level="debug"
3.4 使用mycat登录mysql
mysql -uroot -padmin -h172.20.79.232 -P8066 -Dmycatdb
3.5 测试是否读写分离
首先动态打印日志
tail -f -n 500 mycat.log
在mycat中,进行测试
新建数据库(主从都必须建):create database db01;
use db01;
create table test(id int not null,name varchar(24) not null);
insert into test vales(1,"test1");
select * from test;
写入的时候,日志打印记录如果是主mysql,查询的时候,日志打印记录是从mysql ,则实现读写分离
3.实现步骤二(mysql实现主从复制)
1.修改Master服务器mysql的my.cnf文件
[mysqld]
log_bin = mysql-bin #记录操作日志
binlog_ignore_db = mysql #不同步mysql系统数据库
server_id = 1
2.首先登录Master的mysql配置创建mysql 的slave用户
mysql> grant replication slave,reload,super on *.* to slave@172.20.79.233 identified by 'slave';
3.修改Master服务器slave的my.cnf文件
log_bin = mysql-bin #记录操作日志
replicate_ignore_db = mysql #不同步mysql系统数据库
slave_skip_errors = all
server_id = 2
4.主mysql执行sql
show master status;

5.slave的mysql连接master的mysql
根据第2步配创建的user(slave),password(slave) 和 第4步获取的file(mysql-bin.00004),position(120) 连接主mysql
mysql> change master to master_host='172.20.79.232', master_user='slave', master_password='slave',master_log_file='mysql-bin.00004',master_log_pos=120;
6.slave开启从mysql,mysql中执行
start slave;
7.查看slave的mysql状态,mysql执行
show slave status\G;

8.测试主从复制
首先在主从mysql上都新建数据库db02
主mysql执行:
use db02;
create table user(id int not null primary key,name varchar(50));
从mysql上也会产生user表,主从mysql配置成功!
到此结束!
linux下mysql基于mycat做主从复制和读写分离之基础篇的更多相关文章
- Mycat 做简单的读写分离(转载)
大漠小狼的个人空间 http://www.51testing.com/html/34/369434-3686088.html 使用Mycat 做简单的读写分离(一) 原本使用的是amoeba做的读 ...
- MySQL+Amoeba实现数据库主从复制和读写分离
MySQL读写分离是在主从复制的基础上进一步通过在master上执行写操作,在slave上执行读操作来实现的.通过主从复制,master上的数据改动能够同步到slave上,从而保持了数据的一致性.实现 ...
- [mysql终极优化]之主从复制与读写分离详细设置教程
读写分离与主从复制是提升mysql性能的重要及必要手段,大中型管理系统或网站必用之. 一.什么是读写分离与主从复制 先看图 如上图所示,当web server1/2/3要写入数据时,则向mysql d ...
- 利用mycat实现基于mysql5.5主从复制的读写分离
整体步骤: 1.准备好两台服务器,一台作为主数据库服务器,一台作为从服务器,并安装好mysql数据库,此处略 2.配置好主从同步 3.下载JDK配置mycat依赖的JAVA环境,mycat采用java ...
- linux中MySQL主从配置(Django实现主从读写分离)
一 linux中MySQL主从配置原理(主从分离,主从同步) mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到sl ...
- Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践
一.为什么要做Mysql的主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...
- mysql学习(3)-linux下mysql主从复制
前言:为什么MySQL要做主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...
- 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践
一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...
- Linux下MySQL主从复制(GTID)+读写分离(ProxySQL)-实施笔记
GTID概念: GTID( Global Transaction Identifier)全局事务标识.GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文 ...
随机推荐
- 解析STM32的库函数
意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作.通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底 ...
- 冷饭新炒:理解Redisson中分布式锁的实现
前提 在很早很早之前,写过一篇文章介绍过Redis中的red lock的实现,但是在生产环境中,笔者所负责的项目使用的分布式锁组件一直是Redisson.Redisson是具备多种内存数据网格特性的基 ...
- 3D动漫人物代码
<div id="page_end_html"> <script src="https://eqcn.ajz.miesnfu.com/wp-conten ...
- Windows软件Everything的配置
Everything配置 Everything是一款Windows下的搜索软件,怎么安装应该不难.这里说一下个人使用的两个习惯. 主要就两点,一个是快捷键,一个是搜索路径 1. 快捷键 配置快捷键,点 ...
- Haproxy-1.8.20 根据路径(URI)转发到后端不同集群
HAProxy根据不同的URI 转发到后端的服务器组 1 ) 实验内容说明: 1.1 ) 根据不同的URI 转发到后端的服务器组. /a /b 和其他 默认使用其他. 1.2 ) 使用IP介绍: ha ...
- newbee-mall 开源商城新计划:秒杀功能、优惠券、对接支付宝
新项目是 newbee-mall 的升级版本,暂时就叫它 newbee-mall-plus 吧,第一阶段会开发秒杀功能.优惠券.对接支付宝这些功能,也会慢慢加入 Redis. Elastic Sear ...
- docker logs 查看容器日志操作
查看日志 官方文档:https://docs.docker.com/engine/reference/commandline/logs/ # 查看指定数量的实时日志 # docker logs -tf ...
- 【IMP】IMP导入表的时候,如果表存在怎么办
在imp导入的时候,如果表存在的话,会追加数据在表中, 所以如果不想追加在表中的话,需要将想导入的表truncate掉后,在imp SQL: truncate table TEST1; imp tes ...
- 使用 gRPCurl 调试.NET 5的gPRC服务
介绍 你用过 Curl 吗?这个工具允许你通过 http 来发送数据,现在有一个适用于gGRPC的工具,gRPCurl,在本文中,我将介绍如何下载安装这个工具,然后通过这个工具调试我们.NET 5上面 ...
- UVM基础总结——基于《UVM实战》示例
一.前言 工作一直在做SoC验证,更关注模块间的连接性和匹配性,所以相比于擅长随机约束激励的UVM来说,定向测试的概念更容易debug.当然前提是IP已经被充分验证.因此觉得接触UVM的机会较少.到现 ...