Linux数据库管理——day10——分库分表、数据库硬件优化

来源:Lu-Yu 发布时间:2018-11-03 16:43:20 阅读量:1004

分库分表

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


    垂直分割

       纵向切分,把一个表的表结构拆分开来,形成多个表

       实质上就是把一个表的表结构中的多个字段拆成多个组合,每个组合都自成一个表


    水平分割

       横向切分,把一个表的表记录切分成多个表

       实质上吧一个表中的数据拆成多个模块,而表结构没有变化。


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


--------------------- 

作者:Lu-Yu 

来源:CSDN 

原文:https://blog.csdn.net/Yu1543376365/article/details/83450821 

版权声明:本文为博主原创文章,转载请附上博文链接!


标签: 数据库
分享:
评论:
你还没有登录,请先