分库分表
    分库分表也称作分片技术,主要作用是将存放在一个数据库中的数据按照特定的方法进行拆分,分散存放在多个数据库中,以达到分散多台设备实现负载均衡

垂直分割
       纵向切分,把一个表的表结构拆分开来,形成多个表
       实质上就是把一个表的表结构中的多个字段拆成多个组合,每个组合都自成一个表

水平分割
       横向切分,把一个表的表记录切分成多个表
       实质上吧一个表中的数据拆成多个模块,而表结构没有变化。


Mycat
   mycat是基于java的分布式数据库系统,为高并发环境的分布式访问提供解决方案

工作流程
      Mycat有很多算法,每个算法都有专属的标识字段,根据这些字段,mycat可以找到数据具体存储的位置。

搭建mycat服务器
      1. 装包
        1.1 安装jdk,也就是java相关的软件包
        1.2 安装 mycat-server 服务软件包
      2. 配置

修改配置文件server.xml

        <user name="用户名"><property name="password">密码</property><property name="schemas">逻辑库名(用户看到的库名)</property><property name="readOnly">true(只读权限设定,不写这一行默认为读写权限)</property></user>

配置文件schema.xml

        <table name="travelrecord" dataNode="dn1,dn2(结点名,根据自己的数据库个数决定)" rule="auto-sharding-long" /><!-- global table is auto cloned to all defined data nodes ,so can join with any table whose sharding node is in the same data node --><table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2(这两行也是根据数据库个数决定)" /><table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" /><!-- 指定数据存储节点的数据库名,以及这个数据库中存储数据的库名 --><dataNode name="dn1(结点名)" dataHost="localhost1(数据库名)" database="db1" /><!-- 给每个数据库指定相应的信息 --><dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="hostM1" url="数据库服务器IP:端口号(3306)" user="连接使用的用户名"password="密码"><!-- can have multi read hosts --></writeHost></dataHost>

3. 对数据库服务器进行相关操作

sed -i '/lower_case_table_names/d' /etc/my.cnf
sed -i '/\[mysqld\]/alower_case_table_names = 1' /etc/my.cnf
systemctl restart mysqld

4. 启动服务

mycat start
netstat -ntlup | grep :8066 

注意:
     1. 客户端连接的时候,发现有很多空表,这些都是要自己修改创建的
     2. 不过创建的时候,需要根据数据库的具体算法进行,创建算法要求的字段(列)


系统优化
   设置最大并发数

# 查看设定的最大并发数:
show variables like 'max_connections';
# 修改最大并发数
set max_connections=值;
# 查看历史访问最大并发数:
show global status like 'max_used_connections';

设置的最优值:
        max_connections = max_used_connections / 0.85
         设定的最大并发值 = 历史最大并发数 / 0.85
      查看连接的详细信息:

show processlist;
连接超时(单位秒)
connect_timeout 等待连接超时,当用户在TCP三次握手连接的时候相应时间太久就会自动登出,一般时间不宜太高,默认10s
wait_timeout 等待关闭连接不活动超时,当从最后一次SQL语句操作开始计时,到下一个SQL语句间隔时间,过长久断开,不过为了让SQL语句能完整的执行完,不宜太短,默认8小时
 
缓存控制(单位字节)
key_buffer_size 用于MyISAM引擎的关键索引缓存大小
show global status like 'key_read%'; 如果查出来的值较低的时候提高这个缓存值
sort_buffer_size 为每个排序的线程分配此大小的缓存空间
提高此值可以提高order的group的执行速度
read_buffer_size 为排序读取表记录保留的缓存大小
影响SQL查询的相应速度,此值越大查询越快
tread_buffer_size 允许保存在缓存中的被重用的线程数量
show gloabal status like 'threads_%'; 查看线程状态,以这个值的常值为线程数最优
table_open_cache 为所有线程缓存的打开的表的数量
show global status like 'open%tables'; 查看已经打开的表,是理想比例<=95%
优化查询缓存设置
show variables like 'query_cache%';
query_cache_limit  缓存最大存储限制
query_cache_min_res_unit 缓存最小存储单元
query_cache_wlock_invalidate 是否开启写锁,如果开启,当数据修改,就会自动把缓存中的数据删除,下次用户查看的时候就是到磁盘中找
优化后作用表现(命中情况越高说明优化的越好)
show global status like 'qcache%';
Qcache_hits  查询缓存中的命中情况
Qcache_inserts 查询请求总数

优化思路
   1. 查看硬件使用情况(cpu 内存 存储空间)
   2. 查看网络接口流量
   3. 查看数据库服务运行时,参数配置

 show variables;show global status;

并发连接数量  超时时间   重复使用的线程数量
  多个线程同时打开表的数量
  查询缓存配置   索引缓存
  处理不同查询方式mysql存储使用缓存设置

错误日志
   默认已经开启,记录数据库所有错误信息

查询日志
   记录mysql数据库中所有执行的命令
   启动查询日志,修改配置文件/etc/my.cnf

sed -i '/\[mysqld\]/ageneral_log' /etc/my.cnf

不修改存储位置,默认存在 /var/lib/myql/主机名.log 文件内
   如果需要修改查询日志的位置

sed -i '/\[mysqld\]/ageneral_log_file=存储位置' /etc/my.cnf

