SlideShare a Scribd company logo
1 of 46
MySQL
目录
 应用开发
 优化
 架构
应用开发
 SQL 关键字
 数据读取(备份)
 过程、函数、事件、视图、触发器
 用户权限
 加密技术
 SQL 注入
 监控
 管理维护
SQL 关键字
   SELECT/FROM/JOIN/WHERE
   GROUP BY/HAVING/ORDER BY/LIMIT

   表达式
    SELECT uid,(SELECT max(player_level)
    FROM levelup WHERE levelup.uid =
    player.uid AND levelup.t_when <=
    player.t_when) AS level FROM player

   In/exists
数据读取
       逻辑
       Mysqldump
       select ... into outfile
       mysql < backup.sql
       load data infile
       mysql import


       物理
       MyISAM : hotcopy
       InnoDB : ibbackup
用户
       建立用户
       create user ‘huangk’@‘localhost’ identified by
        ‘root’;
       drop user huangk;

       用户信息
       rename ‘huangk’@‘localhost’ to
        ‘huangk’@‘192.***.***.***’
       update user set
        password=PASSWORD(‘select’) where
        user=‘huangk’
权限
   查看权限
    show privileges;
    show grants for usename@hostname;

   授予权限
    grant privileges(all: 所有权限 usage :没有权限 )
    on dbname.tablename
    to username@hostname
    with grant option
权限
   更新权限
    flush privileges;
    执行后,对访问权限做出的改变才会生效

   回收权限
    revoke privileges
    on dbname.tablename
    from username@hostname
数据表维护
   修复 MyISAM 文件
    myisamchk [options] tablename1

   压缩 MyISAM 文件
    myisampack [options] tablename1

   查看信息
    mysqlshow

   服务器管理
    mysqladmin
数据表维护
   检查或维护 MyISAM 表
    CHECK TABLE
    REPAIR TABLE

   优化 MyISAM 表
    OPTIMIZE TABLE

   分析 MyISAM 表
    ANALYZE TABLE
移动数据库目录
   把 MySQL 服务进程停掉
    mysqladmin -uroot -proot shutdown

   移动目录
    mv -r /var/lib/mysql /home/mysql

   编辑 MySQL 的配置文
    件 /etc/mysql/my.cnf
    [mysqld]
    socket = /home/mysql/mysqld.sock
    datadir = /home/mysql
    log_bin = /home/mysql/mysqlbin.log
移动数据库目录
   移动数据目录后 , 权限发生变化,需要设
    置 mysql 组用户具有权限
    chown -R mysql:mysql /home/mysql
    chmod mysql+x /home/mysql

   重新启动 MySQL 服务
    /etc/init.d/mysql start
优化
 目标
 系统设计
 参数配置
 SQL 语句
目标
 减少 I/O ,磁盘 I/O 转到内存 I/O
 降低 CPU 运算
 优先优化高并发的 SQL
 EXPLAIN
 SET PROFILING=1
 SHOW PROFILE
系统设计
 表结构(横表 or 竖表)
 数据类型
 数据编码
 引擎(物理文件)
 索引
 锁
 日志文件
 Replication 文件
 参数文件
表结构
 竖表容易扩展内容,但不够直观
 竖表对字段的不同内容,无法设置权限(数
据库权限粒度最小到字段)

 横表使结构一目了然。
 横表扩展起来要修改表数据结构,亚历山大
表结构
 适度冗余
 表保留玩家帐号、等级、流派等分析常用的维度
 大字段垂直分拆或整合
 用 blob 类型保存玩家的 profile ,有数据需求时再
 提取出来做深入的分析
 大表水平分拆
 任务
 物品变化
 统计汇总表
 银两产出
数据类型
 数字类型
  DOUBLE 、 DECIMAL 慎用
  unsigned TINYINT/INT/BIGINT

 字符类型
  char
  varchar: 长度不同, MySQL 不同的存储处理
  text

 LOB 类型
  保留许多不常用的字段信息
数据类型
 时间类型
  TIMESTAMP 类型,其存储空间只需要 DATETIME 类型
   的一半。
  DATE 类型,存储空间只需要 3 个字节,比 TIMESTAMP
   还少。
  INT 类型类存储一个 unix timestamp 的值,不直观,
   会给维护带来不必要的麻烦

 ENUM & SET
    使用 ENUM 来存放状态字段,即使需要增加新的
     类型,只要增加于末尾,修改结构也不需要重
     建表数据。
    使用 SET 类型存放可预先定义的属性数据。
