用MySQL实现类似于Oracle dblink的功能

数据库 MySQL
MySQL中,使用federated引擎,实现本地库访问远程库的表,并可以将数据写入远程库的表中。

用MySQL实现类似于Oracle dblink的功能

首先看看有没有federated 引擎:

  1. mysql> show engines;  
  2. +--------------------+---------+------------------------------------------------------------+--------------+-----+------------+ 
  3. | Engine             | Support | Comment                                                    | Transactions | XA  | Savepoints | 
  4. +--------------------+---------+------------------------------------------------------------+--------------+-----+------------+ 
  5. | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES          | YES | YES        | 
  6. | PERFORMANCE_SCHEMA | YES     | Performance Schema                                         | NO           | NO  | NO         | 
  7. | CSV                | YES     | CSV storage engine                                         | NO           | NO  | NO         | 
  8. | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                      | NO           | NO  | NO         | 
  9. | MyISAM             | YES     | MyISAM storage engine                                      | NO           | NO  | NO         | 
  10. | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables  | NO           | NO  | NO         | 
  11. +--------------------+---------+------------------------------------------------------------+--------------+-----+------------+ 
  12. rows in set  

看到没有安装federated存储引擎(目标端可以是任何的存储引擎比如说myisam或者innodb)

安装federated存储引擎:

  1. mysql>  install plugin federated soname 'ha_federated.so'
  2. Query OK, 0 rows affected 
  3.  
  4. mysql>   

测试一下是否可以

  1. [root@test01 bin]# ./mysqld_safe --federated & 
  2. [1] 5418 
  3. You have new mail in /var/spool/mail/root 
  4. [root@test01 bin]# 170823 16:24:17 mysqld_safe Logging to '/var/log/mysqld.log'
  5. 170823 16:24:17 mysqld_safe Starting mysqld daemon with databases from /mysql/data 
  6. 170823 16:25:57 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended  

默认mysql是没有开启federated存储引擎【linux系统下】

  1. mysql> show engines ; 
  2. +--------------------+---------+------------------------------------------------------------+--------------+------+------------+ 
  3. | Engine             | Support | Comment                                                    | Transactions | XA   | Savepoints | 
  4. +--------------------+---------+------------------------------------------------------------+--------------+------+------------+ 
  5. | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        | 
  6. | FEDERATED          | NO      | Federated MySQL storage engine                             | NULL         | NULL | NULL       | 
  7. | CSV                | YES     | CSV storage engine                                         | NO           | NO   | NO         | 
  8. | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                      | NO           | NO   | NO         | 
  9. | MyISAM             | YES     | MyISAM storage engine                                      | NO           | NO   | NO         | 
  10. | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables  | NO           | NO   | NO         | 
  11. | PERFORMANCE_SCHEMA | YES     | Performance Schema                                         | NO           | NO   | NO         | 
  12. +--------------------+---------+------------------------------------------------------------+--------------+------+------------+ 
  13. rows in set 
  14.  
  15. mysql>   

先找到my.cnf文件,我这里直接搜索的。【linux系统下】

  1. [root@test01 mysql]# find / -name my.cnf 
  2. /mysql/mysql-5.5.47/packaging/rpm-sles/my.cnf 
  3. /mysql/mysql-5.5.47/packaging/rpm-docker/my.cnf 
  4. /mysql/mysql-5.5.47/packaging/rpm-oel/my.cnf 
  5. /mysql/mysql-5.5.47/mysql-test/suite/federated/my.cnf 
  6. /mysql/mysql-5.5.47/mysql-test/suite/rpl/my.cnf 
  7. /mysql/mysql-test/suite/federated/my.cnf 
  8. /mysql/mysql-test/suite/rpl/my.cnf 
  9. /etc/my.cnf 
  10. [root@test01 mysql]#   

开启federated存储引擎

只需要在my.cnf文件中增加 federated 就可以。【linux系统下】

  1. [mysqld] 
  2. datadir=/mysql/data 
  3. socket=/mysql/data/mysql.sock 
  4. user=mysql 
  5. # Disabling symbolic-links is recommended to prevent assorted security risks 
  6. symbolic-links=0 
  7.  
  8. lower_case_table_names=1 
  9.  
  10. [mysqld_safe] 
  11. log-error=/var/log/mysqld.log 
  12. pid-file=/var/run/mysqld/mysqld.pid 
  13.  
  14. federated  

配置好my.cnf文件的federated,然后重启mysql服务。

  1. [root@test01 ~]# service mysql restart 
  2. mysql: 未被识别的服务 
  3. You have new mail in /var/spool/mail/root 
  4. [root@test01 ~]#   

重启的时候提示:未被识别的服务,解决方法如下:

  1. [root@test01 support-files]# pwd 
  2. /mysql/support-files 
  3. [root@test01 support-files]# cp ./mysql.server /etc/init.d/mysqld  
  4. [root@test01 support-files]# chkconfig --add mysqld 
  5. [root@test01 support-files]# chkconfig --level 2345 mysqld on 
  6. [root@test01 support-files]#   

使用service mysqld restart --federated 命令重启mysql

  1. [root@test01 ~]# service mysqld restart --federated 
  2. Shutting down MySQL...                                     [确定] 
  3. Starting MySQL..                                           [确定] 
  4. [root@test01 ~]#   

