
MySQL进阶指南
文章平均质量分 69
涉及MySQL体系架构、InnoDB存储引擎、表、索引与算法、锁、事务、备份和恢复、性能调优等。
Zhu_Julian
这个作者很懒,什么都没留下…
展开
-
[MySQL] 使用mysqladmin ext了解MySQL运行状态
mysqladmin是MySQL一个重要的客户端,最常见的是使用它来关闭数据库,除此,该命令还可以了解MySQL运行状态、进程信息、进程杀死等。本文介绍一下如何使用mysqladmin extended-status(因为没有"歧义",所以可以使用ext代替)了解MySQL的运行状态。目录 [hide]1. 使用-r/-i参数2. 配合grep使用3. 配合简单转载 2014-08-31 21:59:45 · 2214 阅读 · 0 评论 -
[MySQL] 利用 MySql日志文件 恢复数据
1. 以前我错误的认为mysql的日志可以恢复到任何时间的状态,其实并不是这样,这个恢复是有前提的,就是你至少得有一个从日志记录开始后的数据库备份,通过日志恢复数据库实际上只是一个对以前操作的回放过程而已,不用想得太复杂,既然是回放你就得注意了,如果你执行了两次恢复那么就相当于是回放了两次,后果如何你自己应该清楚了吧。 2. 要想通过日志恢复数据库,在你的my.cnf文件里应该有如转载 2014-09-30 09:09:48 · 6979 阅读 · 0 评论 -
mysql日志设置优化
前言在安装完MySQL之后,肯定是需要对MySQL的各种参数选项进行一些优化调整的。虽然MySQL系统的伸缩性很强,既可以在有很充足的硬件资源环境下高效的运行,也可以在极少资源环境下很好的运行,但不管怎样,尽可能充足的硬件资源对MySQL的性能提升总是有帮助的。在这一节我们主要分析一下MySQL的日志(主要是Binlog)对系统性能的影响,并根据日志的相关特性得出相应的优化思路。转载 2014-09-03 10:32:41 · 2197 阅读 · 0 评论 -
[MySQL] Innodb参数优化
innodb_buffer_pool_sizeinnodb_buffer_pool_size 参数用来设置Innodb 最主要的Buffer(Innodb_Buffer_Pool)的大小,也就是缓存用户表及索引数据的最主要缓存空间,对Innodb 整体性能影响也最大。对于一台单独给MySQL 使用的主机,并假设只使用innodb引擎,一般建议该参数为物流内存的75%左右。当系统原创 2014-07-22 22:53:40 · 5559 阅读 · 0 评论 -
[MySQL] MySQL的自动化安装部署
有过MySQL运维的人应该都清楚,线上的MySQL一般都采用源码编译,因为这样才可以根据企业的各自需要选择要编译的功能,虽然MySQL的源码编译挺简单的,但是试想一下,如果你有几百台服务器同时要安装MySQL,难道你还一台台去手动编译、编写配置文件吗?这显然太低效了,本文讨论MySQL的自动化安装部署。1、制作符合自己需求的RPM包我们要根据MySQL的源码编译符合企业需求的RPM包,源码原创 2014-07-02 10:31:42 · 3526 阅读 · 1 评论 -
[MySQL] 表在线重定义 - pt-online-schema-change
MySQL不像Oracle本身就支持表的在线重定义,但我们可以通过开源软件percona-toolkit中的工具pt-online-schema-change进行在线重定义。pt-online-schema-change包含在percona-toolkit中,所以我们得先下载安装:wget percona.com/get/percona-toolkit.tar.gztar -zxvf原创 2014-01-14 14:10:53 · 6003 阅读 · 3 评论 -
[MySQL] explain执行计划解读
Explain语法EXPLAIN SELECT ……变体:1. EXPLAIN EXTENDED SELECT ……将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2. EXPLAIN PARTITIONS SELECT ……用于分区表的EXPLAIN执行计划包含的信息 id转载 2013-12-26 13:10:47 · 3367 阅读 · 1 评论 -
[MySQL] 复制(3)- 创建主备复制(从另一个服务器开始复制)
前一篇讲到的创建主备复制是假设主备库都为刚刚安装好的数据库,也就是说两台服务器上的数据相同,这不是典型的案例,大多数情况下有一个已经运行了一段时间的主库,然后用一台新安装的备库与之同步,本文讲述在这种情况下该如何配置。1、在备库的主机上安装MySQL,注意备库的版本不能低于主库。2、备份主库,复制备份文件到备库,并在备库上恢复。可以有很多种方法实现上述过程,我这里介绍的是利用innob原创 2013-11-29 16:01:09 · 3100 阅读 · 0 评论 -
[MySQL] 复制(2)- 创建主备复制(主备库都为空)
本文适用于新安装的主库和备库,主库的配置主库需要打开二进制日志,并制定一个唯一的server id,my.cnf文件中增加或修改如下内容:server_id=60log-bin = /data/mysql/log/mysql-bin备库的配置备库my.cnf的配置如下:server_id=61read_only=1log_bin = /data/mysql/log/m原创 2013-11-27 15:10:40 · 2440 阅读 · 0 评论 -
[MySQL] 复制(1)- 原理和架构
MySQL复制解决的基本问题是让一台服务器的数据与其它服务器保持同步,它具有如下的特征:1)异步:这意味着,在同一时间点上备库的数据可能与主库不一致,并无法保证它们之间的延迟;2)向后兼容:也就是说,备库的版本可以高于主库的版本,但不能低于主库的版本下面是MySQL复制的原理图:大致分为三个步骤:1)主库所有的数据更改都记录到二进制日志2)备库通过I/O线程把主库的原创 2013-11-26 17:46:14 · 2626 阅读 · 0 评论 -
[MySQL] 索引与性能(4)- 排序
我们知道B树索引是有序的,那么可不可以通过只扫描索引就能完成order by操作呢?答案是肯定的,但条件也比较苛刻:只有当索引的列顺序和order by字句的列顺序完全一致,且order by字句中所有列的排序方式要么全部都是ASC,要么全部都是DESC,MySQL才能使用索引来对结果进行排序;如果查询需要关联多个表,则条件更苛刻,只有当order by字句中的列全部为驱动表(执行计划中)时,才能原创 2013-11-19 17:04:49 · 3011 阅读 · 0 评论 -
[MySQL] 索引与性能(3)- 覆盖索引
覆盖索引是指索引的叶子节点已包含所有要查询的列,因此不需要访问表数据,能极大地提高性能。覆盖索引对InnoDB的聚簇索引表特别有用,因为可以避免InnoDB二级索引的二次查询。MySQL里只有B树索引能做覆盖索引,因为必须要存储索引列的值,而哈希索引、空间索引、全文索引不可以。当发起一个覆盖索引的查询时,在explain的Extra列可以看到Using Index,下面看一个例子,在表user原创 2013-11-19 13:38:11 · 4879 阅读 · 1 评论 -
[MySQL] 索引与性能(2)- 聚簇索引
聚簇索引是一种数据存储方式,它实际上是在同一个结构中保存了B+树索引和数据行,InnoDB表是按照聚簇索引组织的(类似于Oracle的索引组织表)。InnoDB通过主键聚簇数据,如果没有定义主键,会选择一个唯一的非空索引代替,如果没有这样的索引,会隐式定义个主键作为聚簇索引。下图形象说明了聚簇索引表(InnoDB)和普通的堆组织表(MyISAM)的区别:对于普通的堆组织表来说(原创 2013-11-18 16:39:32 · 7570 阅读 · 0 评论 -
[MySQL] 数据类型与性能
MySQL支持的数据类型非常多,选择正确的数据类型对性能至关重要,本文谈谈如何正确选择MySQL的数据类型。整数有以下几种整数:TINYINT, SMAILLINT, MEDIUMINT, INT, BIGINT,分别使用8, 16, 24, 32, 64位存储空间。它们都有一个可选的UNSIGNED属性,表示不允许负数。你可以为整数类型指定宽度,如INT(13),但对大多数应用来说是原创 2013-11-15 13:23:23 · 3667 阅读 · 0 评论 -
[MySQL] innobackupex在线备份及恢复(全量和增量)
Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品。Xtrabackup由个部分组成:xtrabackup和innobackupex,其中xtrabackup工具用于备份innodb和 xtraDB引擎的表;而innobackupex工具用于备份myisam和innodb引擎的表,本文将介绍如何用innobackup原创 2013-10-29 12:34:05 · 28928 阅读 · 8 评论 -
[MySQL] 用mysqldump制作文本备份
在使用mysqldump备份MySQL时,备份文件是SQL格式的文本文件,它由一系列create table和insert语句组成。恢复时,只要把该SQL文件作为mysql程序的输入即可,如下所示:mysqldump mydb mytbl > mytbl.sqlmysql mydb 注意:千万不要试图用mysqlimport加载由mysqldump生成的备份文件!mysqlimpor原创 2013-10-28 12:56:56 · 2828 阅读 · 0 评论 -
[MySQL] 探索权限表
MySQL权限表是指在mysql数据库下的5张表:user, db, tables_priv, columns_priv, procs_priv,这5张表记录了所有的用户及其权限信息,MySQL就是通过这5张表控制用户访问的。本文将探索这5张权限表。MySQL权限表的结构和内容1、user:记录账号、密码、全局性权限信息等。mysql> desc mysql.user;+原创 2013-10-24 16:06:26 · 2872 阅读 · 1 评论 -
[Linux] 利用logrotate对MySQL日志进行轮转
日志轮转特别适用于具有固定文件名的日志文件,比如MySQL的出错日志、常规查询日志、慢查询日志等。Linux系统有一个非常好用的根据logratate可以实现自动轮转,本文介绍它的原理和用法。默认情况下,logratate部署为每天运行的cron job,你可以在目录/etc/cron.daily里找到名为logratate的配置文件。那么它是在每天的上面时候运行的呢?打开文件/etc/cro原创 2013-10-23 10:00:44 · 6778 阅读 · 3 评论 -
[MySQL] 变量(参数)的查看和设置
类似于Oracle的参数文件,MySQL的选项文件(如my.cnf)用于配置MySQL服务器,但和Oracle叫法不一样,在MySQL里, 官方叫变量(Varialbes),但其实叫参数也是可以的,只要明白这俩是同一个东西就可以了。MySQL的变量分为以下两种:1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看2)状态变量:监控MySQL服务器的运行状原创 2013-10-22 16:48:13 · 22420 阅读 · 0 评论 -
[MySQL] 在Centos下的启动和关闭
现在主流的Unix系统有两种风格:System V和BSD,他们的区别如下:Linux作为类Unix,同样也存在这两种风格,其中Centos属于System V,本文主要介绍在Centos下(即System V风格)如何启动和关闭MySQL,同时简单介绍BSD系统的情况。MySQL启动方式1)直接调用mysqld。这是最不常见的方式,不推荐使用。2)运行mysql.原创 2013-10-21 17:31:18 · 16394 阅读 · 0 评论 -
[MySQL] 数据目录的组织架构
归根到底,MySQL是运行在操作系统上的一个软件,它需要借助于文件系统存储数据,本文主要介绍MySQL的数据库对象在文件系统的存储方式。数据目录的位置可以通过以下几个方法查看MySQL数据目录的位置:1)对于一个正在运行的MySQL服务器来说,可以通过查看mysqld的进程获取MySQL数据目录的位置,如下所示:[root@lx202 /data/mysql/data原创 2013-10-21 14:27:37 · 2985 阅读 · 0 评论 -
[MySQL] 获取元数据的方法
MySQL提供了以下三种方法用于获取数据库对象的元数据:1)show语句2)从INFORMATION_SCHEMA数据库里查询相关表3)命令行程序,如mysqlshow, mysqldump用SHOW语句获取元数据MySQL用show语句获取元数据是最常用的方法,下面提供了几种典型用法:show databases; --列出所有数据库show create d原创 2013-10-15 11:12:49 · 7916 阅读 · 0 评论 -
[MySQL] 管理表和索引的相关语句
1. 创建表MySQL中创建表是通过create table语句实现的,语法这里就不介绍了,非常复杂,可以去官网上查询,所幸的是,我们并不需要记住所有的选项,因为大部分都采用默认即可,下面介绍几个比较常用的选项。1)指定存储引擎默认的存储引擎由default-storage-engine指定,如果没有指定,则为MyISAM,如果建表时,你不想使用默认的存储引擎,可以通过如下语句实现:原创 2013-10-14 17:43:43 · 2316 阅读 · 0 评论 -
[MySQL] 存储过程、函数、触发器和视图的权限检查
当存储过程、函数、触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的?在默认情况下,MySQL将检查创建者的权限。假设用户A创建了存储过程p()访问表T,并把execute的权限赋给了B,即使用户B没有访问表T的权限,也能够通过执行存储过程p()访问表T。下面看一个例子:首先,我们创建原创 2013-10-18 09:14:56 · 4655 阅读 · 0 评论 -
[MySQL] 字符集和排序方式
字符串类型MySQL的字符串分为两大类:1)二进制字符串:即一串字节序列,对字节的解释不涉及字符集,因此它没有字符集和排序方式的概念2)非二进制字符串:由字符构成的序列,字符集用来解释字符串的内容,排序方式决定字符的大小字符集和排序方式字符集和排序方式的关系是这样的:一个字符集可以有一个或多个排序方式,有一个默认的排序方式,我们可以通过以下例子说明:mysql>原创 2013-10-16 16:46:18 · 3213 阅读 · 0 评论 -
[MySQL] Linux下MySQL-5.6源码安装
本文主要介绍centos下源码安装MySQL 5.6的方法,centos的版本为5.8.1)首先,你需要到MySQL官网下载源码tar包,点击MySQL Community Server,选择Source Code,源码包不大,只有34M左右。注:以下操作没有特殊说明,都是以root账户执行。2)先安装cmake(mysql5.5以后源码安装都得通过cmake编译)# yum原创 2013-09-29 18:11:47 · 7898 阅读 · 9 评论 -
[MySQL] 账户及权限管理
MySQL初始账户管理MySQL的初始账户如下:[root@lx16 ~]# mysql -u rootmysql> select host,user,password from mysql.user;+-----------+------+----------+| host | user | password |+-----------+------+-----原创 2013-08-02 14:47:46 · 2583 阅读 · 0 评论 -
[MySQL] 索引与性能(1)- 索引类型
B+树是一种经典的数据结构,由平衡树和二叉查找树结合产生,它是为磁盘或其它直接存取辅助设备而设计的一种平衡查找树,在B+树中,所有的记录节点都是按键值大小顺序存放在同一层的叶节点中,叶节点间用指针相连,构成双向循环链表,非叶节点(根节点、枝节点)只存放键值,不存放实际数据。下面看一个2层B+树的例子:保持树平衡主要是为了提高查询性能,但为了维护树的平衡,成本也是巨大的,当有数据插入或删原创 2013-06-13 12:24:42 · 5278 阅读 · 5 评论 -
[MySQL] InnoDB行格式剖析
InnoDB和大多数行式数据库一样,记录以行的格式存储,它提供了两种格式:Compact和RedundantCompactCompact格式是在MySQL5.0时才被引入,它是新的行格式,其设计目标是高效存放数据,示意图如下:1)变长字段长度列表。按列的逆序放置,当列长度小于255字节,用1字节表示,若大于255字节,用2个字节表示,至多为2字节(这也很原创 2013-06-13 08:41:26 · 5466 阅读 · 0 评论 -
[MySQL] InnoDB逻辑存储结构
InnoDB存储引擎中的表非常像Oracle中的索引组织表,每张表必须得有主键,如果表在创建时没有显示定义主键,则根据以下原则自动创建主键:1)如果有非空的唯一索引,则该索引所在的列为主键;2)如果不符合上述条件,自动创建一个6个字节的指针为主键。InnoDB存储引擎的逻辑存储结构和Oracle几乎一样,从大到小分别为:表空间、段、区、页,它们的关系如下图所示:原创 2013-06-12 23:08:16 · 6013 阅读 · 0 评论 -
[MySQL] InnoDB表空间及日志文件
MySQL一个显著的特点是其可插拔的存储引擎,因此MySQL文件分为两种,一种是和MySQL数据库本身相关的文件,一种是和存储引擎相关的文件。本文主要介绍和InnoDB存储引擎相关的文件。表空间文件InnoDB在存储上也模仿了Oracle的设计,数据按表空间进行存储,但是和Oracle不一样的是,Oracle的表空间是个逻辑的概念,而InnoDB的表空间是个物理的概念。你可以通原创 2013-06-12 14:11:22 · 7812 阅读 · 6 评论 -
[MySQL] 日志文件概述
这里介绍的日志文件都是MySQL数据库本身的文件,和具体用什么存储引擎无关。错误日志MySQL的错误日志类似于Oracle的alert.log,默认情况下以.err结尾,DBA在遇到问题时,首先应该查询该日志获得错误信息。查询日志查询日志记录了所有的数据库请求,即时这些请求没有得到正确的执行。慢查询日志慢查询日志用于记录运行时间比较长的SQL语句,可原创 2013-06-12 11:54:50 · 3090 阅读 · 0 评论 -
[MySQL] InnoDB三大特性之 - 自适应哈希索引
哈希索引是一种非常快的等值查找方法(注意:必须是等值,哈希索引对非等值查找方法无能为力),它查找的时间复杂度为常量,InnoDB采用自适用哈希索引技术,它会实时监控表上索引的使用情况,如果认为建立哈希索引可以提高查询效率,则自动在内存中的“自适应哈希索引缓冲区”(详见《MySQL - 浅谈InnoDB体系架构》中内存构造)建立哈希索引。之所以该技术称为“自适应”是因为完全由InnoDB自己决定原创 2013-06-12 08:37:56 · 9335 阅读 · 2 评论 -
[MySQL] InnoDB三大特性之 - 两次写
今天我们来介绍InnoDB存储引擎的第二个特性 - 两次写(doublewrite),如果说插入缓冲是为了提高写性能的话,那么两次写是为了提高可靠性,牺牲了一点点写性能。部分写失效想象这么一个场景,当数据库正在从内存向磁盘写一个数据页时,数据库宕机,从而导致这个页只写了部分数据,这就是部分写失效,它会导致数据丢失。这时是无法通过重做日志恢复的,因为重做日志记录的是对页的物理修改,如原创 2013-06-12 08:16:17 · 9676 阅读 · 5 评论 -
[MySQL] InnoDB三大特性之 - 插入缓冲
InnoDB存储引擎有三大特性非常令人激动,它们分别是插入缓冲、两次写和自适应哈希,本篇文章先介绍第一个特性 - 插入缓冲(insert buffer)在上一篇《MySQL - 浅谈InnoDB存储引擎》中,我们可以看到在InnoDB的内存中有单独一块叫“插入缓冲”的区域,下面我们详细来介绍它。非聚集索引写性能问题为了阐述非聚集索引写性能问题,我们先来看一个例子:m原创 2013-06-11 22:22:26 · 10951 阅读 · 3 评论 -
[MySQL] 浅谈InnoDB存储引擎
InnoDB是事务安全的存储引擎,设计上借鉴了很多Oracle的架构思想,一般而言,在OLTP应用中,InnoDB应该作为核心应用表的首先存储引擎。InnoDB是由第三方的Innobase Oy公司开发,现已被Oracle收购,创始人是Heikki Tuuri,芬兰赫尔辛基人,和著名的Linux创始人Linus是校友。InnoDB体系架构上面是InnoDB的一个简图,简单来原创 2013-06-11 12:17:57 · 6471 阅读 · 1 评论 -
[MySQL] 主流存储引擎介绍
在上一篇关于《MySQL体系架构》的文章里提到MySQL最大的特色是其可插拔的插件式存储引擎,这篇文章将对比几个主流的存储引擎。这里要特别提一点,由于MySQL是开源的,所以如果你对某些存储引擎不满意,可以修改或写一个存储引擎,增加自己想要的特性,这也是MySQL作为开源数据库的优势之一。下表显示了各种存储引擎的特性:其中最常见的两种存储引擎是MyISAM和InnoDB刚接触M原创 2013-06-11 09:36:33 · 3392 阅读 · 0 评论 -
[MySQL] 概述
做DBA三年多,接触过很多主流数据库产品,但唯独没机会碰触MySQL,今天开始决定自学MySQL,给自己冲冲电,先从MySQL的体系架构开始学起。MySQL数据库的体系架构如下图所示:从上图中可以看出,MySQL主要分为以下几个组件:连接池组件管理服务和工具组件SQL接口组件分析器组件优化器组件缓冲组件插件式存储引擎物理文件有其它数据库基础的人可以马上发现,MySQ原创 2013-06-11 08:16:05 · 3644 阅读 · 4 评论