数据编码
 不同的字符集 -> 不同的存储空间 ->I/O


 UTF8 或 UNICODE 字符


 规范对象命名
   sql 语句的所有表名、字段名全部小写,系统保留字、内置函数名
    、 sql 保留字大写
   Select/From/Where/Order by/Group by/limit 等子句必须另
    其一行写
   在 T-SQL 代码中为字符常量使用单引号 , 避免使用双引号
引擎
 MyISAM
 InnoDB
MyISAM 引擎
 索引缓存优化
 key_buffer_size :索引缓存大小
 key_buffer_block_size :
 key_cache_division_limit :
 key_cache_age_threshold :

 多 key cache
 key cache 的 Mutex
 key cache 预加载

 表读取索引优化
 read_buffer_size :顺序读数据
 read_md_buffer_size :随机读数据
InnoDB 引擎
 索引缓存
  Innodb_buffer_pool_*
  Innodb_log_buffer_size

 事务优化
  innodb_flush_log_at_trx_commit

 数据存储
InnoDB 引擎
 两次写 double write
  skip_innodb_doublewrite: 禁止两次写功能,
  可能发生写失效问题

 插入缓冲 insert buffer

 自适应哈希索引
  自动根据访问的频率和模式来为某些页建立哈希
  索引
  innodb_adaptive_hash_index: 禁用或启动此
  特性
InnoDB 引擎
 表空间
    每张表都有个主键。如果不指定,如果表中有
  非空的唯一索引,则该列为主键,否则自动创建
  一个 6 字节大小的指针。
    每个表单独一个表空间,存放的只是数据、索
  引、插入缓冲信息;撤销信息、系统事务信息、
  二次写缓冲还是存放在原来的共享表空间内。

 段
  数据段
  索引段
InnoDB 引擎
       页
       数据页 B-tree Node
       Undo 页 Undo Log Page
       系统页 System Page
       事务数据页 Transaction system Page
       插入缓冲位图页 Insert Buffer Bitmap
       插入缓冲空闲列表页 Insert Buffer Free List
       未压缩的二进制大对象页 Uncompressed BLOB
        Page
       压缩的二进制大对象页 Compressed BLOB Page
            
InnoDB 引擎
   行记录格式
    Compact 行记录格式
    Redundant 行记录格式
    行溢出数据
    Compressed 行记录格式
    Dynamic 行记录格式
事务
 脏读 ( 事务没提交,提前读取 ) :脏读就是指当一个事务正在
 访问数据,并且对数据进行了修改,而这种修改还没有提交到
 数据库中,这时,另外一个事务也访问这个数据,然后使用了
 这个数据。

 不可重复读 ( 两次读的不一致 ) :是指在一个事务内,多次读
 同一数据。在这个事务还没有结束时,另外一个事务也访问该
 同一数据。那么,在第一个事务中的两次读数据之间,由于第
 二个事务的修改,那么第一个事务两次读到的的数据可能是不
 一样的。这样就发生了在一个事务内两次读到的数据是不一样
 的,因此称为是不可重复读。

 幻读:是指当事务不是独立执行时发生的一种现象,例如第一
 个事务对一个表中的数据进行了修改,这种修改涉及到表中的
 全部数据行。同时,第二个事务也修改这个表中的数据,这种
 修改是向表中插入一行新数据。那么,以后就会发生操作第一
 个事务的用户发现表中还有没有修改的数据行,就好象发生了
 幻觉一样。
事务
 read uncommitted
 read committed
 prpeatable read
 serializable
索引
 B-Tree 索引
 Hash 索引
 Full-Text 索引
    将字段数据进行分割后再进行索引
 R-Tree 索引
锁
 行级锁定( row-level )
  InnoDB
  NEXT-KEY LOCKING 间隙锁的锁实现方式,会锁定
    不存在的键值

 表级锁定( table-level )
  MyISAM
  Table_locks_% 表级锁定参数

 页级锁定( page-level )
  Innodb_row_lock_% 行级锁定参数
