Top

NSD DBA2 DAY06

  1. 案例1:搭建mycat 分片服务器

1 案例1:搭建mycat 分片服务器

1.1 问题

  • 数据库主机 192.168.4.55 使用db1库存储数据
  • 数据库主机 192.168.4.56 使用db2库存储数据
  • 主机 192.168.4.54 运行mycat服务,逻辑库名称为test,连接用户名为admin,密码123456
  • 在主机 192.168.4.254 访问测试配置

1.2 方案

准备四台主机,搭建mycat分片服务器,通过某种特定条件,将存放在一个数据库(主机)中的数据,分散存放到多个数据库(主机)中,已达到分散单台设备负载的效果。其中192.168.4.56作为mycat服务器,192.168.4.54和192.168.4.55作为数据库服务器,192.168.4.254作为客户端。如图-1所示:

图-1

数据分片的拓扑如图-2所示:

图-2

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:公共配置

1)关闭防火墙和selinux,配置yum源(系统源),这里不再操作

2)把54,55还原成独立数据库服务器,且只保留默认4个库其他都删除,停止56主机的mha管理服务,下载mycat 软件到56主机

3)在54(主机c2)和55(主机c1)上面创建db1和db2库

  1. [root@c1 ~]# mysql -u root -p123456
  2. mysql> create database db1;        //c1上面创建db1库
  3. Query OK, 1 row affected (0.00 sec)
  4. [root@c2 ~]# mysql -u root -p123456
  5. mysql> create database db2;        //c2上面创建db2库
  6. Query OK, 1 row affected (0.00 sec)

在54上面授权一个用户

  1. mysql> grant all on *.* to admin@"%" identified by "123456";
  2. Query OK, 0 rows affected, 1 warning (0.00 sec)

在55上面授权一个用户

  1. mysql> grant all on *.* to admin@"%" identified by "123456";
  2. Query OK, 0 rows affected, 1 warning (0.00 sec)

4)修改数据库的配置文件

注意:1代表不区分表名的大小写,0为区分大小写

主机c1上面:

  1. [root@c1 ~]# vim /etc/my.cnf
  2. [mysqld]
  3. lower_case_table_names=1        //表名忽略大小写
  4. [root@c1 ~]# systemctl restart mysqld

主机c2上面:

  1. [root@c2 ~]# vim /etc/my.cnf
  2. [mysqld]
  3. lower_case_table_names=1
  4. [root@c2 ~]# systemctl restart mysqld

5)在56主机上面安装JDK

  1. [root@mycat ~]# rpm -qa | grep -i jdk        //安装自带的即可
  2. java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64
  3. java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
  4. copy-jdk-configs-2.2-3.el7.noarch
  5. [root@mycat ~]# yum -y install java-1.8.0-openjdk

6)在56主机上面安装mycat

  1. [root@mycat ~]# cd mysql/
  2. [root@mycat mysql]# tar -xf Mycat-server-1.4-beta-20150604171601-linux.tar.gz    //免安装,解压即可使用
  3. [root@mycat mysql]# mv mycat/ /usr/local/
  4. [root@mycat mysql]# ls /usr/local/mycat/
  5. bin catlet conf lib logs version.txt
  6. [root@mycat mysql]# cd /usr/local/mycat/
  7. [root@mycat mycat]# ./bin/mycat --help
  8. Usage: ./bin/mycat { console | start | stop | restart | status | dump }

7)修改配置文件

目录结构说明:

bin mycat命令,如 启动 停止 等

catlet 扩展功能

conf 配置文件

lib mycat使用的jar

log mycat启动日志和运行日志

wrapper.log mycat服务启动日志

mycat.log 记录SQL脚本执行后的报错内容

重要配置文件说明:

server.xml 设置连mycat的账号信息

schema.xml 配置mycat的真实库表

rule.xml 定义mycat分片规则

配置标签说明

<user>.. ..</user> 定义连mycat用户信息

<datanode>.. ..</datanode> 指定数据节点

<datahost>.. ..</datahost> 指定数据库地址及用户信息

查看server.xml配置文件

  1. [root@mycat mycat]# cd conf/
  2. [root@mycat conf]# vim server.xml
  3. </system>
  4. <user name="test">        //连接mycat服务时使用的用户名 test
  5. <property name="password">test</property>
  6. //使用test用户连接mycat用户时使用的密码
  7. <property name="schemas">TESTDB</property>
  8. //连接上mycat服务后,可以看到的库名多个时,使用逗号分隔 (是逻辑上的库名,服务器上没有这个库名,随便取,但要记住)
  9. </user>
  10. <user name="user">
  11. <property name="password">user</property>
  12. <property name="schemas">TESTDB</property>
  13. <property name="readOnly">true</property>
  14. //定义只读权限,使用定义的user用户连接mycat服务后只有读记录的权限,不写这一行则是可读可写
  15. </user>

