Mysql数据结构精讲
MySQL数据类型精讲1. MySQL中的数据类型
类型
类型举例
整数类型
TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
浮点类型
FLOAT、DOUBLE
定点数类型
DECIMAL
位类型
BIT
日期时间类型
YEAR、TIME、DATE、DATETIME、TIMESTAMP
文本字符串类型
CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
枚举类型
ENUM
集合类型
SET
二进制字符串类型
BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
JSON类型
JSON对象、JSON数组
空间数据类型
单值类型:GEOMETRY、POINT、LINESTRING、POLYGON;
集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION |
常见数据类型的属性,如下:
MySQL关键字
含义
...
MySQL高级-日志常用的工具等等
MySql中常用工具mysql该mysql不是指mysql服务,而是指mysql的客户端工具。
语法 :
mysql [options] [database]
连接选项参数 :
-u, --user=name 指定用户名
-p, --password[=name] 指定密码
-h, --host=name 指定服务器IP或域名
-P, --port=# 指定连接端口
示例 :
mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -h127.0.0.1 -P3306 -uroot -p2143
执行选项-e, --execute=name 执行SQL语句并退出
此选项可以在Mysql客户端执行SQL语句,而不用连接到MySQL数据库再执行,对于一些批处理脚本,这种方式尤其方便。
示例:
mysql -uroot -p2143 db01 -e "select * from tb_book";
mysqladminmysqladmin 是一个执行管理操作的客户端程序。可以用它来检查服务器的配置和当前状态、创建并删除 ...
Mysql高级——优化
Mysql高级应用优化使用连接池对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源的,我们有必要建立 数据库连接池,以提高访问的性能。
减少对MySQL的访问避免对数据进行重复检索在编写应用代码时,需要能够理清对数据库的访问逻辑。能够一次连接就获取到结果的,就不用两次连接,这样可以大大减少对数据库无用的重复请求。
比如 ,需要获取书籍的id 和name字段 , 则查询如下:
select id , name from tb_book;
之后,在业务逻辑中有需要获取到书籍状态信息, 则查询如下:
select id , status from tb_book;
这样,就需要向数据库提交两次请求,数据库就要做两次查询操作。其实完全可以用一条SQL语句得到想要的结果。
select id, name , status from tb_book;
增加cache层在应用中,我们可以在应用中增加 缓存 层来达到减轻数据库负担的目的。缓存层有很多种,也有很多实现方式,只要能达到降低数据库的负担又能满足应用需求就可以。
因此可以部分数据从数据库中抽取出来放到 ...
MySQL性能优化
数据库优化维度有四个:
硬件升级、系统配置、表结构设计、SQL语句及索引。
优化选择:
优化成本:硬件升级>系统配置>表结构设计>SQL语句及索引。
优化效果:硬件升级<系统配置<表结构设计<SQL语句及索引。
系统配置优化保证从内存中读取数据MySQL会在内存中保存一定的数据,通过LRU算法将不常访问的数据保存在硬盘文件中。尽可能的扩大内存中的数据量,将数据保存在内存中,从内存中读取数据,可以提升MySQL性能。扩大innodb_buffer_pool_size,能够全然从内存中读取数据。最大限度降低磁盘操作。确定innodb_buffer_pool_size 足够大的方法:
mysql> show global status like 'innodb_buffer_pool_pages_%';
+----------------------------------+-------+
| Variable_name | Value |
+----------------------------------+-------+
| In ...
MySQL-运维和第三方工具
工具介绍YearningYearning简介Yearning 开源的MySQL SQL语句审核平台,提供数据库字典查询,查询审计,SQL审核等多种功能。Yearning 1.x 版本需Inception提供SQL审核及回滚功能。
Inception是集审核,执行,回滚于一体的自动化运维系统,它是根据MySQL代码修改过来的,工作模式和MySQL相同。Yearning是基于python实现的Web版人机交互界面。
Yearning 2.0 版本开始无需Inception,已自己实现了SQL审核及回滚功能。Yearning1.0 python版本已不再进行官方维护。Yearning2.0 golang版本为后续维护项目。
如仍使用python版本Yearning须知:Yearning python版本不会闭源,仍可基于AGPL3.0许可进行二次开发。由于inception已闭源失去后续支持,python版本将失去对审核规则及审核逻辑的维护。(此问题即使Yearning项目也无法解决。go版本已实现相关审核逻辑,由Yearning自己维护,保证后续维护的可控性。)已知python版本含有多个 ...
Mycat-学习总结
Mycat 简介Mycat 是一个实现了 MySQL 协议的 Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议或JDBC 协议与多个 MySQL 服务器通信,其核心功能是分库分表和读写分离,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。
对于 DBA 来说,可以这么理解 Mycat Mycat 就是 MySQL Server,但是Mycat 本身并不存储数据,数据是在后端的 MySQL 上存储的, 因此数据可靠性以及事务等都是 MySQL 保证的。简单的说,Mycat 就是 MySQL 最佳伴侣。
对于软件工程师来说,可以这么理解 Mycat Mycat 就是一个近似等于 MySQL 的数据库服务器,你可以用连接 MySQL 的方式去连接 Mycat(除了端 口不同,默认的 Mycat 端口是 8066 而非 MySQL 的 3306,因此需要在连接字符 串上增加端口信息),大多数 情况下,可以用你熟悉的对象映射框架使用 Mycat,但建议对于分 片表 ...
分库分表以及ShardingSphere实战
前言 实战背景介绍背景描述
刚开始我们的系统只用了单机数据库
随着用户的不断增多,考虑到系统的高可用和越来越多的用户请求,我们开始使用数据库主从架构
当用户量级和业务进一步提升后,写请求越来越多,这时我们开始使用了分库分表
遇到的问题
用户请求量太大 单服务器TPS、内存、IO都是有上限的,需要将请求打散分布到多个服务器
单库数据量太大 单个数据库处理能力有限;单库所在服务器的磁盘空间有限;单库上的操作IO有瓶颈
单表数据量太大 查询、插入、更新操作都会变慢,在加字段、加索引、机器迁移都会产生高负载,影响服务
如何解决
垂直拆分
垂直分库 微服务架构时,业务切割得足够独立,数据也会按照业务切分,保证业务数据隔离,大大提 升了数据库的吞吐能力
垂直分表 表中字段太多且包含大字段的时候,在查询时对数据库的IO、内存会受到影响,同时更新数 据时,产生的binlog文件会很大,MySQL在主从同步时也会有延迟的风险
水平拆分
水平分表 针对数据量巨大的单张表(比如订单表),按照规则把一张表的数据切分到多张表里面去。 但是这些表还是在同一个库中 ...
MySQL-基础
数据库的基本概念
数据库的英文单词: DataBase 简称 : DB
什么数据库?
用于存储和管理数据的仓库。
数据库的特点:
持久化存储数据的。(其实数据库就是一个文件系统)
方便存储和管理数据
使用了统一的方式操作数据库 — SQL语句
常见的数据库软件
1、Oracle 70年代 一间名为Ampex的软件公司,正为中央情报局设计一套名叫Oracle的数据库,Ellison是程序员之一。Oracle是世界领先的信息管理软件开发商,因其复杂的关系数据库产品而闻名。Oracle数据库产品为财富排行榜上的前1000家公司所采用,许多大型网站、银行、证券、电信等都选用了Oracle系统。
2、SQL Server SQLServer(Structured Query Language Server) 是一个关系型数据库管理系统(DBMS)。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个版本。
在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上 ...
Mysql-[索引][视图][触发器][函数][存储过程]
Linux 系统安装MySQL下载Linux 安装包https://dev.mysql.com/downloads/mysql/5.7.html#downloads
安装MySQL1). 卸载 centos 中预安装的 mysql
rpm -qa | grep -i mysql
rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps
2). 上传 mysql 的安装包
alt + p -------> put E:/test/MySQL-5.6.22-1.el6.i686.rpm-bundle.tar
3). 解压 mysql 的安装包
mkdir mysql
tar -xvf MySQL-5.6.22-1.el6.i686.rpm-bundle.tar -C /root/mysql
4). 安装依赖包
yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6 libncurses.so.5 --setopt=protected_mul ...
MySQL事务和锁
ACID 特性在关系型数据库管理系统中,一个逻辑工作单元要成为事务,必须满足这 4 个特性,即所谓的 ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
原子性原子性:事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。修改—-》Buffer Pool修改—-》刷盘。可能会有下面两种情况:
事务提交了,如果此时Buffer Pool的脏页没有刷盘,如何保证修改的数据生效? Redo
如果事务没提交,但是Buffer Pool的脏页刷盘了,如何保证不该存在的数据撤销?Undo
每一个写事务,都会修改BufferPool,从而产生相应的Redo/Undo日志,在Buffer Pool 中的页被刷到磁盘之前,这些日志信息都会先写入到日志文件中,如果 Buffer Pool 中的脏页没有刷成功,此时数据库挂了,那在数据库再次启动之后,可以通过 Redo 日志将其恢复出来,以保证脏页写的数据不会丢失。如果脏页刷新成功,此时数据库挂了,就需要通过Undo来实现了。
持久性持久性:指的是 ...
MySQL索引原理
索引类型索引可以提升查询速度,会影响where查询,以及order by排序。MySQL索引类型如下:
从索引存储结构划分:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引
从应用层次划分:普通索引、唯一索引、主键索引、复合索引
从索引键值类型划分:主键索引、辅助索引(二级索引)
从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)
普通索引这是最基本的索引类型,基于普通字段建立的索引,没有任何限制。
创建普通索引的方法如下:
CREATE INDEX <索引的名字> ON tablename (字段名);
ALTER TABLE tablename ADD INDEX [索引的名字] (字段名);
CREATE TABLE tablename ( […], INDEX [索引的名字] (字段名) );
唯一索引与”普通索引”类似,不同的就是:索引字段的值必须唯一,但允许有空值 。在创建或修改表时追加唯一约束,就会自动创建对应的唯一索引。
创建唯一索引的方法如下:
CREATE UNIQUE I ...
MySQL架构原理
MySQL体系架构
MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。
网络连接层客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。目前几乎支持所有主流的服务端编程技术,例如常见的 Java、C、Python、.NET等,它们通过各自API技术与MySQL建立连接。
服务层(MySQL Server)服务层是MySQL Server的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器缓存六个部分。
连接池(Connection Pool):负责存储和管理客户端与数据库的连接,一个线程负责管理一个 连接。
系统管理和控制工具(Management Services & Utilities):例如备份恢复、安全管理、集群 管理等
SQL接口(SQL Interface):用于接受客户端发送的各种SQL命令,并且返回用户需要查询的结 果。比如DML、DDL、存储过程、视图、触发器等。
解析器(Parser):负责将请求的SQL解析生成一个”解析树”。然后根据一些MySQL ...