图片 3

关于Oracle listener日志解析利器的使用方法_oracle_脚本之家

前言

运转遇到:

  • 主机1:Ubuntu14.04 Desktop + MySQL5.5 + JDK 1.7(HP Z400)
     内网IP地址:192.168.137.8
  • NODE1:Ubuntu 13.04 server + MySQL5.5  内网IP地址:192.168.137.31
  • NODE2:Ubuntu 13.04 server + MySQL5.5  内网IP地址:192.168.137.32

注:(NODE1和NODE2运转于XEN虚构化平台,硬件条件HP Z800卡塔尔国

存储]
Cobar使用文书档案(可用作MySQL大型集群解决方案)

我们在拍卖数据库的难题的时候,一时在数量库端看不到非凡的等待,可是使用却报三番五次十分。

Cobar简介:

版权注解:本文为博主原创小说,未经博主允许不得转发。

这种情形,有相当的大希望是在压力还未有曾传递到数据库,在网络这层已经发出难点了。如一连龙卷风,这时的数据库listener的经过已经忙可是来,将连接遗弃。(在主机规模能够看见tcpListeneDrop扩展)。

Cobar是关系型数据库的分布式管理系统,它能够在布满式的境况下看上去像守旧数据库相像为您提供海量数据服务。

  •        付加物在阿里Baba(Alibaba卡塔尔B2B公司现已平稳运维了3年以上。
  •      
     近些日子早已接管了3000+个MySQL数据库的schema,为运用提供数据服务。
  •        据近年来计算cobar集群方今平均每一日管理近50亿次的SQL实践乞请。

近年好不轻易抽空钻探了下Cobar,以为那几个产品的确十分不利(在文书档案方面比Amoeba强多了),特此推荐给我们。Cobar是Alibaba研究开发的关系型数据的布满式管理连串,该付加物成功代替了原来基于Oracle的多少存储方案,近来意气风发度接管了3000+个MySQL数据库的schema,平均每一日管理近50亿次的SQL试行诉求。

我们只要去看平常的listener日志,见到的事物是如此的:

Cobar最根本解决的主题材料是:遍及式和HA。

分布式:首即便经过将同贰个表的数据拆分成几个,放入分化的数据库实例,查询的时候也会依据相像的操作办法,来更新具体数据库实例中的对应的数码。

HA:高可用性,在装置了MYSQL心跳的意况下,假若主数据库产生了十三分,Cobar会自动连接从数据库,若是主数据库苏醒符合规律,只可以手动苏醒到主数据库。Cobar只担任切换数据库实例,不肩负主从数据库的一路,所以要求超前将基本数据库设置双向同步。

先是,使用Cobar的主干职能如下:

……24-FEB-2017 09:11:03 * (CONNECT_DATA=(CID=(PROGRAM=sqlplus@mynwdb) * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:06 * (CONNECT_DATA=(CID= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:10 * (CONNECT_DATA=(CID= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:10 * (CONNECT_DATA=(CID= * (ADDRESS= * establish * mynwdb * 0Fri Feb 24 09:11:14 201724-FEB-2017 09:11:14 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:14 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:15 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:15 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:15 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:15 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:15 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:15 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:16 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:16 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:16 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:16 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:16 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:17 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 024-FEB-2017 09:11:17 * (CONNECT_DATA= * (ADDRESS= * establish * mynwdb * 0……

存在的难以为继:

  •   (1卡塔尔.不扶持跨库情况下的join、分页、排序、子查询操作。
  •   (2卡塔尔(قطر‎.SET语句实行会被忽视,事务和字符集设置除了那个之外。
  •   (3卡塔尔(قطر‎.分库情状下,insert语句必得富含拆分字段列名。
  •   (4卡塔尔国.分库意况下,update语句无法立异拆分字段的值。
  •   (5).不支持SAVEPOINT操作。
  •   (6卡塔尔(قطر‎.临时只辅助MySQL数据节点。
  •  
    (7卡塔尔国.使用JDBC时,不帮助rewriteBatchedStatements=true参数设置(默感到false卡塔尔(قطر‎。
  •  
    (8卡塔尔(قطر‎.使用JDBC时,不扶助useServerPrepStmts=true参数设置(默感到false卡塔尔(قطر‎。
  •   (9卡塔尔(قطر‎.使用JDBC时,BLOB, BINA奔驰M级Y,
    VARBINAPAJEROY字段不能够应用setBlob(卡塔尔(英语:State of Qatar)或setBinaryStream(卡塔尔方法设置参数。

自然,如若想奋力贯彻这个效应,能够fork官方的源码:

分布式:

这么我们会看的可比晕,不精晓个中的连接数变化。

情状搭建

  • Cobar服务器:192.168.137.8:8066 用户名/密码:root/sa 实例名:dbtest
  • 主机1:192.168.137.8:3306 用户名/密码:cobar/sa 实例名:dbtest1
  • Node1:192.168.137.31:3306 用户名/密码:cobar/sa 实例名:dbtest2
  • Node2:192.168.137.32:3306 用户名/密码:cobar/sa 实例名:dbtest3

Cobar-Server-1.2.7版本下载:

试验拓扑图如下:

 

图片 1

 

Cobar的分布式重视是由此将表归入区别的库来达成:

有一个listener日志的深入解析利器,能够解析到那体系型的题材。下载见文末。

第一分别在多少个主机创立数据库实例:

#创建dbtest1脚本
   dropdatabaseif exists dbtest1;
   createdatabasedbtest1;
   use dbtest1;
   #在dbtest1上创建tb1
   createtabletb1(
   id   intnotnull,
   gmt   datetime);
#创建dbtest2
   dropdatabaseif exists dbtest2;
   createdatabasedbtest2;
   use dbtest2;
   #在dbtest2上创建tb2
   createtabletb2(
   id   intnotnull,
   val  varchar(256));
#创建dbtest3
   dropdatabaseif exists dbtest3;
   createdatabasedbtest3;
   use dbtest3;
   #在dbtest3上创建tb2
   createtabletb2(
   id   intnotnull,
   val  varchar(256));
  1. Cobar帮衬将一张表水平拆分成多份分别放入分裂的库来完结表的水平拆分

  2. Cobar也支撑将分歧的表放入分裂的库

  3. 大多数景观下,顾客会将上述二种艺术混合使用

用法:lsnr_analyzer.pl -t ‘time rexge' [-h] filename

Cobar配置:

schema.xml配置如下

<!DOCTYPE cobar:schema SYSTEM "schema.dtd">
<cobar:schema xmlns:cobar="http://cobar.alibaba.com/">
  <!-- schema定义 -->
  <schema name="dbtest" dataNode="dnTest1">
    <table name="tb2" dataNode="dnTest2,dnTest3" rule="rule1" />
  </schema>
  <!-- 数据节点定义,数据节点由数据源和其他一些参数组织而成。-->
  <dataNode name="dnTest1">
    <property name="dataSource">
      <dataSourceRef>dsTest[0]</dataSourceRef>
    </property>
  </dataNode>
  <dataNode name="dnTest2">
    <property name="dataSource">
      <dataSourceRef>dsTest[1]</dataSourceRef>
    </property>
  </dataNode>
  <dataNode name="dnTest3">
    <property name="dataSource">
      <dataSourceRef>dsTest[2]</dataSourceRef>
    </property>
  </dataNode>
  <!-- 数据源定义,数据源是一个具体的后端数据连接的表示。-->
  <dataSource name="dsTest" type="mysql">
    <property name="location">
      <location>192.168.137.8:3306/dbtest1</location>
      <location>192.168.137.31:3306/dbtest2</location>
      <location>192.168.137.32:3306/dbtest3</location>
    </property>
    <property name="user">cobar</property>
    <property name="password">sa</property>
    <property name="sqlMode">STRICT_TRANS_TABLES</property>
  </dataSource>
</cobar:schema>

server.xml轻便安顿

<!DOCTYPE cobar:server SYSTEM "server.dtd">
<cobar:server xmlns:cobar="http://cobar.alibaba.com/">
  <!-- 用户访问定义,用户名、密码、schema等信息。 -->
  <user name="root">
    <property name="password">sa</property>
    <property name="schemas">dbtest</property>
  </user>
</cobar:server>

rule.xml配置

<!DOCTYPE cobar:rule SYSTEM "rule.dtd">
<cobar:rule xmlns:cobar="http://cobar.alibaba.com/">
  <!-- 路由规则定义,定义什么表,什么字段,采用什么路由算法 -->
  <tableRule name="rule1">
    <rule>
      <columns>val</columns>
      <algorithm><![CDATA[ func2(${val}) ]]></algorithm>
    </rule>
  </tableRule>
  <!-- 路由函数定义 -->
  <function name="func1" class="com.alibaba.cobar.route.function.PartitionByLong">
    <property name="partitionCount">2</property>
    <property name="partitionLength">512</property>
  </function>
  <!-- 路由函数定义 -->
  <function name="func2" class="com.alibaba.cobar.route.function.PartitionByString">
    <property name="partitionCount">2</property>
    <property name="partitionLength">512</property>
    <property name="hashSlice">-5:</property>
  </function>
</cobar:rule>

此处必要验证,INSERT语句中必得含有路由准则定义的字段,不然Cobar不会对数据举行拆分,同期储存到多个数据库实例中,举例上边的tb2表中,id字段若是设置了auto_increment,插入语句中永不指明id字段,那样就不能够直达数据包拆分的指标。

未雨准备达成以往直接运营bin目录下的./startup.sh就可以。

然后查看输入的日记:

yan@yan-Z400:~/cobar-server-1.2.7/logs$ tail -f stdout.log
09:57:00,155 INFO  Cobar is ready to startup ...
09:57:00,155 INFO  Startup processors ...
09:57:00,198 INFO  Startup connector ...
09:57:00,202 INFO  Initialize dataNodes ...
09:57:00,811 INFO  dnTest1:0 init success
09:57:00,816 INFO  dnTest3:0 init success
09:57:00,821 INFO  dnTest2:0 init success
09:57:00,835 INFO  CobarManager is started and listening on 9066
09:57:00,837 INFO  CobarServer is started and listening on 8066
09:57:00,837 INFO  ===============================================

 

这么cobar服务端就早就起步。

一贯行使jdbc或mysql终端连接cobar:

yan@yan-Z400:~$ mysql -uroot -psa -P8066 -h192.168.137.8
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.48-cobar-1.2.7 Cobar Server (ALIBABA)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

此间须要重申的是,Cobar不扶助将一张表,比如test表拆分成test_1, test_2,
test_3…..位居同一个库中,必须将拆分后的表分别归入分裂的库来达成分布式。

如,我们要解析24-FEB-2017 09:30~09:59的连天意况,能够如下操作:

下边采取几句Pyhton举行数据库的插入操作:

#!/usr/bin/env python
#coding=utf-8
import MySQLdb

#连接
cxn = MySQLdb.Connect(host='192.168.137.8',port=8066, user = 'root', passwd = 'sa')
#游标
cur = cxn.cursor()

cur.execute("USE dbtest")

for i in range(1,200):
    cur.execute("INSERT INTO tb2 (val) values ('this is a test record %d')"%i)
    print 'insert the %d record into cobar'%i 

cur.close()
cxn.commit()
cxn.close()

布署后翻看数据库dbtest2和数目dbtest3的情事:

可以见见有100条数据插入了dbtest2,99条数据插入了dbtest3。

末端会对Cobar举办越来越尖锐的了然。我的Fork分支

(完)

 

 

原创小说,转发请注脚:

HA:

[ora@mynwdb trace]$ lsnr_analyzer.pl -t '24-FEB-2017 09:[3-5][0-9]' mynwdb_cut1.log24-FEB-2017 09:30 => Total:3724-FEB-2017 09:31 => Total:5024-FEB-2017 09:32 => Total:1724-FEB-2017 09:33 => Total:1624-FEB-2017 09:34 => Total:1924-FEB-2017 09:35 => Total:1624-FEB-2017 09:36 => Total:1724-FEB-2017 09:37 => Total:1624-FEB-2017 09:38 => Total:1324-FEB-2017 09:39 => Total:2924-FEB-2017 09:40 => Total:4324-FEB-2017 09:41 => Total:3824-FEB-2017 09:42 => Total:1724-FEB-2017 09:43 => Total:1624-FEB-2017 09:44 => Total:4224-FEB-2017 09:45 => Total:2124-FEB-2017 09:46 => Total:1624-FEB-2017 09:47 => Total:1524-FEB-2017 09:48 => Total:1224-FEB-2017 09:49 => Total:2524-FEB-2017 09:50 => Total:4724-FEB-2017 09:51 => Total:4124-FEB-2017 09:52 => Total:2124-FEB-2017 09:53 => Total:1224-FEB-2017 09:54 => Total:1724-FEB-2017 09:55 => Total:1624-FEB-2017 09:56 => Total:2024-FEB-2017 09:57 => Total:1724-FEB-2017 09:58 => Total:1724-FEB-2017 09:59 => Total:21[ora@mynwdb trace]$

在客户配置了MySQL心跳的情事下,Cobar能够活动向后端连接的MySQL发送心跳,判定MySQL运转境况,风流倜傥旦运营现身万分,Cobar能够自动切换来备机职业。但必要强调的是:

能够看来,在09:31的时候,有个连接数的加码,到了一分钟肆十几个再而三。

1.
Cobar的主备切换有二种触发方式,意气风发种是客户手动触发,生龙活虎种是Cobar的心跳语句检验到这么些后自行触发。那么,小心跳检查测量检验到主机至极,切换来备机,如若主机恢复生机了,需求客户手动切回主机职业,Cobar不会在主机复苏时自动切换回主机,除非备机的心跳也回到极度。

笔者们能够加-h的参数,breakdown具体是什么样主机连接过来的:

2.
Cobar只检查MySQL主备极度,不关心主备之间的数据同步,因而顾客须求在应用Cobar在此以前在MySQL主备上配备双向同步,详细情形可以参见MySQL参照他事他说加以考察手册。

[ora@mynwdb trace]$ lsnr_analyzer.pl -t '24-FEB-2017 09:[3-5][0-9]' -h mynwdb_cut1.log24-FEB-2017 09:30 => Total:3711.22.3.123 3724-FEB-2017 09:31 => Total:5022.3.4.111 111.22.3.123 4924-FEB-2017 09:32 => Total:1710.8.1.218 111.22.3.123 1624-FEB-2017 09:33 => Total:1611.22.3.123 1624-FEB-2017 09:34 => Total:1911.22.3.123 1924-FEB-2017 09:35 => Total:1611.22.3.123 1624-FEB-2017 09:36 => Total:1722.3.4.111 111.22.3.123 1624-FEB-2017 09:37 => Total:1612.5.6.221 111.22.3.123 1524-FEB-2017 09:38 => Total:1311.22.3.123 1324-FEB-2017 09:39 => Total:2911.22.3.123 2924-FEB-2017 09:40 => Total:4311.22.3.123 4324-FEB-2017 09:41 => Total:3822.3.4.111 111.22.3.123 3724-FEB-2017 09:42 => Total:1712.5.6.221 111.22.3.123 1624-FEB-2017 09:43 => Total:1611.22.3.123 1624-FEB-2017 09:44 => Total:4211.22.3.123 4224-FEB-2017 09:45 => Total:2111.22.3.123 2124-FEB-2017 09:46 => Total:1622.3.4.111 111.22.3.123 1524-FEB-2017 09:47 => Total:1512.5.6.221 111.22.3.123 1424-FEB-2017 09:48 => Total:1211.22.3.123 1224-FEB-2017 09:49 => Total:2511.22.3.123 2524-FEB-2017 09:50 => Total:4711.22.3.123 4724-FEB-2017 09:51 => Total:4122.3.4.111 111.22.3.123 4024-FEB-2017 09:52 => Total:2112.5.6.221 111.22.3.123 2024-FEB-2017 09:53 => Total:1211.22.3.123 1224-FEB-2017 09:54 => Total:1711.22.3.123 1724-FEB-2017 09:55 => Total:1611.22.3.123 1624-FEB-2017 09:56 => Total:2022.3.4.111 111.22.3.123 1924-FEB-2017 09:57 => Total:1712.5.6.221 111.22.3.123 1624-FEB-2017 09:58 => Total:1711.22.3.123 1724-FEB-2017 09:59 => Total:2111.22.3.123 21[ora@mynwdb trace]$

协理,我们也亟需小心Cobar的法力限制:

能够见到09:30的时候,是来源于11.22.3.123有肆十四个三回九转,来自22.3.4.111有1个一连。

1卡塔尔 不扶助跨库景况下的join、分页、排序、子查询操作。

注1:lsnr_analyzer.pl
是用来深入分析已经establish的总是,假若是别的总是,不计算在内。

2卡塔尔国 SET语句施行会被忽略,事务和字符集设置除却。

注2:lsnr_analyzer.pl
的总计比较消耗cpu,30万行的listener日志深入分析大概1秒出结果,300万行的listener日志深入分析大致6秒出结果。所以就算listener日志非常的大,建议tail剪切后总括。

3卡塔尔(英语:State of Qatar) 分库情况下,insert语句必得含有拆分字段列名。

对于早就面世tcpListenDrop的情况,大家分三种情状分析:

4卡塔尔(英语:State of Qatar) 分库情形下,update语句无法创新拆分字段的值。

假定是陡然的连年尘暴,需求调节前端的总是,如weblogic中间件逐台运行,实际不是相同的时候开动;

5) 不支持SAVEPOINT操作。

万后生可畏直接连接数相当的高,以致listener不能够管理,就必要拆分listener,如遵照端口拆分。

6卡塔尔(قطر‎ 权且只扶持MySQL数据节点。

点击下载:lsnr_analyzer.pl

7)使用JDBC时,不帮衬rewriteBatchedStatements=true参数设置(默以为false卡塔尔(قطر‎。

总结

8卡塔尔(قطر‎ 使用JDBC时,不协助useServerPrepStmts=true参数设置(默感到false卡塔尔国。

以上正是那篇文章的全体内容了,希望本文的剧情对大家的求学恐怕干活能推动一定的赞助,要是有疑问大家能够留言交换,多谢大家对剧本之家的援助。

9卡塔尔 使用JDBC时,BLOB, BINACR-VY,
VARBINA锐界Y字段不能够利用setBlob(卡塔尔国或setBinaryStream(卡塔尔(قطر‎方法设置参数。

接下来,大家来解析一下Cobar逻辑档次图:

图片 2

*
dataSource:数据源,表示一个切实的数据库连接,与物理存在的数据库schema生机勃勃风流罗曼蒂克对应。

*
dataNode:数据节点,由主、备数据源,数据源的HA以致连接池协同整合,可以将三个dataNode领会为多个分库。

* table:表,包涵拆分表(如tb1,tb2)和非拆分表。

* tableRule:路由准绳,用于决断SQL语句被路由到具体哪些datanode推行。

*
schema:cobar能够定义包含拆分表的schema(如schema1),也能够定义无拆分表的schema(如schema2)。

Cobar支持的数据库构造(schema)的档次关系有所较强的八面见光,客商可以将表自由放置分歧的datanode,也可将差别的datasource放置在同意气风发MySQL实例上。在实际应用中,大家须求通过安插文件(schema.xml)来定义我们须求的数据库服务器和表的布满计谋,这一点大家将在前边的装置和安顿部分中牵线到。

随后,大家来介绍Cobar的装置和配备步骤:

上边大家将采取一个最简便易行的分库分表的例证来申明Cobar的中央用法,数据库schema如下图(该实例也可参照:Cobar付加物首页)。

图片 3

1卡塔尔(قطر‎ 系统对外提供的数据库名是dbtest,而且此中有两张表tb1和tb2。

2卡塔尔 tb1表的数码被映射到大要数据库dbtest1的tb1上。

3)tb2表的后生可畏局地数据被映射到大意数据库dbtest2的tb2上,其余一些数码被映射到概略数据库dbtest3的tb2上。

1、情况思考

操作系统:Linux大概Windows (推荐在Linux遇到下运作Cobar卡塔尔国

MySQL:http://www.mysql.com/downloads/(推荐应用5.1上述版本卡塔尔

JDK:http://www.oracle.com/technetwork/java/javase/downloads/(推荐应用1.6上述版本卡塔尔(英语:State of Qatar)

Cobar:http://code.alibabatech.com/wiki/display/cobar/release/(下载tar.gz或者zip文件)

2、数据筹算

固然本文MySQL所在服务器IP为192.168.0.1,端口为3306,顾客名叫test,密码为空,我们需求创设schema:dbtest1、dbtest2、dbtest3,table:tb1、tb2,SQL如下:

[sql]view
plaincopy

#创建dbtest1

dropdatabaseif exists dbtest1;

createdatabasedbtest1;

use dbtest1;

#在dbtest1上创建tb1

createtabletb1(