修改schema.xml配置文件

  1. [root@mycat conf]# vim schema.xml
  2. <table name="travelrecord" dataNode="dn1,dn2" rule="auto-sharding-long" />
  3. //travelrecord(逻辑上的,名字不能随便写,一般不动)表分片到数据节点dn1和dn2,dn1和dn2随便取的名字
  4. <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2" />
  5. <table name="hotnews" primaryKey="ID" dataNode="dn1,dn2" rule="mod-long" />
  6. <dataNode name="dn1" dataHost="c1" database="db1" />
  7. //数据节点对应的服务器 name="dn1"名称要与上面的对应 dataHost="c1"写本机主机名,database="db1"存在的数据库名,定义分片使用的库,所在的物理主机,真正存储数据的db1库在物理主机mysql55上
  8. <dataNode name="dn2" dataHost="c2" database="db2" />
  9. //定义分片使用的库,所在的物理主机,真正存储数据的db1库在物理主机mysql55上
  10. 指定c1名称主机对应的ip地址
  11. <dataHost name="c1" maxCon="1000" minCon="10" balance="0"
  12. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  13. <heartbeat>select user()</heartbeat>
  14. <!-- can have multi write hosts -->
  15. <writeHost host="c1" url="192.168.4.55:3306" user="admin"
  16. password="123456">
  17. //访问数据库时,mycat服务连接数据库服务器时使用的用户名和密码
  18. <!-- can have multi read hosts -->
  19. </writeHost>
  20. </dataHost>
  21. 指定c2名称主机对应的ip地址
  22. <dataHost name="c2" maxCon="1000" minCon="10" balance="0"
  23. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  24. <heartbeat>select user()</heartbeat>
  25. <!-- can have multi write hosts -->
  26. <writeHost host="c2" url="192.168.4.54:3306" user="admin"
  27. password="123456">
  28. //访问数据库时,mycat服务连接数据库服务器时使用的用户名和密码
  29. <!-- can have multi read hosts -->
  30. </writeHost>
  31. </dataHost>

8)添加PATH路径

  1. [root@mycat conf]# export PATH=/usr/local/mycat/bin:$PATH
  2. [root@mycat conf]# echo "PATH=/usr/local/mycat/bin:$PATH" >> /etc/profile
  3. [root@mycat conf]# source /etc/profile
  4. [root@mycat conf]# echo $PATH
  5. /usr/local/mycat/bin:/usr/local/mycat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
  6. [root@mycat conf]# which mycat
  7. /usr/local/mycat/bin/mycat

9)启动服务并查看端口

  1. [root@mycat conf]# mycat start
  2. Starting Mycat-server...
  3. [root@mycat conf]# netstat -antup | grep :8066
  4. tcp6 0 0 :::8066 :::* LISTEN 6421/java
  5. [root@mycat conf]# ps -C java
  6. PID TTY TIME CMD
  7. 6421 ? 00:00:04 java

用admin用户登录

  1. [root@client ~]# mysql -h192.168.4.54 -uadmin -p123456
  2. mysql> show processlist;
  3. +----+-------+--------------------+------+---------+------+----------+------------------+
  4. | Id | User | Host | db | Command | Time | State | Info |
  5. +----+-------+--------------------+------+---------+------+----------+------------------+
  6. | 3 | admin | 192.168.4.56:34580 | db2 | Sleep | 80 | | NULL |
  7. | 4 | admin | 192.168.4.56:34570 | db2 | Sleep | 100 | | NULL |
  8. | 5 | admin | 192.168.4.56:34572 | db2 | Sleep | 40 | | NULL |
  9. | 6 | admin | 192.168.4.56:34562 | db2 | Sleep | 30 | | NULL |
  10. | 7 | admin | 192.168.4.56:34564 | db2 | Sleep | 90 | | NULL |
  11. | 8 | admin | 192.168.4.56:34566 | db2 | Sleep | 60 | | NULL |
  12. | 9 | admin | 192.168.4.56:34574 | db2 | Sleep | 70 | | NULL |
  13. | 10 | admin | 192.168.4.56:34576 | db2 | Sleep | 10 | | NULL |
  14. | 11 | admin | 192.168.4.56:34578 | db2 | Sleep | 20 | | NULL |
  15. | 12 | admin | 192.168.4.56:34568 | db2 | Sleep | 50 | | NULL |
  16. | 14 | admin | 192.168.4.51:58354 | NULL | Query | 0 | starting | show processlist |
  17. +----+-------+--------------------+------+---------+------+----------+------------------+
  18. 11 rows in set (0.00 sec)
  19. [root@client ~]# mysql -h192.168.4.55 -uadmin -p123456
  20. mysql> show processlist;
  21. +----+-------+--------------------+------+---------+------+----------+------------------+
  22. | Id | User | Host | db | Command | Time | State | Info |
  23. +----+-------+--------------------+------+---------+------+----------+------------------+
  24. | 3 | root | localhost | NULL | Sleep | 2352 | | NULL |
  25. | 4 | admin | 192.168.4.56:45148 | db1 | Sleep | 2 | | NULL |
  26. | 5 | admin | 192.168.4.56:45150 | db1 | Sleep | 62 | | NULL |
  27. | 6 | admin | 192.168.4.56:45160 | db1 | Sleep | 12 | | NULL |
  28. | 7 | admin | 192.168.4.56:45162 | db1 | Sleep | 92 | | NULL |
  29. | 8 | admin | 192.168.4.56:45152 | db1 | Sleep | 32 | | NULL |
  30. | 9 | admin | 192.168.4.56:45154 | db1 | Sleep | 42 | | NULL |
  31. | 10 | admin | 192.168.4.56:45156 | db1 | Sleep | 22 | | NULL |
  32. | 11 | admin | 192.168.4.56:45158 | db1 | Sleep | 82 | | NULL |
  33. | 12 | admin | 192.168.4.56:45164 | db1 | Sleep | 52 | | NULL |
  34. | 13 | admin | 192.168.4.56:45166 | db1 | Sleep | 72 | | NULL |
  35. | 14 | admin | 192.168.4.51:32796 | NULL | Query | 0 | starting | show processlist |
  36. +----+-------+--------------------+------+---------+------+----------+------------------+
  37. 12 rows in set (0.00 sec)
  38. [root@mycat conf]# ls /usr/local/mycat/logs/
  39. mycat.log mycat.pid wrapper.log        //wrapper.log为错误日志
  40. [root@mycat conf]# ldconfig -v        //更新加载的模块