锁
 缩短锁定时间,减少锁定的资源量
 复杂的 query 拆成几个小 query 进行
 尽量控制事务大小

 提高并发度
 concurrent_insert


 读写优先级设置
 low_priority_updates
日志文件
 错误日志 Error log
  show variables like 'log_error‘

 查询日志 query log
  5.1 后 mysql.general_log 表中
日志文件
 二进制日志 binary log
 所有修改数据库数据的 QUERY 语句,事务安全
 mysqlbinlog 工具
 默认二进制日志不启动。开启这个选项可能有性
 能下降
 sync_binlog: 磁盘同步间隔事务数
 binlog_cache_size: 事务过程中二进制日志
 SQL 语句的缓存大小
 max_binlog_cache_size:binlog 使用的最大
 cache 内存大小
日志文件
 二进制日志 binary log
 binlog_format:statement 、 row 、 mixed
 binlog_do_db
 binlog_ignore_db
 binlog_cache_use: 记录用缓冲写二进制日志次
 数
 binlog_cache_disk_use: 记录用临时文件写二
 进制次数,判断 binlog_cache_size 设置是否合
 理
日志文件
 慢查询日志 slow query log
  mysqlslowdump 慢查询日志工具
  log_queries_not_using_indexes:on/off
  long_query_time :记录执行时间超过多长的
  query
  log_slow_queries:on/off
  5.1 后 存放在 mysql.slow_log 表中

 InnoDB 的在线 REDO 日志 InnoDB REDO log
  innodb_log_file_size
  innodb_log_files_in_group
  innodb_mirrored_log_groups
  innodb_log_group_home_dir
参数配置
   Cache
   buffer
   memory
   IO
   swap
   cpu
   connection
   thread
   query cache
   table cache
query cache
 Hash 运算及查找资源消耗
 Query cache 失效问题
 缓存 Result Set :一条记录可能多次缓存


 have_query_cache
 Query_cache* :参数变量


 Qcache* : query cache 的使用情况
connection
 max_connections: 最大连接数
 max_user_connnections :每个用户允许的最大连
  接数
 net_buffer_length: 网络传输效率
 max_allowed_packet: 一次消息传输量的最大值
 back_log: 等待队列中允许存放的最大连接请求数

 连接池
 thread_cache_size :应该存放的连接线程数
 thread_stack :每个连接线程被分配的内存大小
query
 table cache :文件描述符
 sort_buffer_size :排序时使用的 buffer
 join_buffer_size :
SQL 语句
 只 select 需要的数据字段,减少网络和内存
  数据传输量
 避免在条件中对索引做函数转换
 避免使用不等于条件
 like 操作以通配符 ( 如’ %data’) 开始,无法
  使用索引
SQL 语句
 Join
  Nested loop join :通过驱动表的结果集作为循环
  基础数据,然后将结果集中的数据作为过滤条件一
  条条地到下一个表中查询数据,最后合并结果

 order by
  索引排序
  排序算法
     取出排序字段以及相应行指针
     取出排序字段以及所有字段
     max_lenght_for_sort_data :决定算法问题
     sort_buffer_size :减少数据分段、减少临时
  表交换排序
SQL 语句
 Group by
  1 、松散索引
     group by 条件字段位于同一个索引最前面位
  置
     只能用 max 和 min 两个聚合函数
  2 、紧凑索引
  3 、临时表

 Distinct
  与 group by 操作非常相似, group by 之后每
  组中取出一条记录而已
  distinct 并不需要排序
SQL 语句
 Union
  尽量 union all 而不去重

 Limit
  join 表之前可以过滤数据量

 Count
  count(*) 优于 count(1)
  count(column) 是表示结果集中有多少个
  column 字段不为空的记录; count(*) 是表示整
  个结果集有多少条记录
架构
 分层
 分表
 复制
 集群
 Cache 与 search
参考文献
 《MySQL性能调优与架构设计》

More Related Content

What's hot

深入学习Mongo db
深入学习Mongo db深入学习Mongo db
深入学习Mongo dbLucien Li
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,DbaCevin Cheung
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)frogd
 
Sql基础培训
Sql基础培训Sql基础培训
Sql基础培训Ji ZHANG
 
数据库内核分享——第一期
数据库内核分享——第一期数据库内核分享——第一期
数据库内核分享——第一期frogd
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010Chuanying Du
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹國昭 張
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现iammutex
 
