MySQL-Security
参考文献
MySQL 8 Cookbook
使用mysql_config_editor进行无密码认证
1234567891011121314151617181920212223242526272829mysql_config_editor --helpmysql_config_editor Ver 1.0 Distrib 5.7.24, for osx11.1 on x86_64Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.MySQL Configuration Utility.Usage: mysql_config_editor [program options] [command [command options ...
MySQL-redo log
参考文献
千金良方: MySQL性能优化金字塔法则
redo log
redo log用来实现事务的持久性,即事务ACID的D.其由两部分组成:
一是内存中的重做日志缓冲(redo log buffer),其是易失的
二是重做日志文件(redo log file),其是持久的.
InnoDB是事务的存储引擎,其通过Force Log at Commit机制实现事务的持久性,即当事务提交(COMMIT)时,必须先将事务的所有日志写入到重做日志文件进行持久化,待事务的COMMIT操作完成才算完成.
redo log基本上都是顺序写的,在数据库运行时不需要对redo log的文件进行读取操作,而undo log是需要进行随机读写的.
WAL(Write-Ahead Logging),它的关键点就是先写日志,再写磁盘.
当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新算完成了.同时,InnoDB引擎会在合适的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做.
InnoDB的red ...
MySQL-sys
参考文献
千金良方: MySQL性能优化金字塔法则
sys系统库使用基础环境
因为sys系统库提供了一些代替直接访问performance_schema的视图,所以必须启用performance_schema(将performance_schema系统参数设置为ON),sys系统库的大部分功能才能正常使用
要完全访问sys系统库,用户必须具有以下权限.
对所有sys表和视图具有SELECT权限.
对所有sys存储过程和函数具有EXECUTE权限.
对sys_config表具有INSERT、UPDATE权限.
对某些特定的sys系统库存储过程和函数需要额外权限,如ps_setup_save()存储过程,需要与临时表相关的权限.
还要有与被sys系统库执行访问的对象相关的权限.
任何被sys系统库访问的performance_schema表都需要有SELECT权限,如果要使用sys系统库对performance_schema相关表执行更新,则需要有performance_schema相关表的UPDATE权限.
INFORMATION_SCHEMA.INNODB_BUF ...
MySQL-performance_schema
参考文献
千金良方: MySQL性能优化金字塔法则
performance_schema
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117mysql> show tables ;+------------------------------------------------------+| Tables_in_performance_schema |+------------------------------------------------------+| accounts ...
MySQL-Window Functions
参考文献
14.20 Window Functions
Window Functions
语法
123456789101112131415161718192021222324252627282930313233over_clause: {OVER (window_spec) | OVER window_name} window_spec: [window_name] [partition_clause] [order_clause] [frame_clause] partition_clause: PARTITION BY expr [, expr] ... order_clause: ORDER BY expr [ASC|DESC] [, expr [ASC|DESC]] ...frame_clause: frame_units frame_extentframe_units: {ROWS | RANGE} frame_extent: {frame_start | ...
MySQL Tools-Percona Toolkit
参考文献
千金良方: MySQL性能优化金字塔法则
https://docs.percona.com/percona-toolkit/installation.html
Percona Toolkit
pt-query-digest
使用pt-query-digest工具可以通过慢查询日志、普通查询日志、binlog对MySQL中的查询语句进行分析,也可以通过SHOW PROCESSLIST语句输出信息,以及tcpdump 抓取的MySQL协议数据对MySQL中的查询语句进行分析.
解析慢查询日志
1# pt-query-digest 54be3b45aab9-slow.log > slow-report.log
MySQL-JOIN优化
参考文献
MySQL技术内幕 SQL编程 姜承尧
JOIN算法
当联接的表上有索引,Nestd-Loops Join是非常高效的算法.根据B+树的特性,其联接的时间复杂度为O(N)O(N)O(N),若没有索引,则可视为最坏的情况,时间复杂度为O(N2)O(N^2)O(N2)
在选择JOIN算法时,会有优先级,理论上会优先判断能否使用INLJ、BNLJ(MySQL内部优化后,基本上不会出现Simple Nested-Loop Join):
Index Nested-LoopJoin > Block Nested-Loop Join > Simple Nested-Loop Join
Simple Nested-Loop Join(笛卡尔积)
最简单的JOIN算法及外循环读取一行数据,根据关联条件列到内循环中匹配关联,在这种算法中,我们通常称外循环表为驱动表,称内循环表为被驱动表
简单嵌套循环连接实际上就是简单粗暴的嵌套循环,如果table1有NNN万条数据,table2有MMM万条数据,那么数据比较的次数=N∗MN*MN∗M,这种查询效率会非常慢 ...
MySQL-排序优化
参考文献
Order By实现原理
利用有序索引获取有序数据
在使用explain分析查询的时候,利用有序索引获取有序数据显示Using index
文件排序
在使用explain分析查询的时候,利用有序索引获取有序数据显示Using filesort
文件排序算法
回表排序模式:是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行指针信息,然后在sort buffer中进行排序.
不回表排序模式:是一次性取出满足条件行的所有字段,然后在sort buffer中进行排序.
MySQL主要通过比较我们所设定的系统参数max_length_for_sort_data的大小和Query语句所取出的字段类型大小总和来判定需要使用哪一种排序算法.
如果max_length_for_sort_data更大,则使用第二种优化后的算法,反之使用第一种算法.
所以如果希望ORDER BY操作的效率尽可能的高,一定要注意max_length_for_sort_data 数的设置
12345678mysql> show variables like ...
MySQL-Source-Select
参考文献
MySQL 简单查询语句执行过程分析(一)词法分析 & 语法分析
词法分析&语法分析过程
初始化字段
对于select子句中的每个字段,都会创建一个Item_field类(或子类)的实例。
12345678910111213// sql/item.hclass Item_field : public Item_ident { typedef Item_ident super; private: Field *result_field{nullptr}; Field *last_org_destination_field{nullptr}; Field *last_destination_field{nullptr}; uint32_t last_org_destination_field_memcpyable = ~0U; uint32_t last_destination_field_memcpyable = ~0U; const Item_field *m_base ...
MySQL-变量
参考文献
MySQL是咋样运行的
系统变量
通过启动选项设置
大部分系统变量都可以通过启动服务器时设置启动选项来设置.
1mysqld --default-storage-engine=MyISAM --max-connections=10
通过配置文件添加启动项
123[server]default-storage-engine=MyISAMmax-connections=10
服务器程序运行过程中设置
MySQL支持两种形式的变量:SESSION以及GLOBAL
GLOBAL(全局范围): 影像服务器的整体操作.具有GLOBAL作用范围的系统变量可以称为全面变量.
SESSION(会话范围): 影像某个客户端连接的操作.具有SESSION作用范围的系统变量可以称为会话变量.
1234SET [GLOBAL|SESSION] 系统变量名 = 值# 或者SET [@@(GLOBAL|SESSION).]系统变量名 = 值
变量值还原为默认值:set [session] var_name = DEFAULT
查看不同作用范围的系统变量
1SHOW [G ...