10)客户端访问

命令: mysql -hmycat主机的IP -P端口号 -u用户 -p密码

  1. [root@clent ~]# mysql -h192.168.4.56 -P8066 -utest -ptest
  2. mysql> show databases;
  3. +----------+
  4. | DATABASE |
  5. +----------+
  6. | TESTDB |
  7. +----------+
  8. 1 row in set (0.00 sec)
  9. mysql> USE TESTDB;
  10. Reading table information for completion of table and column names
  11. You can turn off this feature to get a quicker startup with -A
  12. Database changed
  13. mysql>
  14. mysql> show tables;
  15. +------------------+
  16. | Tables in TESTDB |
  17. +------------------+
  18. | company |
  19. | customer |
  20. | customer_addr |
  21. | employee |
  22. | goods |
  23. | hotnews |
  24. | orders |
  25. | order_items |
  26. | travelrecord |
  27. +------------------+
  28. 9 rows in set (0.00 sec)

11)客户端测试:

  1. mysql> create table employee(id int not null primary key,name varchar(100),sharding_id int not null);
  2. Query OK, 0 rows affected (0.10 sec)
  3. mysql> insert into employee(id,name,sharding_id) values(1,"bob",10000);
  4. Query OK, 1 row affected (0.03 sec)
  5. mysql> insert into employee(id,name,sharding_id) values(1,"lucy",10010);
  6. Query OK, 1 row affected (0.02 sec)
  7. mysql> select * from employee;
  8. +----+------+-------------+
  9. | id | name | sharding_id |
  10. +----+------+-------------+
  11. | 1 | bob | 10000 |
  12. | 1 | lucy | 10010 |
  13. +----+------+-------------+
  14. 2 rows in set (0.06 sec)

12)在c1上面查看结果

  1. mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | db1 |
  7. | mysql |
  8. | performance_schema |
  9. | sys |
  10. +--------------------+
  11. 5 rows in set (0.00 sec)
  12. mysql> use db1;
  13. Reading table information for completion of table and column names
  14. You can turn off this feature to get a quicker startup with -A
  15. Database changed
  16. mysql> show tables;
  17. +---------------+
  18. | Tables_in_db1 |
  19. +---------------+
  20. | employee |
  21. +---------------+
  22. 1 row in set (0.00 sec)
  23. mysql> select * from employee;        //查看结果
  24. +----+------+-------------+
  25. | id | name | sharding_id |
  26. +----+------+-------------+
  27. | 1 | bob | 10000 |
  28. +----+------+-------------+
  29. 1 row in set (0.00 sec)

13)在c2上面查看结果

  1. mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | db2 |
  7. | mysql |
  8. | performance_schema |
  9. | sys |
  10. +--------------------+
  11. 5 rows in set (0.00 sec)
  12. mysql> use db2;
  13. Reading table information for completion of table and column names
  14. You can turn off this feature to get a quicker startup with -A
  15. Database changed
  16. mysql> show tables;
  17. +---------------+
  18. | Tables_in_db2 |
  19. +---------------+
  20. | employee |
  21. +---------------+
  22. 1 row in set (0.00 sec)
  23. mysql> select * from employee;
  24. +----+------+-------------+
  25. | id | name | sharding_id |
  26. +----+------+-------------+
  27. | 1 | lucy | 10010 |
  28. +----+------+-------------+
  29. 1 row in set (0.00 sec)