110412 kningsoft-mongo db-intro-usage-in-mercury
110412 kningsoft-mongo db-intro-usage-in-mercury110412 kningsoft-mongo db-intro-usage-in-mercury
110412 kningsoft-mongo db-intro-usage-in-mercuryZoom Quiet
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析frogd
 
Ocean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in chinaOcean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in chinaknuthocean
 
InnoDB引擎数据表压缩特性测试 - 20120329
InnoDB引擎数据表压缩特性测试 - 20120329InnoDB引擎数据表压缩特性测试 - 20120329
InnoDB引擎数据表压缩特性测试 - 20120329Jinrong Ye
 
20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_ricoRico Chen
 
Oracle 資料庫檔案介紹
Oracle 資料庫檔案介紹Oracle 資料庫檔案介紹
Oracle 資料庫檔案介紹Chien Chung Shen
 
我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法mysqlops
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storageted-xu
 
A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题WASecurity
 

What's hot (20)

深入学习Mongo db
深入学习Mongo db深入学习Mongo db
深入学习Mongo db
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,Dba
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
 
Sql基础培训
Sql基础培训Sql基础培训
Sql基础培训
 
数据库内核分享——第一期
数据库内核分享——第一期数据库内核分享——第一期
数据库内核分享——第一期
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 
Hbase
HbaseHbase
Hbase
 
Mongo db 特性
Mongo db 特性Mongo db 特性
Mongo db 特性
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现
 
110412 kningsoft-mongo db-intro-usage-in-mercury
110412 kningsoft-mongo db-intro-usage-in-mercury110412 kningsoft-mongo db-intro-usage-in-mercury
110412 kningsoft-mongo db-intro-usage-in-mercury
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析
 
Ocean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in chinaOcean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in china
 
InnoDB引擎数据表压缩特性测试 - 20120329
InnoDB引擎数据表压缩特性测试 - 20120329InnoDB引擎数据表压缩特性测试 - 20120329
InnoDB引擎数据表压缩特性测试 - 20120329
 
20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico
 
Oracle 資料庫檔案介紹
Oracle 資料庫檔案介紹Oracle 資料庫檔案介紹
Oracle 資料庫檔案介紹
 
我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storage
 
A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题
 

Similar to mysql总结

Altibase管理培训 管理篇
Altibase管理培训 管理篇Altibase管理培训 管理篇
Altibase管理培训 管理篇小新 制造
 
My sql管理基础 李春_v2
My sql管理基础 李春_v2My sql管理基础 李春_v2
My sql管理基础 李春_v2Pickup Li
 
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页liu sheng
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇小新 制造
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 
lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫建興 王
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Bob Huang
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步WASecurity
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發koji lin
 
美团数据库运维平台介绍
美团数据库运维平台介绍美团数据库运维平台介绍
美团数据库运维平台介绍Leo Zhou
 
美团数据库运维平台介绍
美团数据库运维平台介绍美团数据库运维平台介绍
美团数据库运维平台介绍Leo Zhou
 
20120613联动优势数据访问层DAL架构和实践4(刘胜)最新特性
20120613联动优势数据访问层DAL架构和实践4(刘胜)最新特性20120613联动优势数据访问层DAL架构和实践4(刘胜)最新特性
20120613联动优势数据访问层DAL架构和实践4(刘胜)最新特性liu sheng
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
Delta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
Delta Lake Architecture: Delta Lake + Apache Spark Structured StreamingDelta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
Delta Lake Architecture: Delta Lake + Apache Spark Structured StreamingXiao Li
 
Redis分享
Redis分享Redis分享
Redis分享yiihsia
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168vanadies10
 
Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版longxibendi
 
Lotus domino开发教程
Lotus domino开发教程Lotus domino开发教程
Lotus domino开发教程dyzm_2000
 
主备备的两个备机转为双Master出现诡异的slave lag问题
主备备的两个备机转为双Master出现诡异的slave lag问题主备备的两个备机转为双Master出现诡异的slave lag问题
主备备的两个备机转为双Master出现诡异的slave lag问题haojiewang
 

Similar to mysql总结 (20)

Altibase管理培训 管理篇
Altibase管理培训 管理篇Altibase管理培训 管理篇
Altibase管理培训 管理篇
 
