MySQL-配置文件
参考文献
MySQL是咋样运行的
MySQL获取配置信息路径
命令行参数 mysqld_safe --datadir=/data/sql_data
配置文件
确定配置的文件路径
12345678910-- 方法一root@2dd900ce424a:/# which mysqld/usr/sbin/mysqldroot@2dd900ce424a:/# /usr/sbin/mysqld --verbose --help |grep -A 1 'Default options'Default options are read from the following files in the given order:/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf-- 方法二[root@holelin ~]# mysql --help |grep my.cnf order of preference, my.cnf, $MYSQL_TCP_PORT,/etc/my.cnf /etc/mys ...
MySQL源码分析
参考文献
MySQL运维内参:MySQL Galera Inception核心原理与最佳实践
MySQL启动过程
入口函数在sql/main.cc文件中
123extern int mysqld_main(int argc, char **argv);int main(int argc, char **argv) { return mysqld_main(argc, argv); }
MySQL-各个版本的特性
MySQL各个版本的特性
MySQL 3.23
基本的SQL功能
ISAM和MyISAM存储引擎
BDB存储引擎
全文搜索
大文件支持
基本的权限管理
客户端/服务器通信协议
基本的查询优化与缓存
基本的表锁
窗口函数(部分)
MySQL 4.0
InnoDB存储引擎
ACID事务支持
行级锁定
外键约束
查询缓存
压缩协议
大文件支持(更大的文件尺寸)
多表更新与删除
子查询
高效的嵌套查询处理
MySQL 5.0
存储过程与函数
触发器
视图
游标
分区表
插件式存储引擎架构
INFORMATION_SCHEMA数据库
XA分布式事务
在线DDL
日志查询
MySQL 5.5
性能模式
信号处理
分区功能改进
InnoDB插件
语义表分析
语句摘要
度量单位转换
数字类型转换
新的字符集与排序规则
改进的查询优化器
MySQL 5.6
全文搜索改进
备份锁定
优化器跟踪
改进的InnoDB性能
多线程复制
MEMCACHED API支持
NoSQL接口
子查询优化
时间和日期函数改进
字符集和排序规则改进
MySQL 5.7
JSON数据类型
虚拟列
优化器提 ...
MySQL-Predicates in SQL
参考文献
Predicates in SQL
SQL谓词
谓词只是一个计算结果为TRUE、FALSE 或UNKNOWN的表达式.谓词通常用于WHERE和HAVING子句的搜索条件、FROM子句的连接条件以及需要布尔值的查询的任何其他部分.
谓词有多种类型,其中包括:
Comparison(比较谓词)
LIKE
BETWEEN
IN
EXISTS
IS NULL (/INTEGER/DECIMAL/FLOAT...)
Comparison Predicates 比较谓词
= Equal to
> Greater than
< Less than
>= Greater than or equal to
<= Less than or equal to
<> Not equal to
EXISTS
在EXISTS的子查询里SELECT子句的列表可以有三种写法
通配符: SELECT *
常量: SELECT '任意内容'
列名: SELECT col_name
谓词逻辑中,根据输入值的阶数对谓词进行分类.=或者BETWEEE ...
MySQL-常用SQL汇总
参考文献
MySQL按日期分组统计(按天统计,按月统计)
mysql查询今天、昨天、7天、近30天、本月、上一月 数据
SQL进阶教程–[日] MICK
Divided We Stand: The SQL of Relational Division
High Performance Relational Division in SQL Server
按日期分组统计
按月统计
1234567SELECT date_format( create_time, '%Y-%m' ) date, count(*) numFROM table_name GROUP BY date_format( create_time, '%Y-%m' );
按天统计
1234567SELECT date_format( create_time, '%Y-%m-%d' ) date, count(*) num FROM table_name GROUP BY date_format( create_time, '%Y-%m-%d ...
MySQL(二十三)-加锁分析实战
参考文献
解决死锁之路 - 常见 SQL 语句的加锁分析
何登成–管中窥豹——MySQL(InnoDB)死锁分析之道
MySQL · 引擎特性 · InnoDB隐式锁功能解析
Locks Set by Different SQL Statements in InnoDB
MySQL技术内幕 InnoDB存储引擎
27.12.13.1 The data_locks Table
MySQL InnoDB锁介绍及不同SQL语句分别加什么样的锁
一张图彻底搞懂 MySQL 的锁机制
mysql事务和锁 SELECT FOR UPDATE
MySQL锁总结
MySQL DELETE 删除语句加锁分析
加锁实战分析
对于唯一键值的锁定,Next-Key Lock降级为Record Lock仅存在于查询所有的唯一索引列.若唯一索引由多个列组成,而查询仅是查找多个唯一索引列中的其中一个,那么查询其实是range类型,而不是point类型,因此InnoDB存储引擎依然会使用Next-Key Lock进行锁定.
操作序号
SessionA
SessionB
1
begin;
2 ...
InnoDB(七)-锁
参考文献
MySQL技术内幕 InnoDB存储引擎
https://dev.mysql.com/doc/refman/8.0/en/show-engine.html
锁
lock与latch
latch一般称为闩锁(轻量级的锁),因为其要求锁定的时间必须非常短.若持续的时间长,则应用的性能会非常差.在InnoDB存储引擎中,latch又可以分为mutex(互斥量)和rwlock(读写锁).其目的是用来保证线程操作临界资源的正确性,并且通常没有死锁检测的机制.
lock的对象是事务,用来锁定的是数据库中的对象,如表,页,行.并且一般lock的对象仅在事务commit或rollback后进行释放(不同事务隔离级别释放的时间可能不同).lock在大多数数据库中一样,有死锁机制.
lock与latch不同点
lock
latch
对象
事务
线程
保护
数据库内容
内存数据结构
持续时间
整个事务过程
临界资源
模式
行锁,表锁,意向锁
读写锁,互斥量
死锁
通过waits-for graph,time out等机制进行死锁检测
无死锁检测与处理 ...
MySQL-File Page Type
参考文献
MySQL 源码
MySQL5.6 File Page Types
来源storage/innobase/include/fil0fil.h
File Page Type
十进制
16进制
含义
说明
FIL_PAGE_INDEX
17855
0x45BF
B-tree node
B+树叶节点
FIL_PAGE_UNDO_LOG
2
0x0002
Undo log page
Undo Log页
FIL_PAGE_INODE
3
0x0003
Index node
索引节点
FIL_PAGE_IBUF_FREE_LIST
4
0x0004
Insert buffer free list
Insert Buffer空闲列表
FIL_PAGE_TYPE_ALLOCATED
0
0x0000
Freshly allocated page
该页为最新分配
FIL_PAGE_IBUF_BITMAP
5
0x0005
Insert buffer bitmap
Insert Buffer位图
FIL_PAGE_TYPE_SYS
6
0x0006
...
InnoDB(五)-InnoDB表
参考文献
MySQL技术内幕 InnoDB存储引擎
极客时间–SQL必知必会(陈旸)
索引组织表
在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显示地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键:
首先判断表中是否有非空的唯一索引(Unique Not Null),如果有,则该列即为主键.
如果不符合上述条件,InnoDB存储引擎会自动创建一个6字节大小的指针.
当表中有多个非空唯一索引,InnoDB存储引擎将选择建表时第一个定义的非空唯一索引为主键.需要特别注意的是,主键的选择根据的是定义索引的顺序,而不是建表是列的顺序.
123456789create table z( a int not null, b int null, c int not null, d int not null, unique key (b), unique key (d), unique key (c ...
InnoDB(四)-InnoDB文件
参考文献
MySQL技术内幕 InnoDB存储引擎
参数文件
当MySQL实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.
可以通过命令SHOW VARIABLES来查看数据中的所有参数,也可以通过LIKE来过滤参数名.从MySQL5.1版本开始,可以通过performance_schema架构下的GLOBAL_VARIABLES视图来进行查找.
12345678910111213141516171819202122232425262728293031323334mysql> select * from global_variables where variable_name like 'innodb_buffer%';+-------------------------------------+----------------+| VARIABLE_NAME | VARIABLE_VALUE |+-------- ...