转载于:https://www.cnblogs.com/tiki/p/10785278.html

MySQL分库分表 mycat相关推荐

  1. Mysql 分库分表 Mycat

    0 课程视频 https://www.bilibili.com/video/BV1Kr4y1i7ru?p=163&spm_id_from=pageDriver&vd_source=ff ...

  2. mysql 分库分表mycat部署

    垂直分割 • 纵向切分 – 把单一的表,拆分成多个表,并分散到不同的数据库 ( 主机 ) 上. – 一个数据库由多个表构成,每个表对应不同的业务, 可以按照业务对表进行分类,将其分布到不同的数据 库 ...

  3. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变...

    [Mysql主从复制] 解决的问题 数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了. 负载均 ...

  4. MySQL运维(二)MySQL分库分表概念及实战、读取分离详解

    MySQL运维(二)MySQL分库分表详解.读取分离详解 1.MySQL分库分表相关概念 1.1 分库分表概念 1.1.1 分库的原因 分库:就是一个数据库分成多个数据库,部署到不同机器. 如果业务量 ...

  5. 20、MySQL分库分表,原理实战

    MySQL分库分表,原理实战 1.MyCAT分布式架构入门及双主架构 1.1 原理 1.2 主从架构 1.3 MyCAT安装 1.4 启动和连接 1.5 配置文件介绍 2.MyCAT读写分离架构 2. ...

  6. MySQL分库分表原理

    分库分表原理 前言 垂直拆分 水平拆分 分库分表后引入的问题 分库分表中间件 前言 在互联网还未崛起的时代,我们的传统应用都有这样一个特点:访问量.数据量都比较小,单库单表都完全可以支撑整个业务.随着 ...

  7. 【分布式mysql分库分表中间件sharding】

    分布式mysql分库分表中间件,sharding领域的一站式解决方案.具备丰富.灵活的路由算法支持,能够方便DBA实现库的水平扩容和降低数据迁移成本.shark采用应用集成架构,放弃通用性,只为换取更 ...

  8. 最全的MySQL分库分表方案总结

    " 面试中我们经常会碰到的关于分库分表的问题!今天就给大家介绍互联网公司常用 MySQL 分库分表方案!希望对大家的面试有所帮助! 数据库瓶颈 不管是 IO 瓶颈,还是 CPU 瓶颈,最终都 ...

  9. MySQL分库分表和优化

    第九阶段模块三 分库分表技术之MyCat 1.海量存储问题 1.1 背景描述 随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无 ...

最新文章

  1. 京东和小米正在使用AI取代人工客服 | 海斌访谈
  2. 计算机原理基础知识pdf,计算机原理第一章.pdf
  3. wangEditor Java富文本的图片上传
  4. 在DataTable中进行数据查询 (转)
  5. 基于XML配置方式实现对action的所有方法进行校验
  6. 1-算法-hanoi汉诺塔问题- 递归
  7. verilog将像素数据写入txt_FPGA仿真必备(1)——Matlab生成.mif文件/.txt文件
  8. BCG、MFC如何支持《支持应用程序设置的回复、保存等》的?他是怎么实现的呢?
  9. HTML鼠标悬停显示隐藏div,javascript – 在鼠标悬停时显示/隐藏DIV
  10. android如何使用BroadcastReceiver后台实现来电通话记录的监听并存取到sqllite数据库通过Contentprovilder实现接口...
  11. 【LeetCode】贪心算法--分发糖果(135)
  12. React.createClass和extends Component的区别
  13. php基础--变量及作用域
  14. 基于QT实现的图书室管理系统
  15. 网站优化工具-YUI Compressor
  16. AIR是什么?.air文件如何打开?flex如何运行air文件
  17. 51单片机+ESP8266-01WIFI模块实现数据传输
  18. Binder机制详解
  19. 通过关键词采集百度网址脚本
  20. hdu 6863 Isomorphic Strings

热门文章

  1. code ro rw zi 编译的一个ARM的程序,编译结果中的一句话
  2. 分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣作者:1-2-3 来源:博客园 发布时间:2009-03-09 16:20 阅读:2820 次 原文链接 [收藏]
  3. ARM Cortex-M3初探
  4. 在代码段中安排自己定义的数据
  5. angular-js资料收集
  6. 二叉查找树的C语言实现(一)
  7. Spring Session 的两种刷新模式-RedisFlushMode
  8. httpbin.org的使用
  9. 计算机应用主要学PS,全国计算机一级Photoshop应用试题及答案
  10. BLE 安全之虫洞攻击