1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括了 垂直拆分(Scale Up 纵向扩展)和 水平拆分(Scale Out 横向扩展) ,同时简要整理了水平分区的几种策略,现在来回顾一下. 2 水平分区的5种策略 2.1 Hash(哈希) 这种策略是通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区.例如我们可以建立一个对表的日期的年份进行分区的策略,这样每个年份都会被聚集在一个区间. 1 PARTITION BY HASH(YEA…
概述 提到MySQL的系统函数,我们前面有使用过聚合函数,其实只是其中一小部分.MySQL提供很多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,并更加灵活地满足不同用户的需求. 本文将MySQL的函数分类并汇总,以便提供后面使用中的参考. MySQL 数值类型函数 数值类型函数 说明 abs 返回绝对值 sqrt 返回二次方根 mod 返回余数 ceil/ceiling 两个函数功能一致,返回不小于参数的最小整数,即向上取整 floor 向下取整,返回值转化为b…
回顾一下上面几篇索引相关的文章: MySQL全面瓦解22:索引的介绍和原理分析 MySQL全面瓦解23:MySQL索引实现和使用 MySQL全面瓦解24:构建高性能索引(策略篇) 索引的十大原则 1.正确理解和计算索引字段的区分度,文中有计算规则,区分度高的索引,可以快速得定位数据,区分度太低,无法有效的利用索引,可能需要扫描大量数据页,和不使用索引没什么差别. 2.正确理解和计算前缀索引的字段长度,文中有判断规则,合适的长度要保证高的区分度和最恰当的索引存储容量,只有达到最佳状态,才是保证高效…
https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/ 我们自豪地宣布MySQL 8.0的一般可用性. 现在下载! MySQL 8.0是世界上最受欢迎的开源数据库中令人兴奋的新版本,并且全面改进.一些关键的增强功能包括: SQL 窗口函数,公用表表达式,NOWAIT和SKIP LOCKED,降序索引,分组,正则表达式,字符集,成本模型和直方图. JSON 扩展语法,新功能,改进的排序和部分更新.使用JSON表…
一.环境准备(关闭防火墙) 1.清除已安装数据库 [root@mysql01 ~]# rpm -qa | grep mariadb mariadb-libs-5.5.35-3.el7.x86_64 [root@mysql01 ~]# yum remove mariadb-libs-5.5.35-3.el7.x86_64   2.安装libaio-devel包 挂载光盘 配置yum仓库 [root@mysql01 yum.repos.d]# mount /dev/sr0 /mnt [root@my…
MySQL索引实现 上一篇我们详细了解了B+树的实现原理(传送门).我们知道,MySQL内部索引是由不同的引擎实现的,主要包含InnoDB和MyISAM这两种,并且这两种引擎中的索引都是使用b+树的结构来存储的. InnoDB引擎中的索引 Innodb中有2种索引:主键索引(也叫聚集索引).辅助索引(也叫非聚集索引). 主键索引:每个表只有一个主键索引,b+树结构,叶子节点存储主键的值以及对应整条记录的数据,非叶子节点不存储记录的数据,只存储主键的值. 当表中未指定主键时,MySQL内部会自动给…
学习如果构建高性能的索引之前,我们先来了解下之前的知识,以下两篇是基础原理,了解之后,对面后续索引构建的原则和优化方法会有更清晰的理解: MySQL全面瓦解22:索引的介绍和原理分析 MySQL全面瓦解23:MySQL索引实现和使用 我们编写索引的目的是什么?就是使我们的sql语句执行得更加高效,更快的获取或者处理数据,这个也是建设高性能Web的必要条件. 只有我们深刻理解了索引的原理和执行过程,才能知道怎么恰当地使用索引,以及怎么达到最优的查询. 知识回顾 innodb是MySQL默认的存储引…
概念 主从复制,是指建立一个和主数据库完全一样的数据库环境(称为从数据库),并将主库的操作行为进行复制的过程:将主数据库的DDL和DML的操作日志同步到从数据库上, 然后在从数据库上对这些日志进行重新执行,来保证从数据库和主数据库的数据的一致性. 为什么要做主从复制 1.在复杂的业务操作中,经常会有操作导致锁行甚至锁表的情况,如果读写不解耦,会很影响运行中的业务,使用主从复制,让主库负责写,从库负责读. 即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运行. 2.保证数据的热备份,主库宕…
利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JSON, `srvjson` JSON ) RETURNS json LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT 'UC的用户登录,返回JSON' BEGIN #调用例子 #,'email','tes…
前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spring+Mysql+Mybatis 的用户登录注册功能.最近被这件事搞得简直脑壳疼,网上的资料总是跟自己想要的有一些差距,或者说由于年代久远导致了版本的很多问题,所以我决定自己写一篇博客,如果说这篇博客能对其他人起到一点帮助,也是极好的.想要直接看代码的同志们直接看正片部分就好,前面我会先放一些资料.…
一.        分区的概念 二.        为什么使用分区?(优点) 三.        分区类型 四.        子分区 五.        对分区进行修改(增加.删除.分解.合并) 六.        不同引擎的分区特性 七.        分区的限制性 分区概念 分区针对不同的数据库,具有不同的特性.在这里专门针对MySQL数据库而言.在MySQL数据库里,分区这个概念是从mysql 5.1才开始提供的.不过目前只有在mysql advanced版本里才提供. 分区是把数据库.…
  用mysql实现类似于oracle dblink的功能 首先看看有没有federated 引擎. mysql> show engines; +------------+----------+----------------------------------------------------------------+ | Engine     | Support  | Comment                                                      …
