
MySQL
wzy0623
20多年的数据库、数据仓库、大数据相关工作。《Hadoop构建数据仓库实践》、《HAWQ数据仓库与数据挖掘实战》、《SQL机器学习库——MADlib技术解析》作者。
-
原创 快速安全清理MySQL binlog
一、问题提出 之前写过一篇名为“快速安全删除MySQL大表”的博客,讲解如何在不影响线上数据库服务的前提下删除大表。实际上清理MySQL binlog也会遇到同样的问题。例如,我们每个binlog文件的大小是1G。最初的做法是,每天凌晨2:30执行下面的操作清理10天前binlog:mysql -uroot -p123456 -s /data/3306/mysqldata/mysql.sock -e "purge master logs before date_sub( now( )...2020-08-21 14:47:321222
0
-
原创 使用MySQL的rlike判断字符串是否匹配
问题提出:表user_experience_wealth_log改名为user_experience_wealth_log_new,该表涉及若干存储过程。为了避免遗漏,需要确认所有相关过程都做了修改,验证方法为不存在包含user_experience_wealth_log的存储过程。问题分析:不能使用简单的 not like '%user_experience_wealth_log%'...2020-04-24 09:00:571142
0
-
原创 求二进制中1的个数之——HAKMEM算法
问题很简单,求一个整数的二进制中1的个数。方案一:select @i:= 50 i,@i_bin:=bin(@i) i_bin, length(@i_bin)-length(replace(@i_bin,'1','')) len_1;方案二:select @tmp:=50 - ((50 >> 1) & 3681400539) - ((50>>2...2020-04-16 09:32:46240
1
-
原创 MySQL找出未提交事务的信息
目录一、processlist中的未提交事务二、information_schema.innodb_trx中的未提交事务三、performance_schema.events_statements_current中的未提交事务参考: 我们经常会碰到这样的情况,某个事务执行完了未提交,后续再来一个DDL和DML操作,导致后面的session要么处于waiting f...2020-03-28 08:14:05460
0
-
原创 获取MySQL历史session
MySQL的show processlist命令可以显示当时的会话情况,但很多时候都需要查看出问题当时的状态,可惜MySQL没有提供类似history session这样的功能。于是为了方便问题排查,自己写了一个非常简单的抓取MySQL现场session的脚本,生产数据库已经用了很长时间,感觉对trouble shooting还是挺有用的。脚本文件get_processlist.s...2020-02-27 07:07:45845
0
-
原创 MySQL高可用之DRBD
目录一、DRBD简介1. 工作原理2. DRBD 支持的底层设备3. DRBD资源4. DRBD 配置工具5. DRBD与RAID1区别6. DRBD与共享存储二、DRBD安装配置1. 实验环境2. 配置前准备3. 下载安装DRBD4. 配置DRBD四、测试MySQL数据同步五、heartbeat+DRBD+mysql高可用方案1....2019-11-14 17:24:333174
0
-
原创 Galera Cluster for MySQL 详解(四)——性能测试
目录一、测试目标二、测试规划三、测试过程1. 缺省配置2. 多线程3. 流控四、测试结论参考: 本篇使用tpcc-mysql压测工具对实验环境的三节点Galera集群进行一系列性能测试。一、测试目标验证Galera的同步复制,检查是否存在复制延迟。 对比Galera与MySQL组复制的每秒事务数(TPS)。 验证多线程复制对Galera...2019-10-31 16:29:051079
0
-
原创 Galera Cluster for MySQL 详解(三)——管理监控
目录一、管理1. 在线DDL(1)TOI(2)RSU(3)pt-online-schema-change2. 恢复主组件(1)了解主组件状态(2)修改保存的主组件状态3. 重置仲裁(1)查找最高级的节点(2)重置仲裁(3)自动引导(4)手动引导4. 管理流控(1)监控流控(2)配置流控5. 自动逐出(1)配置自动逐出(2)...2019-10-30 15:29:012411
0
-
原创 Galera Cluster for MySQL 详解(二)——安装配置
目录一、Galera集群实验环境二、初始安装1. 安装galera-3、mysql-wsrep-5.7、Percona-XtraBackup-2.4.152. 修改配置文件3. 初始化集群4. 启动集群其它节点的mysqld服务5. 验证安装6. 问题排查三、使用SST增加节点四、使用IST增加节点1. 设置gcache.size2. IST测试...2019-10-17 15:24:472613
2
-
原创 Galera Cluster for MySQL 详解(一)——基本原理
目录一、同步复制二、Galera复制架构1. wsrep api2. 全局事务ID(global transaction id,GTID)3. Galera复制插件4. 组通信插件三、Galera复制工作原理四、状态转移1. 状态快照传输2. 增量状态转移3. 写集缓存(gcache)五、流控1. 流控原理2. 理解节点状态3. 节点状态...2019-10-12 17:49:3413036
0
-
原创 Data Vault初探(四) —— 初始装载
下面的SQL脚本用于完成Data Vault的初始装载过程。USE dv;SET AUTOCOMMIT = 0;-- 清空附属表、链接表、中心表SET FOREIGN_KEY_CHECKS=0;TRUNCATE sat_customer;TRUNCATE sat_order_product;TRUNCATE sat_product;TRUNCATE sat_product_c2015-12-08 18:27:032917
0
-
原创 Data Vault初探(五) —— 定期装载_SQL
说明:1. 定期装载的周期为每天一次。2. 每天装载自上次装载后的变化数据3. 建立源数据库的过渡表用于CDC4. 建立cdc_time表用于基于时间戳的CDC5. 因为源库上只有订单销售表有时间属性,所以除了sales_order和sales_order_item拉取变化数据外,其它表都整体拉取到过渡区。实际环境中建议在源表设计上应该有created和last_updated2015-12-11 17:06:072441
0
-
原创 Data Vault初探(六) —— 定期装载_Kettle_作业
总体作业:设置日期变量:清空过渡表:装载过渡表:2015-12-11 17:15:192105
1
-
原创 Data Vault初探(七) —— 定期装载_Kettle_中心表
装载中心表作业:装载产品分类中心表:装载客户中心表:装载产品中心表:装载销售订单中心表:2015-12-11 17:29:041659
0
-
原创 Data Vault初探(八) —— 定期装载_Kettle_链接表
装载链接表作业:装载订单客户链接表:装载订单产品链接表:装载产品-产品分类链接表:2015-12-11 17:35:111391
0
-
原创 Data Vault初探(九) —— 定期装载_Kettle_附属表
装载附属表作业:装载客户附属表:装载订单_产品附属表:装载产品附属表:装载产品分类附属表:2015-12-11 17:51:031830
0
-
原创 维度模型数据仓库(十九) —— 维度合并
(五)进阶技术 14. 维度合并 随着数据仓库中维度的增加,会发现有些通用的数据存在于多个维度中。例如,客户维度的客户邮编相关信息、送货邮编相关信息和工厂维度里都有邮编、城市和州。本篇说明如何把三个维度里的邮编相关信息合并到一个新的邮编维度。 修改数据仓库模式 为了合并维度,需要改变数据仓库模式。图(五)- 14-1显示了修改后的模式。新增2015-11-20 22:01:172921
0
-
原创 维度模型数据仓库(十三) —— 退化维度
(五)进阶技术 8. 退化维度 本篇讨论一种称为退化维度的技术。该技术减少维度的数量,简化维度数据仓库的模式。简单的模式比复杂的更容易理解,也有更好的查询性能。当一个维度没有数据仓库需要的任何数据时就可以退化此维度。需要把退化维度的相关数据迁移到事实表中,然后删除退化的维度。 退化订单维度 本节说明如何退化订单维度,包括对2015-11-12 12:47:1214508
0
-
原创 维度模型数据仓库(二) —— 维度模型基础
(一)维度模型基础 既然维度模型是数据仓库建设中的一种数据建模方法,那不妨先看一下几种主流的数据仓库架构。 1. Kimball的DW/BI架构图(一)- 1 2. Inmon企业信息工厂架构图(一)- 2 3. 混合型架构图(一)- 3 从图中可以看出,每2015-10-31 08:00:087302
1
-
原创 维度模型数据仓库(六) —— 增加列
(五)进阶技术 1. 增加列 数据仓库最常碰到的扩展是给一个已经存在的维度表和事实表添加列。本篇先讨论如果需要增加列,模式会发生怎样的变化。然后进一步说明如何在客户维度和销售订单事实表上添加列,并在新列上应用SCD2。假设需要在客户维度中增加送货地址属性,并在销售订单事实表中增加数量度量值。 修改数据库模式 图(五)- 1-12015-11-04 21:24:303567
0
-
原创 维度模型数据仓库(七) —— 按需装载
(五)进阶技术 2. 按需装载 前面已经做了“初始装载”和“定期装载”。还有一种需要熟悉的装载类型,按需装载。所谓“按需装载”指的是,在正常调度之外,当源数据有效时或者数据仓库需要时进行装载。例如,促销销售源数据只有在促销期内有效,而在其它时间是无效的。 在“准备数据仓库模拟环境”中讨论的“生成日期维度数据”可以看做是一种按需装载。数据仓库2015-11-05 16:30:572246
0
-
原创 维度模型数据仓库(十) —— 快照
(五)进阶技术 5. 快照 前面实验说明了处理维度的扩展。本篇讨论两种事实表的扩展技术。 有些用户,尤其是管理者,经常会要看某个特定时间点的数据。也就是说,他们需要数据的快照。周期快照和累积快照是两种处理事实表扩展的技术。 周期快照是在一个给定的时间对事实表进行一段时期的总计。例如,一个月销售订单周期快照是每个月底时总的销售订2015-11-10 09:19:466888
0
-
原创 维度模型数据仓库(四) —— 初始装载
(三)初始装载 在数据仓库可以使用前,需要装载历史数据。这些历史数据是导入进数据仓库的第一个数据集合。首次装载被称为初始装载,一般是一次性工作。由最终用户来决定有多少历史数据进入数据仓库。例如,数据仓库使用的开始时间是2015年3月1日,而用户希望装载两年的历史数据,那么应该初始装载2013年3月1日到2015年2月28日之间的源数据。在2015年3月2日装载2015年3月1日的2015-11-01 14:44:166238
16
-
原创 维度模型数据仓库(十二) —— 多路径和参差不齐的层次
(五)进阶技术 7. 多路径和参差不齐的层次 本篇讨论多路径层次,它是对单路径层次的扩展。上一篇里数据仓库的月维度只有一条层次路径,即年-季度-月这条路径。在本篇中加一个新的级别,推广期,并且加一个新的年-推广期-月的层次路径。这时月维度将有两条层次路径,因此具有多路径层次。本篇讨论的另一个主题是不完全层次,这种层次在它的一个或多个级别上没有数据。2015-11-11 14:13:233348
3
-
原创 维度模型数据仓库(十五) —— 多重星型模式
(五)进阶技术 10. 多重星型模式 从(五)进阶技术1. “增加列”开始,已经通过增加列和表扩展了数据仓库,在(五)进阶技术5. “快照”里增加了第二个事实表,month_end_sales_order_fact表。这之后数据仓库模式就有了两个事实表(第一个是在开始建立数据仓库时创建的sales_order_fact表)。有了这两个事实表的数据仓库就是一个正2015-11-13 18:08:403672
0
-
原创 维度模型数据仓库(一) —— 概述
最近看了三本关于数据仓库的书,很有收获,也很受启发。这三本书分别是《数据仓库工具箱(第三版)》、《Dimensional Data Warehousing with MySQL: A Tutorial》和《Pentaho Kettle解决方案》。在仔细研读了这三本书之后,感觉就像是一本书的三个层次。Ralph Kimball的经典著作数据仓库工具箱阐述的是维度建模方法论和按不同行业建模的示例。Di2015-10-31 07:51:126574
6
-
原创 维度模型数据仓库(二十一) —— 分段维度
(五)进阶技术 16. 分段维度 本篇说明分段维度的实现技术。分段维度包含连续值的分段。例如,年度销售订单分段维度可能包含有叫做“低”、“中”、“高”的三档;各档定义分别为0.01到15000、15000.01到30000.00、30000.01到99999999.99。如果一个客户的年度销售订单金额为10000,则被归为“低”档。分段维度可以存储多个分段集2015-11-25 17:31:432420
0
-
原创 维度模型数据仓库(三) —— 准备数据仓库模拟环境
(二)准备数据仓库模拟环境 上一篇说了很多数据仓库和维度模型的理论,从本篇开始落地实操,用一个小而完整的示例说明维度模型及其相关的ETL技术。示例数据库和ETL的SQL实现是在《Dimensional Data Warehousing with MySQL: A Tutorial》基础上做了些修改,增加了Kettle实现的部分。本篇详细说明数据仓库模拟实验环境搭建过程。2015-10-31 08:20:525393
5
-
原创 维度模型数据仓库(五) —— 定期装载
(四)定期装载 初始装载只在开始数据仓库使用前执行一次,然而,必须要按时调度定期执行装载源数据的过程。本篇说明执行定期装载的步骤,包括识别源数据与装载类型、使用SQL和Kettle两种方法开发和测试定期装载过程。 从源抽取数据导入数据仓库有两种方式,可以从源把数据抓取出来(拉),也可以请求源把数据发送(推)到数据仓库。影响选择数据抽取方式的一个重要因素是源数2015-11-03 15:17:514079
4
-
原创 维度模型数据仓库(八) —— 维度子集
(五)进阶技术 3. 维度子集 有些需求不需要最细节的数据。例如更想要某个月而不是某天的记录。再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等。这些特定维度包含在从细节维度选择的行中,所以叫维度子集。维度子集比细节维度小,因此更易使用,查询也更快。 本篇中将准备两个特定维度,它们均取自现有的维度:月份维度(日期维度的子集),P2015-11-06 11:56:532773
0
-
原创 维度模型数据仓库(十八) —— 迟到的事实
(五)进阶技术 13. 迟到的事实 装载日期在生效日期后的事实就是迟到的事实。晚于订单日期进入源数据的销售订单可以看做是一个迟到事实的例子。销售订单被装载进其事实表时,装载的日期晚于销售订单的订单日期,因此是一个迟到的事实。(因为定期装载的是前一天的数据,所以这里的晚于指的是晚2天及其以上。) 迟到事实影响周期快照事实表的装载,如(五)进阶2015-11-19 10:09:582935
1
-
原创 维度模型数据仓库(九) —— 角色扮演维度
(五)进阶技术 4. 角色扮演维度 当一个事实表多次引用一个维度表时会用到角色扮演维度。例如,一个销售订单有一个是订单日期,还有一个交货日期,这时就需要引用日期维度表两次。 本篇将说明两类角色扮演维度的实现,分别是表别名和数据库视图。这两种都使用了MySQL的功能。表别名是在SQL语句里引用维度表多次,每次引用都赋予维度表一个别名。而数据库2015-11-08 15:02:503490
0
-
原创 维度模型数据仓库(十一) —— 维度层次
(五)进阶技术 6. 维度层次 大多数维度都具有一个或多个层次。例如,日期维度就有一个四级层次:年、季度、月和日。这些级别用date_dim表里的列来表示。日期维度是一个单路径层次,因为除了年-季度-月-日这条路径外,它没有任何其它层次。除此之外,本篇还将讨论在维度的层次上进行分组和钻取查询。多路径层次在下一篇“多路径和参差不齐的层次”中讨论。2015-11-10 17:50:437694
4
-
原创 维度模型数据仓库(十四) —— 杂项维度
(五)进阶技术 9. 杂项维度 本篇讨论杂项维度。简单地说,杂项维度就是一种包含的数据具有很少可能值的维度。例如销售订单,它可能有很多离散数据(yes-no这种类型的值),如verification_ind(如果订单已经被审核,值为yes)credit_check_flag(表示此订单的客户信用状态是否已经检查)new_customer_ind(如果这是2015-11-13 13:45:432966
0
-
原创 维度模型数据仓库(十六) —— 间接数据源
(五)进阶技术 11. 间接数据源 本篇讨论如何处理间接数据源。间接数据源与维度表具有不同的粒度,因此不能直接装载进数据仓库。在这里通过修改(五)进阶技术7. “多路径和参差不齐的层次”里的推广源数据说明怎样处理间接数据源。CAMPAIGN SESSION,MONTH,YEAR2014 First Campaign,1,20142014 First2015-11-16 13:48:581642
0
-
原创 维度模型数据仓库(十七) —— 无事实的事实表
(五)进阶技术 12. 无事实的事实表 本篇讨论一种技术,用来处理源数据中没有度量的需求。例如,产品源数据不包含产品数量信息,如果系统需要得到产品的数量,很显然不能简单地从数据仓库中直接得到。这时就要用到无事实的事实表技术。使用此技术可以通过持续跟踪产品的发布来计算产品的数量。可以创建一个只有产品(计什么数)和日期(什么时候计数)维度代理键的事实表。之所以叫做无2015-11-17 14:26:435610
1
-
原创 维度模型数据仓库(二十) —— 累积的度量
(五)进阶技术 15. 累积的度量 本篇说明如何实现累积月底金额,并对数据仓库模式和初始装载、定期装载脚本做相应地修改。累积度量是半可加的,而且它的初始装载比前面做的要复杂的多。 可加、半可加、不可加事实 事实表中的数字度量可划分为三类。最灵活、最有用的度量是完全可加的,可加性度量可以按照与事实表关联的任意维度汇总。半可加2015-11-24 16:03:422365
0
-
原创 Data Vault初探(十) —— 星型模型向Data Vault模型转化
源数据库模型(3NF)如下图:星型模型如下图:Data Vault模型如下图:说明:星型模型(star schema)的事实表采取了完全规范化的第三范式(3NF)模型,而维表采取了第二范式的设计模型。有时也会把维表的设计规范化,就成了所谓的雪花模型(snowflake schema)。星型模型向Data Vault模型转化:星型模趔的主要构成部分是维表与事实2015-12-15 15:07:497090
1
-
原创 MySQL Fabric实验(二)Sharding
一、概述 MySQL Fabric这一新的架构为MySQL提供了高可用和向外扩展的特性。本实验专注于使用Fabric对多个MySQL服务器进行读写实现向外扩展。当单个MySQL服务器(或HA组)的写性能达到极限时,可以使用Fabric把数据分布到多个MySQL服务器组。注意这里说的组可以是单一服务器,也可以是HA组。管理员通过建立一个分片映射定义数据如何在多个服务中分片。一个分片2015-12-31 14:03:561761
0
-
原创 MySQL Fabric实验(三)HA与Sharding
实验步骤:1. 安装虚拟机 使用VirtualBox安装四个CentOS release 6.4虚拟机,安装Python 2.6或以上版本,关闭iptables和selinux。虚拟机和网卡说明如下表所示。主机名内部网络IP说明fab_connector192.168.56.101安装2016-01-02 11:21:191933
0