My sql管理基础 李春_v2
My sql管理基础 李春_v2My sql管理基础 李春_v2
My sql管理基础 李春_v2
 
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
 
美团数据库运维平台介绍
美团数据库运维平台介绍美团数据库运维平台介绍
美团数据库运维平台介绍
 
美团数据库运维平台介绍
美团数据库运维平台介绍美团数据库运维平台介绍
美团数据库运维平台介绍
 
20120613联动优势数据访问层DAL架构和实践4(刘胜)最新特性
20120613联动优势数据访问层DAL架构和实践4(刘胜)最新特性20120613联动优势数据访问层DAL架构和实践4(刘胜)最新特性
20120613联动优势数据访问层DAL架构和实践4(刘胜)最新特性
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
Delta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
Delta Lake Architecture: Delta Lake + Apache Spark Structured StreamingDelta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
Delta Lake Architecture: Delta Lake + Apache Spark Structured Streaming
 
Redis分享
Redis分享Redis分享
Redis分享
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168
 
Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版
 
Lotus domino开发教程
Lotus domino开发教程Lotus domino开发教程
Lotus domino开发教程
 
主备备的两个备机转为双Master出现诡异的slave lag问题
主备备的两个备机转为双Master出现诡异的slave lag问题主备备的两个备机转为双Master出现诡异的slave lag问题
主备备的两个备机转为双Master出现诡异的slave lag问题
 