Myeclipse 2017 的下载 Myeclipse 2017 下载地址:https://www.jianguoyun.com/p/DTEBo1cQ6LnsBxj9984C Myeclipse 2017 的安装 安装详细步骤,可以下载并参考这一张长图 https://www.jianguoyun.com/p/DfgN6VsQ6LnsBxiK-M4C 本图来源于微信公众号:设计软件教程免费下载,有兴趣的朋友可以关注一下 Myeclipse 2017 的激活 上面提到的高清长图包含激活步骤,下面…
mysql 5.7添加server_audit 安全审计功能 一.根据链接下载插件 参考链接下载  http://blog.itpub.net/31441024/viewspace-2213103 liunx执行 wget  https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.5.3/bintar-linux-x86_64/mariadb-10.5.3-linux-x86_64.tar.gz 二.根据链接执行命令  第1-5步 htt…
MySQL 数据库的tab补全功能                      跟着步骤走~~ 懒人养成第一步 不仅帮你补全 甚至预判你的预判,就问你可怕不可怕 1.安装相关依赖软件(需要配置yum官方或者阿里源进行安装) yum -y install epel-release yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-dev…
将运行中的大表修改为分区表 本文章代码仅限于以数据时间按月水平分区,其他需求可自行修改代码实现 1. 创建一张分区表 这张表的表字段和原表的字段一摸一样,附带分区 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE `metric_data_tmp`  (     id bigint primary key auto_increment,     metric varchar(128),     datadt datetime not null unqine,    …
SHOW PLUGINS; sql 可以查看partition的Status 是否是ACTIVE的 使用mydatetime 进行水平分区案例: CREATE TABLE test_users ( `id` INT (10) NOT NULL AUTO_INCREMENT, `mydatetime` datetime NOT NULL, `email` VARCHAR (255) NOT NULL, UNIQUE INDEX (`email`), PRIMARY KEY (`id`) ); --…
https://www.cnblogs.com/chuncn/archive/2009/02/20/1395165.html SQL Server 2005 的分区表(partition table)是复杂的,特别是对于初学者来说.不管怎样,我们还是掌握了分区函数(partition function),分区方案(partition scheme),最后终于创建了一个分区表出来.但之后呢,或许你想查看分区表的各个分区分区列的取值范围(这个分区的理论最小值和最大值),虽然可以通过分区函数中定义的边…
mysql中没有类似oracle和postgreSQL的 OVER(PARTITION BY)功能. 那么如何在MYSQL中搞定分组聚合的查询呢 先说结论: 利用 group_concat + substr等函数处理 例如: 订单表一张, 只保留关键字段 id user_id money create_time 1 1 50 1420520000 2 1 100 1420520010 3 2 100 1420520020 4 2 200 1420520030 业务: 查找每个用户的最近一笔消费金…
背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关,所以本文将针对这些新特性放一起进行说明,篇幅可能稍长,本文使用的MySQL版本是5.7.13. 1,多源复制(多主一从) MySQL在5.7之后才支持多源复制,之前介绍过MariaDB 多主一从 搭建测试说明,现在介绍如何在MySQL上做多主一从,具体的方法说明可以查看官方文档. 原理:多源复制加入…
背景: 之前介绍过 MySQL 5.5 新功能.参数,现在要用MySQL5.6,所以就学习和了解下MySQL5.6新的特性和功能,尽量避免踩坑.在后续的学习过程中文章也会不定时更新. 一:参数默认值的改变. Table Changes to Server Defaults in MySQL 5.6 Parameter Old Default New Default Version back_log 50 Autosized usingmax_connections 5.6.6 binlog_ch…
背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关,所以本文将针对这些新特性放一起进行说明,篇幅可能稍长,本文使用的MySQL版本是5.7.13. 1,多源复制(多主一从) MySQL在5.7之后才支持多源复制,之前介绍过MariaDB 多主一从 搭建测试说明,现在介绍如何在MySQL上做多主一从,具体的方法说明可以查看官方文档. 原理:多源复制加入…
概述 MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表.大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据. 了解MySQL连接查询之前我们先来理解下笛卡尔积的原理. 数据准备 依旧使用上节的表数据(包含classes 班级表和students 学生表): 1 mysql> select * from classes; 2 +---------+-----------+ 3 | classid | classn…
概述 大多数SQL语句都是针对一个或多个表的单条语句.但并非所有业务都这么简单,经常会有复杂的操作需要多条语句才能完成. 比如用户购买一个商品,要删减库存表,要生成订单数据,要保存支付信息等等,他是一个批量的语句执行行为. 存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合.可将其视为批文件,虽然它们的作用不仅限于批处理. 优点:提高代码的复用性:把一些通用操作内容封装到一个存储过程中,可以不断的给业务功能复用. 简化操作:避免在业务中写大量的代码 提高效率:减少执行次数和…
1 为什么要分库分表 物理服务机的CPU.内存.存储设备.连接数等资源有限,某个时段大量连接同时执行操作,会导致数据库在处理上遇到性能瓶颈.为了解决这个问题,行业先驱门充分发扬了分而治之的思想,对大库表进行分割, 然后实施更好的控制和管理,同时使用多台机器的CPU.内存.存储,提供更好的性能.而分治有两种实现方式:垂直拆分和水平拆分. 2 垂直拆分(Scale Up 纵向扩展) 垂直拆分分为垂直分库和垂直分表,主要按功能模块拆分,以解决各个库或者各个表之间的资源竞争.比如分为订单库.商品库.用户…
vim /etc/my.cnf [mysqld] slow-query-log = on # 开启慢查询功能 slow_query_log_file = /usr/local/mysql/data/slow-query.log # 慢查询日志存放路径与名称 long_query_time = 5 # 查询时间超过5s的查询语句 ### log-queries-not-using-indexes = on # 列出没有使用索引的查询语句…
目前社区版本的mysql的审计功能还是比较弱的,基于插件的审计目前存在于Mysql的企业版.Percona和MariaDB上,但是mysql社区版本有提供init-connect选项,基于此我们可以用它来完成审计功能. init-connect参数说明: http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_init_connect step1:创建用户数据库表 set names utf8 crea…
公司线上在用partition,有一个表的分区字段错了,需要重建,结果发现没有办法像修改主键字段或者修改索引字段那样直接一条sql搞定.而是需要建临时表,有down time,所以去仔细看了文档,研究下partition的细节问题. 自己公司线上采取的时候,凌晨1点业务低峰期,执行: 建立临时表 CREATE TABLE tbname_TMP (     SHARD_ID INT NOT NULL,     ... xxx_DATE DATETIME NOT NULL,     PRIMARY…
SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ',' + b FROM #tb WHERE a = t.a FOR xml path('')), 1, 1, '' )AS b from  # tb AS t GROUP BY a; 先对a列进行分组,对分组中的b以Xml形式输出,再使用stuff将开关多出的,删掉. 具体实现参考:http:/…
当前CPU都已是NUMA架构,相信除了历史遗留系统,很少会有数据库跑在SMP的CPU上了.NUMA架构带来的优势无言而语,CPU更快的内存访问速度,但是带来的问题也不言而喻,特别是对于数据库的影响.MySQL之前"臭名昭著"的swap问题就是因为NUMA架构导致.大部分同学已经知道应对技巧,即在启动文件中加入: numactl --interleave=all mysqld ... or numactl –cpunodebind=node –localalloc mysqld ...…