• 教小白30分钟实现分库分表


           随着单位业务快速发展,数据库中的数据量猛增,访问性能也变慢了,优化迫在眉睫。分析了下问题出现在哪儿呢?关系型数据库本身比较容易成为系统瓶颈、单机存储容量、连接数、处理能力有限。当单表的数据量达到1000W或100G以后,由于查询纬度较多,及时添加从库、优化索引,做很多操作时性能仍下降严重。

            本文章采用三台虚拟机部署MySQL集群,利用MyCat中间件进行操作

    一、虚拟机准备

    虚拟机安装相对简单,不做赘述,建议先安装一台虚拟机即可,待装好MySQL进行克隆另外两台。

    二、MySQL安装

    参考:Hive安装部署_不图安逸的小码农的博客-CSDN博客

    Mysql版本:mysql-5.7.38-1.el7.x86_64.rpm-bundle

    安装完成后,clone两台node2、node3

    修改node2\node3主机名:

    1. hostnamectl set-hostname node2
    2. hostnamectl set-hostname node3

    修改node2\node3的IP地址

    至此,三台虚拟机及MySQL已经安装成功!

    三、防火墙设置

    3306:MySQL端口号;8066:MyCat数据访问端口;9066:MyCat数据库管理端口

    2182:zookeeper端口号;8022:MyCat-Web访问端口号

    1. #开放指定防火墙3306、8066、9066、2181、8022端口
    2. firewall-cmd --zone=public --add-port=3306/tcp --permanent
    3. firewall-cmd --zone=public --add-port=8066/tcp --permanent
    4. firewall-cmd --zone=public --add-port=9066/tcp --permanent
    5. firewall-cmd --zone=public --add-port=2181/tcp --permanent
    6. firewall-cmd --zone=public --add-port=8082/tcp --permanent
    7. #重启防火墙
    8. firewall-cmd --reload
    9. #查看防火墙开放端口
    10. firewall-cmd --list-ports

     

     四、JDK安装

    本示例所有软件都安装再software文件夹中

    在   /usr/local    下新建software

    上传jdk至node1 software文件夹

    1. 查看自带jdk
    2. yum list installed |grep java
    3. 卸载自带
    4. yum -y remove java
    5. 在software下新建文件夹jdk,将安装包上传至文件夹
    6. 解压
    7. tar -zxvf jdk-8u333-linux-x64.tar.gz
    8. 配置变量
    9. vim /etc/profile

    键盘:大Go插入

    1. #set java environment
    2. JAVA_HOME=/usr/local/software/jdk/jdk1.8.0_333
    3. CLASSPATH=.:$JAVA_HOME/lib.tools.jar
    4. PATH=$JAVA_HOME/bin:$PATH
    5. export JAVA_HOME CLASSPATH PATH
    1. source /etc/profile
    2. java -version

     五、安装配置MyCat

    先检查三台服务器启动情况,运行中即可

    systemctl status mysqld

    新建mycat文件夹,在software/mycat解压 

     特别说明:新建mycat文件夹后,在文件夹内解压,会有两层mycat目录,操作时没注意这个问题,所以不建议用户新建mycat文件夹,直接在software中解压mycat压缩包

    1. tar -zxvf Mycat-server-1.6.7.3-release-20210913163959-linux.tar.gz
    2. #######删除mycat/lib下的mysql-connector-java-5.1.35
    3. rm -rf mysql-connector-java-5.1.35

     建议替换mycat中lib文件夹下的mysql-connector-java-5.1.35  .而使用 mysql-connector-java-8.0.22,原因如下

    官网链接:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-versions.html

    下载地址:https://dev.mysql.com/downloads/connector/j/

     下载mysql-connector-java-8.0.22  并上传

    文件操作权限不够

    chmod 777 mysql-connector-java-8.0.22

    开始配置文件:

     切换到mycat的conf目录,配置schema.xml

    为了方便编辑,可以用notepad++操作,其他方便操作的软件亦可,没有NppFTP的话,可以点击”插件管理“安装一下

     

    点击 Add new

     

     

     连接上之后,选择schema.xml进行编辑

     

    1. mycat:schema SYSTEM "schema.dtd">
    2. <mycat:schema xmlns:mycat="http://io.mycat/">
    3. <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
    4. <table name="TB_ADCP" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
    5. schema>
    6. <dataNode name="dn1" dataHost="dhost1" database="testdb" />
    7. <dataNode name="dn2" dataHost="dhost2" database="testdb" />
    8. <dataNode name="dn3" dataHost="dhost3" database="testdb" />
    9. <dataHost name="dhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
    10. <heartbeat>select user()heartbeat>
    11. <writeHost host="master" url="jdbc:mysql://xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="123456">
    12. dataHost>
    13. <dataHost name="dhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
    14. <heartbeat>select user()heartbeat>
    15. <writeHost host="master" url="dbc:mysql://xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="123456">
    16. dataHost>
    17. <dataHost name="dhost3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
    18. <heartbeat>select user()heartbeat>
    19. <writeHost host="master" url="ldbc:mysql://xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="123456">
    20. dataHost>
    21. mycat:schema>

     选择server.xml进行编辑

    1、server.xml用户编辑

     2、server.xml中方便mycat-web的SQL统计的 useSqlStat要进行修改,修改为1,不然mycat-web安装好后,无法监控SQL语句

    <property name="useSqlStat">1property>  

    1. bin/mycat start
    2. bin/mycat stop

    进入mycat的log文件夹,查看输出日志,是否启动正确

    tail -f logs/wrapper.log

     连接mycat同连接mysql一样

    mysql -h 10.50.50.22 -P 8066 -u root -p

    输入server.xml中配置的密码,连接上mycat

    利用DataGrip数据库软件连接三台集群的MySQL,各新建实体数据库,名称为schema.xml中配置 

    向逻辑表中插入数据,测试

    1. CREATE TABLE tb_adcp(
    2. id BIGINT(20) NOT NULL,
    3. sensor VARCHAR(100) NOT NULL,
    4. PRIMARY KEY(id)
    5. )
    6. ENGINE=INNODB DEFAULT CHARSET=utf8;

    返回DataGrip查看集群实体库中表是否绑定并建好

    在mycat命令行中insert 数据,此时Datagrip连接的MySQL中数据应该也刷新变化

    六、安装zookeeper

    下载地址:官网Apache ZooKeeper

    Index of /dist/zookeeper/zookeeper-3.4.6  安装包地址

    上传zookeeper安装包至文件夹software

    1. 解压当前目录
    2. tar -zxvf zookeeper-3.4.6.tar.gz #之后可以删除安装包
    1. 解压完成后,切换到zookeeper安装目录
    2. cd zookeeper-3.4.6/
    3. mkdir data #存放zookeeper数据的目录
    4. cd data #进入文件夹
    5. pwd #获取当前文件夹路径,复制路径

     退出当前目录,进入到conf目录,开始配置文件

     

    1. 对示例文件重命名
    2. mv zoo_sample.cfg zoo.cfg

    1. Vim zoo.cfg
    2. 修改dataDir= /usr/local/software/zookeeper-3.4.6/data

    1. 退出到zookeeper文件夹,启动zookeeper
    2. bin/zkServer.sh start

    bin/zkServer.sh status   #查看启动状态,单机版运行,standalone

     七、安装mycat-web

    网站:MyCat2 Index of /

    http://dl.mycat.org.cn/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz

    1. 这时候mycat-web与zookeeper其实是关联的,可以进到以下目录
    2. /usr/local/software/mycat-web/mycat-web/WEB-INF/classes
    3. 查看
    4. cat mycat.properties
    5. 已经定义了zookeeper端口号,如果mycat-web与zookeeper不在一台服务器,需要配地址

    1. 到mycat-web文件下,启动
    2. sh start.sh

    安装成功!

    主机IP:8082/mycat/      查看mycat监控信息

     添加信息

     已经实现分库分表部署

    如果新建表需要去schema.xml中配置

    程序连接mycat时,只需将3306端口号改为8066即可

  • 相关阅读:
    vue3嵌套路由keep-alive问题
    Neo4j安装与配置
    Linux多线程网络通信
    (附源码)springboot校园闲置物品交易系统 毕业设计 521472
    JS-项目实战-新增水果库存功能实现
    深入探讨负载均衡的原理及算法
    Go语言fyne开发桌面应用程序-环境安装
    大数据平台之数据治理
    【Pytest实战】Pytest+Allure+Jenkins自动化测试框架搭建
    不懂就问,快速成为容器服务进阶玩家!
  • 原文地址:https://blog.csdn.net/u010763324/article/details/126284269