mycat+mysql主从搭建手册

本文中加入了大量的原理的内容的解释及详细说明,这里特殊说明下。有的小伙伴可能会说,为啥要加?凭啥要加?直接干不就完了吗!!其实不然,在很多大企业里,领导都会很看重原理类的东西,如果你原理懂,那在业务上就很好去做。所以以后的文章里我尽量都加入一些原理类的解释内容!!!

文章目录

  • 一、Mycat简介
    • 1. Mycat是什么?
  • 二. 、应用场景
  • 三、mysql概念
  • 四、环境介绍
    • 1. 硬件介绍
    • 2. 软件介绍
  • 五、mysql主从搭建配置
    • 1. 安装mysql依赖包
    • 2. 下载mysql源码包并上传至服务器相应路径
      • 3. 安装mysql
    • 4. 创建mysql用户和组
    • 5. 修改权限
    • 6. 初始化配置
    • 7. 启动mysql
    • 8. 配置用户环境变量
    • 9. 修改数据库密码
  • 六、主从配置
    • 1. 配置master
    • 2. 配置slave
  • 七、配置mycat
    • 1. 上传mycat和jdk1.8安装包
    • 2. 安装配置jdk(略)
    • 3. 解压mycat并配置环境变量
    • 4. 创建用户
    • 5. 修改server.xml文件
    • 6. 修改schema.xml文件
    • 7. 启动mycat
  • 八、验证
    • 1. 使用navicat连接mycat

一、Mycat简介

1. Mycat是什么?

从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的Server,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分库分表,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

Mycat发展到目前版本,已经不在是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NOSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在Mycat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅度降低开发难度,提升开发速度,在测试阶段,可以将一表定义为任何一种Mycat支持的存储方式,比如MySQL的MyASM表、内存表、或者MongoDB、LeveIDB以及号称是世界上最快的内存数据库MemSQL上。

为了更方便大家了解mycat的原理:(盗了两个个图哈!!

Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

mycat+mysql主从搭建手册_第1张图片
mycat+mysql主从搭建手册_第2张图片

二. 、应用场景

 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换。
 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片。
 多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化。
 报表系统,借助于Mycat的分表能力,处理大规模报表的统计。
 代替Hbase,分析大数据。
 询的记录需要在3秒内查询出来结果, 除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择。

三、mysql概念

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

mysql主从原理:从库生成两个线程,一个I/O线程,一个SQL线程;i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。

主从原理图:
mycat+mysql主从搭建手册_第3张图片

四、环境介绍

1. 硬件介绍

主机名 IP 角色 cpu 内存 硬盘
master1 192.168.0.1 主节点1 4C 8G 50G
slave1 192.168.0.2 从节点1 4C 8G 50G

2. 软件介绍

操作系统 centos7.4 x64
内核版本 3.10.0-693.2.2.el7.x86_64
mycat节点jdk版本 1.8.0
mysql版本 mysql 5.6.27

五、mysql主从搭建配置

1. 安装mysql依赖包

yum -y install make gcc-c++ cmake bison-devel  ncurses-devel  perl 

2. 下载mysql源码包并上传至服务器相应路径

通过ftp工具上传mysql安装包(5.6版本)至相应服务器/usr/local/src目录下(实际请安装路径请以项目规划为主!!!)。

3. 安装mysql

(解压并进入安装文件夹)

tar zxvf mysql-5.6.27.tar.gz
cd mysql-5.6.27
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make && make install

4. 创建mysql用户和组

groupadd mysql
useradd -g mysql mysql

5. 修改权限

chown -R mysql:mysql /usr/local/mysql

6. 初始化配置

cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

7. 启动mysql

cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start

8. 配置用户环境变量

vi /etc/profile

找到PATH内容添加如下内容:

;/usr/local/mysql/bin:$PATH

使环境变量生效

source /etc/profile

9. 修改数据库密码

mysql;
SET PASSWORD = PASSWORD('Skyfans_666');

六、主从配置

1. 配置master

编辑master配置文件

vi /usr/local/mysql/my.cnf

添加或修改如下内容:

log-bin=mysql-bin
server-id=1
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql

重启mysql并登陆

service mysql restart
mysql

授权并查看状态

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Skyfans_666';
mysql> FLUSH PRIVILEGES;
mysql> show master status;

配置完毕查看结果:
在这里插入图片描述

2. 配置slave

编辑slave配置文件

vi /usr/local/mysql/my.cnf

添加或修改如下内容:

log-bin=mysql-bin
server-id=2
relay-log=mysql-relay   #启用中继日志文件
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql
#replicate-do-db=sky
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

重启mysql并登陆

service mysql restart
mysql

停止并配置slave

mysql> stop slave;
mysql> change master to master_host='192.168.0.1',master_user='root',master_password='Skyfans_666',master_log_file='mysql-bin.000001', master_log_pos=394;

启动并验证:

mysql> start slave;
mysql> show slave status;
mysql> show slave status \G;

mycat+mysql主从搭建手册_第4张图片

遇到报错:
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.
在这里插入图片描述
解决方法:

删除slave节点auto.cnf文件,并重启mysql服务。

七、配置mycat

1. 上传mycat和jdk1.8安装包

通过ftp工具上传mycat和jdk1.8安装包至/application目录。

mkdir /application/
cd /application/

2. 安装配置jdk(略)

可参考地址:https://blog.csdn.net/xzm5708796/article/details/83268136

3. 解压mycat并配置环境变量

tar -xzvf Mycat-web-linux.tar.gz
echo "export PATH=/application/mycat/bin:$PATH">>/etc/profile
source  /etc/profile

4. 创建用户

举例:在master1上创建两个数据库用户,rep用户用来写入,rep_r用来读。

mysql -uroot -pSkyfans_666

注意:生产环境要尽量减小权限!

mysql> CREATE USER 'rep'@'%' IDENTIFIED BY '123456';
mysql> CREATE USER 'rep_r'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'rep'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'rep_r'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'rep'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'rep_r'@'%' IDENTIFIED BY '123456';
mysql> flush privileges;

5. 修改server.xml文件

cd /application/mycat/conf/
vi server.xml





druidparser
       

	






		


123456
sky



123456
sky
true






123456
sky



123456
sky
true

6. 修改schema.xml文件

vi schema.xml

注意:当多个从节点时,需配置多个读写内容信息







select user() -------配置写入操作主节点 -----配置只读操作节点

说明:

Balance:
1、balance=0  不开启读写分离机制,所有读操作都发送到当前可用的writehost了 .
2、balance=1  全部的readhost与stand by writeHost 参与select语句的负载均衡。简单的说,双主双从模式(M1àS1,M2àS2,并且M1和M2互为主备),正常情况下,M1,S1,S2都参与select语句的复杂均衡。
3、balance=2  所有读操作都随机的在readhost和writehost上分发
writeType :
负载均衡类型,目前的取值有3种:
1、writeType=”0″, 所有写操作发送到配置的第一个writeHost。
2、writeType=”1″,所有写操作都随机的发送到配置的writeHost。
3、writeType=”2″,不执行写操作。
switchType :
1、switchType=-1 表示不自动切换
2、switchType=1 默认值,自动切换
3、switchType=2 基于MySQL 主从同步的状态决定是否切换

7. 启动mycat

mycat start
cd /application/mycat/logs/;cat wrapper.log

看到如下内容证明启动成功
在这里插入图片描述

八、验证

我们采用第三方工具的方式进行连接验证

1. 使用navicat连接mycat

测试只读用户
mycat+mysql主从搭建手册_第5张图片

测试写入用户
mycat+mysql主从搭建手册_第6张图片

你可能感兴趣的:(mysql)