查看 federated 服务是否启动了。

  1. mysql> show engines ; 
  2. +--------------------+---------+------------------------------------------------------------+--------------+-----+------------+ 
  3. | Engine             | Support | Comment                                                    | Transactions | XA  | Savepoints | 
  4. +--------------------+---------+------------------------------------------------------------+--------------+-----+------------+ 
  5. | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES          | YES | YES        | 
  6. | FEDERATED          | YES     | Federated MySQL storage engine                             | NO           | NO  | NO         | 
  7. | CSV                | YES     | CSV storage engine                                         | NO           | NO  | NO         | 
  8. | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                      | NO           | NO  | NO         | 
  9. | MyISAM             | YES     | MyISAM storage engine                                      | NO           | NO  | NO         | 
  10. | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables  | NO           | NO  | NO         | 
  11. | PERFORMANCE_SCHEMA | YES     | Performance Schema                                         | NO           | NO  | NO         | 
  12. +--------------------+---------+------------------------------------------------------------+--------------+-----+------------+ 
  13. rows in set 
  14.  
  15. mysql>   

好了,FEDERATED值为YES了。

目标:本地库A的三张表,整合数据后,写入远程库B的一张表中。

下面我们来建表

远程库B的inf_monitor_data表:

  1. DROP TABLE IF EXISTS `inf_monitor_data`; 
  2. CREATE TABLE `inf_monitor_data` ( 
  3.   `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '编号'
  4.   `IT_Catalog` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主类别'
  5.   `IT_Function` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '子类别'
  6.   `Business_Name` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '业务名称'
  7.   `Control_Address` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '管理地址,设备Ip|数据库服务名|URI地址'
  8.   `Title` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '摘要'
  9.   `Detail` varchar(2000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '描述'
  10.   `Start_Time` datetime NOT NULL COMMENT '采集查询起始时间'
  11.   `End_Time` datetime DEFAULT NULL COMMENT '采集查询结束时间'
  12.   `BSM_Type` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '对应其是哪类监视器的事件'
  13.   `Status` varchar(3) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '处理标记'
  14.   `Remarks` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '备注'
  15.   PRIMARY KEY (`id`) 
  16. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

本地库A的c_itcomp、def_comp、i_incident表:

  1. DROP TABLE IF EXISTS `c_itcomp`; 
  2. CREATE TABLE `c_itcomp` ( 
  3.   `P_Guid` varchar(40) NOT NULL COMMENT '主键,唯一标识'
  4.   `AF_Pid` varchar(40) DEFAULT NULL COMMENT '部件的父设备'
  5.   `D_AVA_STATE` int(11) DEFAULT NULL
  6.   `D_CAP_STATE` int(11) DEFAULT NULL
  7.   `Com_Duration` decimal(18,0) DEFAULT NULL COMMENT '本次持续时间,下一次变化维护,毫秒'
  8.   `Com_StartTime` datetime DEFAULT NULL COMMENT '本次变化的开始时间'
  9.   `Com_EndTime` datetime DEFAULT NULL COMMENT '下一次变化的开始时间,下一次变化时维护'
  10.   `Com_Role` varchar(40) DEFAULT NULL
  11.   `Com_A_IsUserComfirmed` bit(1) DEFAULT NULL COMMENT '用户是否已确认'
  12.   `A_CanManage` bit(1) DEFAULT NULL COMMENT '是否可网管'
  13.   `A_CanMonitor` bit(1) NOT NULL COMMENT '是否可监视,有监视调度维护,无可连通凭证则不可监视'
  14.   `A_IsStop` bit(1) DEFAULT NULL COMMENT '是否停止监视'
  15.   `A_CIChanged` int(11) DEFAULT NULL COMMENT 'CI相对基线是否发生变化(1=未变更,2=已知变更,3=未知变更)'
  16.   `A_IsEdge` bit(1) DEFAULT NULL COMMENT '是否是边缘交换机'
  17.   `D_BusinessName` varchar(50) DEFAULT NULL COMMENT '业务名称'
  18.   `D_Useage` varchar(500) DEFAULT NULL COMMENT '组件用途'
  19.   `D_Descr` varchar(1000) DEFAULT NULL COMMENT '描述,snmp获取或用户自定义'
  20.   `D_BusinessCode` varchar(200) DEFAULT NULL COMMENT '业务编码'
  21.   `D_HostName` varchar(50) DEFAULT NULL COMMENT '设备名称,设备自身定义的名称'
  22.   `D_ControlAdderss` varchar(200) DEFAULT NULL COMMENT '管理地址,设备Ip|数据库服务名|URI地址'
  23.   `DE_UseState` int(11) DEFAULT NULL COMMENT '组件使用状态,枚举:ITCompState'
  24.   `DF_DutyRole` varchar(1000) DEFAULT NULL COMMENT '责任角色,外键,角色唯一标识'
  25.   `DF_DutyUser` varchar(2000) DEFAULT NULL COMMENT '责任人,外键,人员唯一标识'
  26.   `DE_ITCatalog` int(11) DEFAULT NULL COMMENT '主类别,枚举:ITCompCatalog'
  27.   `DE_ITFunction` int(11) DEFAULT NULL COMMENT '子类别,枚举:ITCompFunction'
  28.   `DE_ITManufacturer` int(11) DEFAULT NULL COMMENT '厂商,枚举:ITCompManufacturer'
  29.   `DE_ITProductSeries` int(11) DEFAULT NULL COMMENT '产品系列,枚举:ITCompProductSeries'
  30.   `D_Version` varchar(100) DEFAULT NULL COMMENT '版本号'
  31.   `DF_Path_Site` varchar(150) DEFAULT NULL COMMENT '外键,Site类别路径的唯一标识,格式:[id#id#id]'
  32.   `DF_Path_Location` varchar(150) DEFAULT NULL COMMENT '外键,Location类别路径的唯一标识,格式:[id#id#id]'
  33.   `DF_Path_Custom` varchar(150) DEFAULT NULL COMMENT '外键,Custom类别路径的唯一标识,格式:[id#id#id]'
  34.   `DF_Right_R` varchar(800) NOT NULL COMMENT '权限读,角色唯一标识,格式:[''id'',''id'',''id'']|[all]|[none]'
  35.   `DF_Right_W` varchar(800) NOT NULL COMMENT '权限写,角色唯一标识,格式:[''id'',''id'',''id'']|[all]|[none]'
  36.   `D_CPU_Unilization` decimal(18,0) DEFAULT NULL COMMENT 'CPU使用率'
  37.   `D_Mem_Unilization` decimal(18,0) DEFAULT NULL COMMENT '内存使用率'
  38.   `D_CPU_State` int(11) DEFAULT NULL
  39.   `D_Mem_State` int(11) DEFAULT NULL
  40.   `D_CIP_Building` varchar(100) DEFAULT NULL COMMENT '建筑物'
  41.   `D_CIP_Floor` varchar(50) DEFAULT NULL COMMENT '楼层'
  42.   `D_CIP_OPSystem` varchar(50) DEFAULT NULL COMMENT '操作系统'
  43.   `D_CIP_Bed` varchar(50) DEFAULT NULL COMMENT '机架'
  44.   `D_CIP_SlotInBed` varchar(50) DEFAULT NULL COMMENT '机架上的槽位'
  45.   `D_CIP_Room` varchar(50) DEFAULT NULL COMMENT '房间'
  46.   `DF_CreateUserId` varchar(40) DEFAULT NULL COMMENT '创建人'
  47.   `D_CreateTime` datetime DEFAULT NULL COMMENT '创建时间'
  48.   `DF_UpdateUserId` varchar(40) DEFAULT NULL COMMENT '修改人'
  49.   `D_UpdateTime` datetime DEFAULT NULL COMMENT '修改时间'
  50.   `DF_CheckUserId` varchar(40) DEFAULT NULL COMMENT '检查人'
  51.   `D_CheckTime` datetime DEFAULT NULL COMMENT '检查时间'
  52.   `D_Price` decimal(18,2) DEFAULT NULL COMMENT '单价'
  53.   `D_UsefulYear` decimal(18,2) DEFAULT NULL COMMENT '使用年限'
  54.   `D_NetSalvageValue` decimal(18,2) DEFAULT NULL COMMENT '净残值'
  55.   `D_ExternalSN` varchar(100) DEFAULT NULL COMMENT '资产_外部序列号'
  56.   `D_ProductSN` varchar(100) DEFAULT NULL COMMENT '资产_产品序列号'
  57.   `D_Brand` varchar(100) DEFAULT NULL COMMENT '资产_品牌'
  58.   `D_BuyTime` datetime DEFAULT NULL COMMENT '购买日期'
  59.   `D_BuyCost` decimal(18,2) DEFAULT NULL COMMENT '购买成本'
  60.   `D_WarrantyTime` datetime DEFAULT NULL COMMENT '保修期'
  61.   `DF_CostCustomer` varchar(200) DEFAULT NULL COMMENT '成本客户,从角色中选择,多个RoleID用逗号隔开'
  62.   `DF_CostUser` varchar(200) DEFAULT NULL COMMENT '成本用户,从用户中选择,多个UserID用逗号隔开'
  63.   `D_ImageUrl` varchar(100) DEFAULT NULL
  64.   `D_RunTime` decimal(18,0) DEFAULT NULL COMMENT '系统运行时间(秒)'
  65.   `D_AssetCode` varchar(100) DEFAULT NULL COMMENT '资产编码,资产号'
  66.   `D_ProviderOrg` varchar(40) DEFAULT NULL COMMENT '供应商'
  67.   `D_BuyContract` varchar(40) DEFAULT NULL COMMENT '购买合同'
  68.   `D_ServiceOrg` varchar(40) DEFAULT NULL COMMENT '服务商'
  69.   `D_ServiceRole` varchar(40) DEFAULT NULL COMMENT '服务角色'
  70.   `D_ServiceContract` varchar(40) DEFAULT NULL
  71.   `D_OldAssetValue` decimal(18,2) DEFAULT NULL COMMENT '原资产价值'
  72.   `D_FixedAssetValue` decimal(18,2) DEFAULT NULL COMMENT '固定资产价值'
  73.   `D_CIP_BusinessDepart` varchar(40) DEFAULT NULL COMMENT '归口业务部门'
  74.   `D_CIP_Cabinets` varchar(50) DEFAULT NULL COMMENT '机柜'
  75.   `D_CIP_Model` varchar(50) DEFAULT NULL COMMENT '设备型号'
  76.   `D_CIP_CPU` varchar(50) DEFAULT NULL COMMENT 'CPU型号'
  77.   `D_CIP_Memory` varchar(50) DEFAULT NULL COMMENT '内存'
  78.   `D_CIP_HDD` varchar(50) DEFAULT NULL COMMENT '硬盘'
  79.   `D_CIP_NIC` varchar(50) DEFAULT NULL COMMENT '网卡'
  80.   `D_CIP_FiberCard` varchar(50) DEFAULT NULL COMMENT '光纤卡'
  81.   `D_CIP_Power` varchar(50) DEFAULT NULL COMMENT '电源'
  82.   `D_CIP_UsedPowerCount` varchar(50) DEFAULT NULL COMMENT '已通电电源数量'
  83.   `D_CIP_DataBase` varchar(50) DEFAULT NULL COMMENT '数据库'
  84.   `D_CIP_Middleware` varchar(50) DEFAULT NULL COMMENT '中间件'
  85.   `D_CIP_Administrator` varchar(50) DEFAULT NULL COMMENT '管理员'
  86.   `D_CIP_Developer` varchar(50) DEFAULT NULL COMMENT '开发人员'
  87.   `D_CIP_StartUseTime` varchar(50) DEFAULT NULL COMMENT '开始使用时间'
  88.   `D_CIP_ServiceStartTime` varchar(50) DEFAULT NULL COMMENT '维保开始时间'
  89.   `D_CIP_ServiceEndTime` varchar(50) DEFAULT NULL COMMENT '维保终止时间'
  90.   `D_CIP_ServiceProvider` varchar(150) DEFAULT NULL COMMENT '维保商'
  91.   `D_CIP_Contact` varchar(150) DEFAULT NULL COMMENT '联系人'
  92.   `D_CIP_ContactTel` varchar(150) DEFAULT NULL COMMENT '联系电话'
  93.   `D_IPLong` decimal(18,0) DEFAULT NULL
  94.   `D_ControlUrl` varchar(200) DEFAULT NULL
  95.   `Com_AvaF` int(11) DEFAULT NULL COMMENT 'ava监视频率'
  96.   `Com_CapF` int(11) DEFAULT NULL COMMENT 'Cap监视频率'
  97.   `DF_LinkTopoID` varchar(50) DEFAULT NULL
  98.   `D_CIP_BatchNumber` varchar(50) DEFAULT NULL
  99.   `F_RUserID` varchar(1000) DEFAULT NULL
  100.   `F_RUserTEXT` varchar(1000) DEFAULT NULL
  101.   `F_RRoleID` varchar(40) DEFAULT NULL
  102.   `F_SUserID` varchar(500) DEFAULT NULL
  103.   `F_SUserTEXT` varchar(100) DEFAULT NULL
  104.   `F_SRoleID` varchar(40) DEFAULT NULL
  105.   `F_CUserID` varchar(500) DEFAULT NULL
  106.   `F_CUserTEXT` varchar(100) DEFAULT NULL
  107.   `F_CRoleID` varchar(40) DEFAULT NULL
  108.   `F_IUserID` varchar(500) DEFAULT NULL
  109.   `F_IUserTEXT` varchar(100) DEFAULT NULL
  110.   `F_IRoleID` varchar(40) DEFAULT NULL
  111.   `F_VUserID` varchar(500) DEFAULT NULL
  112.   `F_VUserTEXT` varchar(100) DEFAULT NULL
  113.   `F_VRoleID` varchar(40) DEFAULT NULL
  114.   `F_AUserID` varchar(500) DEFAULT NULL
  115.   `F_AUserTEXT` varchar(100) DEFAULT NULL
  116.   `F_ARoleID` varchar(40) DEFAULT NULL
  117.   `D_Affect` varchar(40) DEFAULT NULL
  118.   `D_Urgency` varchar(40) DEFAULT NULL
  119.   `DF_LifeCycle` varchar(40) DEFAULT NULL COMMENT '生命周期,对应d_itcomp_lifecycle'
  120.   `D_SupportCompModel` varchar(40) DEFAULT NULL
  121.   `D_CIP_SlotCount` int(11) DEFAULT NULL COMMENT '网络设备的槽位数'
  122.   `D_ExpiryDate` datetime DEFAULT NULL COMMENT '到期时间'
  123.   `AF_SlaId` varchar(40) DEFAULT NULL
  124.   `D_SyslogEncoding` varchar(40) DEFAULT NULL
  125.   `D_IsReceiveLog` bit(1) DEFAULT NULL
  126.   `D_ReceiveLogParameter` varchar(100) DEFAULT NULL
  127.   `D_LastReceiveLogTime` varchar(40) DEFAULT NULL
  128.   `D_Barcode` varchar(50) DEFAULT NULL COMMENT '1D条形码'
  129.   `A_IsBackup` bit(1) DEFAULT NULL COMMENT '是否是备件,true:备件;false:不是备件'
  130.   `D_ClusterName` varchar(200) DEFAULT NULL COMMENT '集群名称(Vmware用)'
  131.   `D_UID` varchar(100) DEFAULT NULL
  132.   `DE_VirtualType` int(11) DEFAULT NULL
  133.   PRIMARY KEY (`P_Guid`), 
  134.   UNIQUE KEY `c_itcomp_KEY` (`P_Guid`), 
  135.   KEY `x_A_CanManage` (`A_CanMonitor`), 
  136.   KEY `x_Com_A_IsUserComfirmed` (`Com_A_IsUserComfirmed`), 
  137.   KEY `x_Custom` (`DF_Path_Custom`), 
  138.   KEY `x_D_ControlAdderss` (`D_ControlAdderss`), 
  139.   KEY `x_DE_ITFunction` (`DE_ITFunction`), 
  140.   KEY `x_Loction` (`DF_Path_Location`), 
  141.   KEY `x_Site` (`DF_Path_Site`), 
  142.   KEY `IT_ITComp_D_Barcode` (`D_Barcode`) 
  143. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED; 
  1. DROP TABLE IF EXISTS `def_comp`; 
  2. CREATE TABLE `def_comp` ( 
  3.   `P_Guid` varchar(40) NOT NULL COMMENT '主键,唯一标识'
  4.   `AF_Pid` varchar(40) NOT NULL COMMENT '外键,父节点,如果是根节点则为 Root'
  5.   `D_Key` varchar(20) DEFAULT NULL COMMENT '不是Id,是有意义的唯一标识'
  6.   `D_Caption` varchar(20) DEFAULT NULL COMMENT '别名,默认为D_key'
  7.   `DF_ITCatalog` int(11) DEFAULT NULL COMMENT '主类别,枚举:ITCompCatalog'
  8.   `DF_ITFunction` int(11) DEFAULT NULL COMMENT '子类别,枚举:ITCompFunction'
  9.   `DF_ITManufacturer` int(11) DEFAULT NULL COMMENT '厂商,枚举:ITCompManufacturer'
  10.   `DF_ITProductSeries` int(11) DEFAULT NULL COMMENT '产品系列,枚举:ITCompProductSeries'
  11.   `A_FacePlateId` varchar(50) DEFAULT NULL
  12.   `A_NeedParent` bit(1) DEFAULT NULL
  13.   `D_KeyWord` varchar(2000) DEFAULT NULL
  14.   PRIMARY KEY (`P_Guid`), 
  15.   UNIQUE KEY `def_comp_KEY` (`P_Guid`), 
  16.   KEY `x_Def_Comp_D_Key` (`D_Key`) 
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED; 
  1. DROP TABLE IF EXISTS `i_incident`; 
  2. CREATE TABLE `i_incident` ( 
  3.   `P_Guid` varchar(40) NOT NULL COMMENT '主键,唯一标识'
  4.   `D_Owner` varchar(40) DEFAULT NULL COMMENT '所有者,单选一个用户(不是角色)'
  5.   `D_Title` varchar(300) NOT NULL COMMENT '摘要'
  6.   `D_Title_Confirm` varchar(300) DEFAULT NULL COMMENT '摘要,工程师确认'
  7.   `AE_ChannelModule` int(11) NOT NULL COMMENT '来源模块,枚举ChannelModule:1=Monitor,2=NetWork,3=Syslog,4=SnmpTrap,5=Netflow,6=HelpDesk,9=Custom'
  8.   `AE_BSMType` int(11) DEFAULT NULL COMMENT '对应其是哪类监视器的事件  枚举:MonitorBSMType   0=CI,1=可用性,2=容量,3=财务'
  9.   `D_StartTime` datetime NOT NULL COMMENT '开始时间'
  10.   `D_UpdateTime` datetime DEFAULT NULL COMMENT '最后一次修改时间'
  11.   `D_EndTime` datetime DEFAULT NULL COMMENT '关闭时间,如果没有关闭,则为Null'
  12.   `D_Affect` int(11) NOT NULL COMMENT '影响度'
  13.   `D_Urgency` int(11) NOT NULL COMMENT '紧急度'
  14.   `D_PRI` int(11) NOT NULL COMMENT '优先级=影响度×紧急度'
  15.   `D_OPTimes` int(11) DEFAULT NULL COMMENT '被处理过几次'
  16.   `DF_DutyRoleId` varchar(1000) NOT NULL COMMENT 'R-角色1 R-角色2,U-用户1,M-用户2,U-用户3 R-角色3,U-用户4,U-用户5(R-:角色ID,U-:用户ID,M-:主用户ID)'
  17.   `DF_DutyRoleText` varchar(2000) DEFAULT NULL
  18.   `DF_DutyUserId` varchar(1000) NOT NULL COMMENT '责任人'
  19.   `DF_ApplyUserId` varchar(40) NOT NULL COMMENT '申请事件的用户,如是自动事件,则为【系统】'
  20.   `DF_CreateUserId` varchar(40) NOT NULL COMMENT '创建事件的用户,如是自动事件,则为【系统】'
  21.   `DF_UpdateUserId` varchar(40) DEFAULT NULL COMMENT '最后一次修改用户Id'
  22.   `D_FlowState` int(11) NOT NULL COMMENT '流程状态,枚举FlowState:待确认=1,处理中=2,重打开=3,挂起=4,已处理待验证=5,关闭=6'
  23.   `D_AcceptTime` datetime DEFAULT NULL
  24.   `D_Detail` varchar(1000) DEFAULT NULL COMMENT '描述'
  25.   `D_Detail_Confirm` varchar(1000) DEFAULT NULL COMMENT '描述,工程师确认'
  26.   `A_AlarmCount` int(11) DEFAULT NULL
  27.   `DE_ITManufacturer` int(11) DEFAULT NULL COMMENT '厂商,枚举:ITCompManufacturer'
  28.   `DE_ITCatalog` int(11) DEFAULT NULL COMMENT '主类别,枚举:ITCompCatalog'
  29.   `DE_ITFunction` int(11) DEFAULT NULL COMMENT '子类别,枚举:ITCompFunction'
  30.   `DE_ITProductSeries` int(11) DEFAULT NULL COMMENT '产品系列,枚举:ITCompProductSeries'
  31.   `DE_CITypeKey` varchar(40) DEFAULT NULL COMMENT '设备CI的Key'
  32.   `A_RelatvieServiceId` varchar(500) DEFAULT NULL COMMENT '相关的服务id,由逗号分隔'
  33.   `DF_Path_Custom` varchar(150) DEFAULT NULL COMMENT '外键,关联I_Incident_Catalog.A_Path,自定义类别'
  34.   `A_IsReportToHigerLevel` bit(1) DEFAULT NULL COMMENT '是否上报给了上级'
  35.   `A_ReportToHigerLevelObjectId` bigint(20) DEFAULT NULL COMMENT '上报给上级的单据的id'
  36.   `A_ReportDateTime` datetime DEFAULT NULL
  37.   `A_RelaMainService` varchar(40) DEFAULT NULL COMMENT '影响的主服务'
  38.   `AF_LastHistoryId` varchar(40) DEFAULT NULL COMMENT '最后一次处理历史的id'
  39.   `D_CustomerDegree` int(11) DEFAULT NULL COMMENT '用户满意度,枚举:CustomerDegree'
  40.   `D_DegreeDetail` varchar(500) DEFAULT NULL COMMENT '客户满意度描述'
  41.   `AF_SLAId` varchar(40) DEFAULT NULL COMMENT '相关sla级别的id'
  42.   `D_Number` bigint(20) NOT NULL AUTO_INCREMENT, 
  43.   `D_HopeEndTime` datetime DEFAULT NULL COMMENT '期望的解决时间'
  44.   `CDDY` int(11) NOT NULL
  45.   `AF_SourceITCompId` varchar(40) DEFAULT NULL
  46.   `AF_SourceObjectId` varchar(40) DEFAULT NULL
  47.   `D_MState` int(11) DEFAULT NULL
  48.   `IsChangeToOK` bit(1) DEFAULT NULL
  49.   PRIMARY KEY (`D_Number`), 
  50.   UNIQUE KEY `i_incident_KEY` (`D_Number`), 
  51.   KEY `IX_PF_Inc_Datetime` (`D_StartTime`), 
  52.   KEY `x_AE_ChannelModule` (`AE_ChannelModule`), 
  53.   KEY `x_AF_SourceITCompId` (`AF_SourceITCompId`), 
  54.   KEY `x_AF_SourceObjectId` (`AF_SourceObjectId`), 
  55.   KEY `x_D_FlowState` (`D_FlowState`), 
  56.   KEY `x_DF_CreateUserId` (`DF_CreateUserId`), 
  57.   KEY `IX_Inc_Id` (`P_Guid`), 
  58.   KEY `IX_IsChangeToOK` (`IsChangeToOK`), 
  59.   KEY `IX_AlarmCount` (`A_AlarmCount`) 
  60. ) ENGINE=InnoDB AUTO_INCREMENT=56989 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;  

数据整合的脚本:

  1. insert into inf_monitor_data 
  2.   (ID, 
  3.    IT_Catalog, 
  4.    IT_Function, 
  5.    Business_Name, 
  6.    Control_Address, 
  7.    Title, 
  8.    Detail, 
  9.    Start_Time, 
  10.    End_Time, 
  11.    BSM_Type, 
  12.    Status, 
  13.    Remarks) 
  14.   select i.P_Guid, 
  15.          case c.DE_ITCatalog 
  16.            when 1 then 
  17.             '应用' 
  18.            when 2 then 
  19.             '主机系统' 
  20.            when 3 then 
  21.             '主机硬件' 
  22.            when 4 then 
  23.             '网络设备' 
  24.            when 6 then 
  25.             '存储' 
  26.            else 
  27.             '其他' 
  28.          end
  29.          case c.DE_ITFunction 
  30.            when 101 then 
  31.             '网站' 
  32.            when 105 then 
  33.             '数据库' 
  34.            when 106 then 
  35.             '中间件' 
  36.            when 107 then 
  37.             'Web Server' 
  38.            when 201 then 
  39.             '服务器' 
  40.            when 402 then 
  41.             '交换机' 
  42.            when 403 then 
  43.             '防火墙' 
  44.            when 404 then 
  45.             '负载均衡' 
  46.            when 412 then 
  47.             '入侵防护' 
  48.            else 
  49.             '其他' 
  50.          end
  51.          c.D_BusinessName, 
  52.          c.D_ControlAdderss, 
  53.          i.D_Title, 
  54.          i.D_Detail, 
  55.          i.D_StartTime, 
  56.          i.D_EndTime, 
  57.          case i.AE_BSMType 
  58.            when 0 then 
  59.             'CI' 
  60.            when 1 then 
  61.             '可用性' 
  62.            when 2 then 
  63.             '容量' 
  64.            when 3 then 
  65.             '财务' 
  66.            else 
  67.             '其他' 
  68.          end
  69.          '0'
  70.          '' 
  71.     from i_incident i 
  72.     Left outer join c_itcomp c 
  73.       on i.AF_SourceITCompId = c.P_Guid;  

在本地库A中,创建用户s_monitor,并且将远程库B中的inf_monitor_data表授权给s_monitor

  1. mysql> CREATE USER 's_monitor'@'%' IDENTIFIED BY 's_monitor'
  2. Query OK, 0 rows affected (0.00 sec) 
  3.  
  4. mysql> GRANT ALL PRIVILEGES ON monitor.inf_monitor_data TO s_monitor IDENTIFIED BY 's_monitor'
  5. Query OK, 0 rows affected (0.00 sec) 
  6.  
  7. mysql> GRANT ALL PRIVILEGES ON monitor.inf_monitor_data TO s_monitor@192.168.12.*** IDENTIFIED BY 's_monitor'
  8. Query OK, 0 rows affected (0.00 sec) 
  9.  
  10. mysql> SHOW GRANTS FOR s_monitor; 
  11. +----------------------------------------------------------------------------------------------------------+ 
  12. | Grants for s_monitor@%                                                                                   | 
  13. +----------------------------------------------------------------------------------------------------------+ 
  14. GRANT USAGE ON *.* TO 's_monitor'@'%' IDENTIFIED BY PASSWORD '*9BCC44AF82455FA4B8F72DC435F1FE3BEEA8E5C9' | 
  15. GRANT ALL PRIVILEGES ON `monitor`.`inf_monitor_data` TO 's_monitor'@'%'                                  | 
  16. +----------------------------------------------------------------------------------------------------------+ 
  17. rows in set (0.00 sec) 
  18.  
  19. mysql>   
  1. mysql> use s_monitor; 
  2. Database changed 
  3. mysql> CREATE TABLE `link_inf_monitor_data` ( 
  4.     ->   `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '编号'
  5.     ->   `IT_Catalog` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主类别'
  6.     ->   `IT_Function` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '子类别'
  7.     ->   `Business_Name` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '业务名称'
  8.     ->   `Control_Address` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '管理地址,设备Ip|数据库服务名|URI地址'
  9.     ->   `Title` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '摘要'
  10.     ->   `Detail` varchar(2000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '描述'
  11.     ->   `Start_Time` datetime NOT NULL COMMENT '采集查询起始时间'
  12.     ->   `End_Time` datetime DEFAULT NULL COMMENT '采集查询结束时间'
  13.     ->   `BSM_Type` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '对应其是哪类监视器的事件'
  14.     ->   `Status` varchar(3) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '处理标记'
  15.     ->   `Remarks` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '备注'
  16.     ->   PRIMARY KEY (`id`) 
  17.     -> )  
  18.     -> ENGINE=FEDERATED DEFAULT CHARSET=utf8 
  19.     -> CONNECTION='mysql://s_monitor:s_monitor@192.168.12.***:3306/monitor/inf_monitor_data'
  20. Query OK, 0 rows affected (0.00 sec) 
  21.  
  22. mysql> select count(*) from link_inf_monitor_data; 
  23. +----------+ 
  24. count(*) | 
  25. +----------+ 
  26. |    56740 | 
  27. +----------+ 
  28. 1 row in set (0.24 sec) 
  29.  
  30. mysql>   

脚本及说明如下:

  1. DROP TABLE IF EXISTS `link_inf_monitor_data`; 
  2. CREATE TABLE `link_inf_monitor_data` ( 
  3.   `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '编号'
  4.   `IT_Catalog` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主类别'
  5.   `IT_Function` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '子类别'
  6.   `Business_Name` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '业务名称'
  7.   `Control_Address` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '管理地址,设备Ip|数据库服务名|URI地址'
  8.   `Title` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '摘要'
  9.   `Detail` varchar(2000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '描述'
  10.   `Start_Time` datetime NOT NULL COMMENT '采集查询起始时间'
  11.   `End_Time` datetime DEFAULT NULL COMMENT '采集查询结束时间'
  12.   `BSM_Type` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '对应其是哪类监视器的事件'
  13.   `Status` varchar(3) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '处理标记'
  14.   `Remarks` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '备注'
  15.   PRIMARY KEY (`id`) 
  16. )  
  17. ENGINE=FEDERATED DEFAULT CHARSET=utf8 
  18. CONNECTION='mysql://s_monitor:s_monitor@192.168.12.***:3306/monitor/inf_monitor_data' 
  1. <!-- 
  2.  
  3. s_monitor:s_monitor=username:password 
  4.  
  5. 192.168.12.***=source ip 
  6.  
  7. 3306=source mysql server listener port 
  8.  
  9. monitor=source database name 
  10.  
  11. inf_monitor_data=source table name 
  12.  
  13. -->  

创建触发器

  1. mysql> use s_monitor; 
  2. Database changed 
  3. mysql>   
  1. DROP TRIGGER IF EXISTS t_afterinsert_on_i_incident; 
  2.  
  3. CREATE TRIGGER t_afterinsert_on_i_incident  
  4.  
  5. AFTER INSERT ON i_incident 
  6.  
  7. FOR EACH ROW 
  8.  
  9. BEGIN 
  10.       
  11.   insert into link_inf_monitor_data 
  12.   (ID, 
  13.    IT_Catalog, 
  14.    IT_Function, 
  15.    Business_Name, 
  16.    Control_Address, 
  17.    Title, 
  18.    Detail, 
  19.    Start_Time, 
  20.    End_Time, 
  21.    BSM_Type, 
  22.    Status, 
  23.    Remarks) 
  24.   select i.P_Guid, 
  25.          case c.DE_ITCatalog 
  26.            when 1 then 
  27.             '应用' 
  28.            when 2 then 
  29.             '主机系统' 
  30.            when 3 then 
  31.             '主机硬件' 
  32.            when 4 then 
  33.             '网络设备' 
  34.            when 6 then 
  35.             '存储' 
  36.            else 
  37.             '其他' 
  38.          end
  39.          case c.DE_ITFunction 
  40.            when 101 then 
  41.             '网站' 
  42.            when 105 then 
  43.             '数据库' 
  44.            when 106 then 
  45.             '中间件' 
  46.            when 107 then 
  47.             'Web Server' 
  48.            when 201 then 
  49.             '服务器' 
  50.            when 402 then 
  51.             '交换机' 
  52.            when 403 then 
  53.             '防火墙' 
  54.            when 404 then 
  55.             '负载均衡' 
  56.            when 412 then 
  57.             '入侵防护' 
  58.            else 
  59.             '其他' 
  60.          end
  61.          c.D_BusinessName, 
  62.          c.D_ControlAdderss, 
  63.          i.D_Title, 
  64.          i.D_Detail, 
  65.          i.D_StartTime, 
  66.          i.D_EndTime, 
  67.          case i.AE_BSMType 
  68.            when 0 then 
  69.             'CI' 
  70.            when 1 then 
  71.             '可用性' 
  72.            when 2 then 
  73.             '容量' 
  74.            when 3 then 
  75.             '财务' 
  76.            else 
  77.             '其他' 
  78.          end
  79.          '0'
  80.          '' 
  81.     from i_incident i 
  82.     Left outer join c_itcomp c 
  83.       on i.AF_SourceITCompId = c.P_Guid 
  84.     where i.P_Guid=new.P_Guid;  
  85.  
  86. END 

验证触发器

  1. mysql> INSERT INTO `i_incident` VALUES ('9df5f3fa-df53-4f8e-8111-135ebf48be54''''192.168.10.186的[JVM]容量异常''''1''2''2017-03-03 09:55:29''2017-03-03 09:55:29'null'1''1''1''0''1635f6d8-f14f-41cb-987d-30f9f7f0d8d5''''f5a03252-6944-49b1-a61c-15d09230f590,64015112-f056-4f32-93f3-c9d59997a967,5d6beb49-c573-4588-b46e-3299a9566de8''System''System''System''1'null'当前:使用率=[94.39%];剩余内存=[4.93MB];内存总量=[87.89MB]\r\n阀值:使用率(%) > 90''''0''900''1''106''2302''WSJVM'''''nullnullnull'''d767e13a-cd13-44ba-a2f7-3e5e4334a327''0''''''56988'null'201703''911be2ac-3db6-4abb-96ac-910a5e6779d1''8ba66b5d-9ee2-464c-bda6-13f5e1673434''2''');  
  1. mysql> use s_monitor; 
  2. Database changed 
  3. mysql> select * from link_inf_monitor_data where id = '9df5f3fa-df53-4f8e-8111-135ebf48be54'
  4. +--------------------------------------+------------+-------------+---------------+-----------------+------------------------------------+----------------------------------------------------------------------------------------------------------+---------------------+----------+----------+--------+---------+ 
  5. | id                                   | IT_Catalog | IT_Function | Business_Name | Control_Address | Title                              | Detail                                                                                                   | Start_Time          | End_Time | BSM_Type | Status | Remarks | 
  6. +--------------------------------------+------------+-------------+---------------+-----------------+------------------------------------+----------------------------------------------------------------------------------------------------------+---------------------+----------+----------+--------+---------+ 
  7. | 9df5f3fa-df53-4f8e-8111-135ebf48be54 | 应用       | 中间件      |               | 192.168.10.186  | 192.168.10.186的[JVM]容量异常      | 当前:使用率=[94.39%];剩余内存=[4.93MB];内存总量=[87.89MB]阀值:使用率(%) > 90                         | 2017-03-03 09:55:29 | NULL     | 容量     | 0      |         | 
  8. +--------------------------------------+------------+-------------+---------------+-----------------+------------------------------------+----------------------------------------------------------------------------------------------------------+---------------------+----------+----------+--------+---------+ 
  9. 1 row in set (0.00 sec) 
  10.  
  11. mysql>  
责任编辑:庞桂玉 来源: 郑加威的博客
相关推荐

2020-11-19 15:26:36

SQLPandas代码

2012-05-21 14:36:18

Facebook开源

2012-05-22 09:21:10

数据中心PUEFacebook数据中

2010-02-03 09:15:09

Linux XDMCP

2010-01-27 10:09:14

2015-03-10 14:41:56

AppStudio

2023-10-29 15:14:22

人工智能鸽子

2021-06-10 14:14:50

Windows命名微软

2018-01-18 16:10:42

数据库MySQLOracle

2023-09-26 10:51:37

Chrome浏览器

2015-01-21 15:50:55

Android源码全国城市列表

2021-03-10 09:12:22

SysMonTaskWindowsLinux

2021-03-04 10:18:28

微软语音技术人工智能

2023-04-14 14:27:40

2011-07-27 18:55:02

Oracle数据库DBLINK操作

2011-04-12 09:20:28

OracleDBLINK

2023-03-07 14:34:41

ChatGPT人工智能

2011-03-18 19:05:31

QQQtWidget

2020-08-10 08:26:26

Windows 10Windows微软

2010-05-06 15:04:54

Oracle建立DBL
点赞
收藏

51CTO技术栈公众号