慢查询日志
    记录耗时较长或不使用索引的查询操作
    启动慢查询日志,修改配置文件/etc/my.cnf

sed -i '/\[mysqld\]/alog-queries-not-using-indexes' /etc/my.cnf
sed -i '/\[mysqld\]/aslow-query-log' /etc/my.cnf

默认存储在 /var/lib/myql/主机名-slow.log 
    如果想修改存储位置

sed -i '/\[mysqld\]/aslow-query-log-file=存储位置' /etc/my.cnf

默认统计的是查询时间超过 10s的查询记录,如果想修改,命令如下

sed -i '/\[mysqld\]/along-query-time=数字' /etc/my.cnf

统计查看慢查询日志记录的sql命令

mysqldumpslow /var/lib/mysql/mysql51-slow.log

Linux数据库管理——day10——分库分表、数据库硬件优化相关推荐

  1. 网易分库分表数据库DDB

    作者:马进,DDB项目负责人,2013年加入网易,热衷于分布式中间件相关方面工作,从事过分库分表数据库DDB.缓存NKV.分布式事务中间件TCC.分布式视频处理系统NTS等项目. 本文为<程序员 ...

  2. 分库分表数据库中间件对比

    http://www.cnblogs.com/taoxinrui/p/6782791.html http://www.tuicool.com/articles/A77R3m http://blog.c ...

  3. 分布式专题-数据库分库分表之Mycat01-数据库性能优化方案

    目录导航 前言 为什么要分库分表 数据库性能瓶颈主要原因 数据性能优化方案 SQL 与索引 表与存储引擎 架构 配置 操作系统与硬件 架构演进与分库分表 单应用单数据库 多应用单数据库 多应用独立数据 ...

  4. 并发编程-26 高并发处理手段之服务降级与服务熔断 + 数据库切库分库分表

    文章目录 服务降级与服务熔断概述 服务降级举例 服务熔断 VS 服务降级 服务降级要考虑的问题 Hystrix 数据库切库分库分表 高可用的一些手段 服务降级与服务熔断概述 服务熔断: 一般是指软件系 ...

  5. 【预告】千亿数据的潘多拉魔盒:从分库分表到分布式数据库

    近年来,随着国内互联网行业的加速发展,以及摩尔定律的实效,千亿数据的潘多拉魔盒早已打开,传统的开源/商业关系数据库早已遇到了容量的瓶颈.而容量告警则不仅意味着业务发展收到影响,同时对现有系统的稳定性和 ...

  6. 【数据库】分库分表分区

    目录 通用的概念 拆分方式 水平拆分(Sharding) 垂直拆分 一.分区 1. 分区的特点 2. 分区路由规则 3. 分区优/缺点 参考 二.分库分表 为什么分库分表 1. 分库 2. 分表 3. ...

  7. 阿里巴巴中台战略--数据库分库分表之异构索引表

    阿里巴巴中台战略 阿里共享事业部的产生.演变和发展 企业信息中心发展的症结 共享服务体系 分布式服务框架的选择 共享服务中心建设原则 数据库瓶颈阻碍业务的持续发展 数据库分库分表 数据库分库分表之异构 ...

  8. MySQL 分库分表实践

    文章目录 一.为什么要分库分表 二.库表太大产生的问题 三.垂直拆分 1. 垂直分库 2. 垂直分表 四.水平分表 1. 配置水平分表 2. 测试水平分表 一.为什么要分库分表 数据库架构演变 刚开始 ...

  9. 分库分表——基本概念以及shardingJdbc和Mycat对比

    1.什么是分库分表 就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上. 2.为什么分库分表 数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间 ...

最新文章

  1. 百度地图 ip查询 service
  2. 行人重识别技术不断突破 安防企业力拔头筹
  3. 揭秘天猫双十一背后的那位贤内助
  4. ipad如何连接电脑_指纹打卡机如何连接电脑?怎么导出原始考勤数据记录?
  5. Dell服务器相关操作
  6. python创建excel图表_Python:使用图表创建Excel工作表
  7. 经典面试题 之 子数组之和最大值
  8. GitHub的基础使用入门
  9. .net面试题(会持续更新)
  10. ES6系列:什么是ES6? 新手应该怎么理解
  11. pycharm怎么做html网页_html下拉菜单怎么做
  12. C语言底层原理(一):预处理、编译、汇编、链接
  13. 读《深入浅出统计学》
  14. html弹窗无限循环,html恶搞之无限弹窗
  15. windows——运行命令大全(让你的电脑掌控在自己手中)
  16. 左程云基础班——排序算法
  17. AAM Alignment最后一篇:Robust AAM Alignment with Occlusion
  18. Alpha阶段敏捷冲刺③
  19. 黑马程序员_Java_反射
  20. Symantec Backup Exec备份作业服务器盘符变更

热门文章

  1. 这篇讲MySQL海量数据分库分表的,实在太过瘾了!
  2. Nginx介绍和使用
  3. 3D建模学习?选次世代场景还是次世代角色?
  4. 信号生成和可视化——周期性/非周期性波形
  5. 建立一个网站,只需懂这一招
  6. SQL查询实现,记录排序编号
  7. 技术文档的写作规范总结
  8. 高考状元、奥赛金牌,清华姚班00后新生来了
  9. 【51单片机】矩阵按键实现数码管显示
  10. 密码开锁:浙大版C语言程序设计