mysql总结

  • 3. 应用开发  SQL 关键字  数据读取(备份)  过程、函数、事件、视图、触发器  用户权限  加密技术  SQL 注入  监控  管理维护
  • 4. SQL 关键字  SELECT/FROM/JOIN/WHERE  GROUP BY/HAVING/ORDER BY/LIMIT  表达式 SELECT uid,(SELECT max(player_level) FROM levelup WHERE levelup.uid = player.uid AND levelup.t_when <= player.t_when) AS level FROM player  In/exists
  • 5. 数据读取  逻辑  Mysqldump  select ... into outfile  mysql < backup.sql  load data infile  mysql import  物理  MyISAM : hotcopy  InnoDB : ibbackup
  • 6. 用户  建立用户  create user ‘huangk’@‘localhost’ identified by ‘root’;  drop user huangk;  用户信息  rename ‘huangk’@‘localhost’ to ‘huangk’@‘192.***.***.***’  update user set password=PASSWORD(‘select’) where user=‘huangk’
  • 7. 权限  查看权限 show privileges; show grants for usename@hostname;  授予权限 grant privileges(all: 所有权限 usage :没有权限 ) on dbname.tablename to username@hostname with grant option
  • 8. 权限  更新权限 flush privileges; 执行后,对访问权限做出的改变才会生效  回收权限 revoke privileges on dbname.tablename from username@hostname
  • 9. 数据表维护  修复 MyISAM 文件 myisamchk [options] tablename1  压缩 MyISAM 文件 myisampack [options] tablename1  查看信息 mysqlshow  服务器管理 mysqladmin
  • 10. 数据表维护  检查或维护 MyISAM 表 CHECK TABLE REPAIR TABLE  优化 MyISAM 表 OPTIMIZE TABLE  分析 MyISAM 表 ANALYZE TABLE
  • 11. 移动数据库目录  把 MySQL 服务进程停掉 mysqladmin -uroot -proot shutdown  移动目录 mv -r /var/lib/mysql /home/mysql  编辑 MySQL 的配置文 件 /etc/mysql/my.cnf [mysqld] socket = /home/mysql/mysqld.sock datadir = /home/mysql log_bin = /home/mysql/mysqlbin.log
  • 12. 移动数据库目录  移动数据目录后 , 权限发生变化,需要设 置 mysql 组用户具有权限 chown -R mysql:mysql /home/mysql chmod mysql+x /home/mysql  重新启动 MySQL 服务 /etc/init.d/mysql start
  • 13. 优化  目标  系统设计  参数配置  SQL 语句
  • 14. 目标  减少 I/O ,磁盘 I/O 转到内存 I/O  降低 CPU 运算  优先优化高并发的 SQL  EXPLAIN  SET PROFILING=1  SHOW PROFILE
  • 15. 系统设计  表结构(横表 or 竖表)  数据类型  数据编码  引擎(物理文件)  索引  锁  日志文件  Replication 文件  参数文件
  • 17. 表结构  适度冗余 表保留玩家帐号、等级、流派等分析常用的维度  大字段垂直分拆或整合 用 blob 类型保存玩家的 profile ,有数据需求时再 提取出来做深入的分析  大表水平分拆 任务 物品变化  统计汇总表 银两产出
  • 18. 数据类型  数字类型 DOUBLE 、 DECIMAL 慎用 unsigned TINYINT/INT/BIGINT  字符类型 char varchar: 长度不同, MySQL 不同的存储处理 text  LOB 类型 保留许多不常用的字段信息
  • 19. 数据类型  时间类型  TIMESTAMP 类型,其存储空间只需要 DATETIME 类型 的一半。  DATE 类型,存储空间只需要 3 个字节,比 TIMESTAMP 还少。  INT 类型类存储一个 unix timestamp 的值,不直观, 会给维护带来不必要的麻烦  ENUM & SET  使用 ENUM 来存放状态字段,即使需要增加新的 类型,只要增加于末尾,修改结构也不需要重 建表数据。  使用 SET 类型存放可预先定义的属性数据。
  • 20. 数据编码  不同的字符集 -> 不同的存储空间 ->I/O  UTF8 或 UNICODE 字符  规范对象命名  sql 语句的所有表名、字段名全部小写,系统保留字、内置函数名 、 sql 保留字大写  Select/From/Where/Order by/Group by/limit 等子句必须另 其一行写  在 T-SQL 代码中为字符常量使用单引号 , 避免使用双引号
  • 22. MyISAM 引擎  索引缓存优化 key_buffer_size :索引缓存大小 key_buffer_block_size : key_cache_division_limit : key_cache_age_threshold : 多 key cache key cache 的 Mutex key cache 预加载  表读取索引优化 read_buffer_size :顺序读数据 read_md_buffer_size :随机读数据
  • 23. InnoDB 引擎  索引缓存 Innodb_buffer_pool_* Innodb_log_buffer_size  事务优化 innodb_flush_log_at_trx_commit  数据存储
  • 24. InnoDB 引擎  两次写 double write skip_innodb_doublewrite: 禁止两次写功能, 可能发生写失效问题  插入缓冲 insert buffer  自适应哈希索引 自动根据访问的频率和模式来为某些页建立哈希 索引 innodb_adaptive_hash_index: 禁用或启动此 特性
  • 25. InnoDB 引擎  表空间 每张表都有个主键。如果不指定,如果表中有 非空的唯一索引,则该列为主键,否则自动创建 一个 6 字节大小的指针。 每个表单独一个表空间,存放的只是数据、索 引、插入缓冲信息;撤销信息、系统事务信息、 二次写缓冲还是存放在原来的共享表空间内。  段 数据段 索引段
  • 26. InnoDB 引擎  页  数据页 B-tree Node  Undo 页 Undo Log Page  系统页 System Page  事务数据页 Transaction system Page  插入缓冲位图页 Insert Buffer Bitmap  插入缓冲空闲列表页 Insert Buffer Free List  未压缩的二进制大对象页 Uncompressed BLOB Page  压缩的二进制大对象页 Compressed BLOB Page     
  • 27. InnoDB 引擎  行记录格式 Compact 行记录格式 Redundant 行记录格式 行溢出数据 Compressed 行记录格式 Dynamic 行记录格式
  • 28. 事务  脏读 ( 事务没提交,提前读取 ) :脏读就是指当一个事务正在 访问数据,并且对数据进行了修改,而这种修改还没有提交到 数据库中,这时,另外一个事务也访问这个数据,然后使用了 这个数据。  不可重复读 ( 两次读的不一致 ) :是指在一个事务内,多次读 同一数据。在这个事务还没有结束时,另外一个事务也访问该 同一数据。那么,在第一个事务中的两次读数据之间,由于第 二个事务的修改,那么第一个事务两次读到的的数据可能是不 一样的。这样就发生了在一个事务内两次读到的数据是不一样 的,因此称为是不可重复读。  幻读:是指当事务不是独立执行时发生的一种现象,例如第一 个事务对一个表中的数据进行了修改,这种修改涉及到表中的 全部数据行。同时,第二个事务也修改这个表中的数据,这种 修改是向表中插入一行新数据。那么,以后就会发生操作第一 个事务的用户发现表中还有没有修改的数据行,就好象发生了 幻觉一样。
  • 29. 事务  read uncommitted  read committed  prpeatable read  serializable
  • 30. 索引  B-Tree 索引  Hash 索引  Full-Text 索引   将字段数据进行分割后再进行索引  R-Tree 索引
  • 31. 锁  行级锁定( row-level ) InnoDB NEXT-KEY LOCKING 间隙锁的锁实现方式,会锁定 不存在的键值  表级锁定( table-level ) MyISAM Table_locks_% 表级锁定参数  页级锁定( page-level ) Innodb_row_lock_% 行级锁定参数
  • 32. 锁  缩短锁定时间,减少锁定的资源量 复杂的 query 拆成几个小 query 进行 尽量控制事务大小  提高并发度 concurrent_insert  读写优先级设置 low_priority_updates
  • 33. 日志文件  错误日志 Error log show variables like 'log_error‘  查询日志 query log 5.1 后 mysql.general_log 表中
  • 34. 日志文件  二进制日志 binary log 所有修改数据库数据的 QUERY 语句,事务安全 mysqlbinlog 工具 默认二进制日志不启动。开启这个选项可能有性 能下降 sync_binlog: 磁盘同步间隔事务数 binlog_cache_size: 事务过程中二进制日志 SQL 语句的缓存大小 max_binlog_cache_size:binlog 使用的最大 cache 内存大小
  • 35. 日志文件  二进制日志 binary log binlog_format:statement 、 row 、 mixed binlog_do_db binlog_ignore_db binlog_cache_use: 记录用缓冲写二进制日志次 数 binlog_cache_disk_use: 记录用临时文件写二 进制次数,判断 binlog_cache_size 设置是否合 理
  • 36. 日志文件  慢查询日志 slow query log mysqlslowdump 慢查询日志工具 log_queries_not_using_indexes:on/off long_query_time :记录执行时间超过多长的 query log_slow_queries:on/off 5.1 后 存放在 mysql.slow_log 表中  InnoDB 的在线 REDO 日志 InnoDB REDO log innodb_log_file_size innodb_log_files_in_group innodb_mirrored_log_groups innodb_log_group_home_dir
  • 37. 参数配置  Cache  buffer  memory  IO  swap  cpu  connection  thread  query cache  table cache
  • 38. query cache  Hash 运算及查找资源消耗  Query cache 失效问题  缓存 Result Set :一条记录可能多次缓存  have_query_cache  Query_cache* :参数变量  Qcache* : query cache 的使用情况
  • 39. connection  max_connections: 最大连接数  max_user_connnections :每个用户允许的最大连 接数  net_buffer_length: 网络传输效率  max_allowed_packet: 一次消息传输量的最大值  back_log: 等待队列中允许存放的最大连接请求数  连接池  thread_cache_size :应该存放的连接线程数  thread_stack :每个连接线程被分配的内存大小
  • 40. query  table cache :文件描述符  sort_buffer_size :排序时使用的 buffer  join_buffer_size :
  • 41. SQL 语句  只 select 需要的数据字段,减少网络和内存 数据传输量  避免在条件中对索引做函数转换  避免使用不等于条件  like 操作以通配符 ( 如’ %data’) 开始,无法 使用索引
  • 42. SQL 语句  Join Nested loop join :通过驱动表的结果集作为循环 基础数据,然后将结果集中的数据作为过滤条件一 条条地到下一个表中查询数据,最后合并结果  order by 索引排序 排序算法 取出排序字段以及相应行指针 取出排序字段以及所有字段 max_lenght_for_sort_data :决定算法问题 sort_buffer_size :减少数据分段、减少临时 表交换排序
  • 43. SQL 语句  Group by 1 、松散索引 group by 条件字段位于同一个索引最前面位 置 只能用 max 和 min 两个聚合函数 2 、紧凑索引 3 、临时表  Distinct 与 group by 操作非常相似, group by 之后每 组中取出一条记录而已 distinct 并不需要排序
  • 44. SQL 语句  Union 尽量 union all 而不去重  Limit join 表之前可以过滤数据量  Count count(*) 优于 count(1) count(column) 是表示结果集中有多少个 column 字段不为空的记录; count(*) 是表示整 个结果集有多少条记录
  • 45. 架构  分层  分表  复制  集群  Cache 与 search