资料下载网
首页 计算机 考试教辅
深入浅出MySQL数据库开发、优化与管理维护 pdf电子书免费下载,百度云
首页 > 计算机 > 数据库技术 > 深入浅出MySQL数据库开发、优化与管理维护 pdf电子书免费下载,百度云

《深入浅出MySQL数据库开发、优化与管理维护》pdf电子书免费下载


下载方式一:

百度网盘下载地址:https://pan.baidu.com/s/1AN2Al-FKMx8-QfXVNN3yYA
百度网盘密码:1111

下载方式二:

http://ziliaoshare.cn/Download/ae_123704_do_SRQCMySQLSJKKF、YHYGLWH.zip

 


深入浅出MySQL数据库开发、优化与管理维护

作者:empty

出版社:empty

《深入浅出MySQL数据库开发、优化与管理维护》介绍

开发篇

帮助的使用

在不同的mysql版本中,很多特性和语法有可能是不一样的,我们怎么样才能知道当前版本的语法是什么样呢?最好的办法是学会使用mysql的帮助。方法很简单:

按照层次看帮助

如果不知道帮助能够提供些什么,可以一层一层往下看:

命令如下:

mysql> ? contents

You asked for help about help category: Contents

For more information, type 'help item>', where item> is one of the following

categories:

Account Management

Administration

Data Definition

Data Manipulation

Data Types

Functions

Functions and Modifiers for Use with GROUP BY

Geographic Features

Language Structure

Plugins

Storage Engines

Stored Routines

Table Maintenance

Transactions

Triggers

对于列出的分类,可以进行看自己感兴趣的部分,例如:

mysql> ? data types

You asked for help about help category: Data Types

For more information, type 'help item>', where item> is one of the following

topics:

AUTO_INCREMENT

BIGINT

BINARY

BIT

BLOB

BLOB DATA TYPE

BOOLEAN

。。。。。。

对于列出的具体数据类型,可以进一步看详细情况:

mysql> ? int

Name: 'INT'

Description:

INT[(M)] [UNSIGNED] [ZEROFILL]

A normal-size integer. The signed range is -2147483648 to 2147483647.

The unsigned range is 0 to 4294967295.

快速查阅帮助

实际当中,如果我们需要快速查阅某项语法时,可以使用关键字进行快速查询。例如,我想知道show命令都能看些什么东西,可以用如下命令:(源码网整理:www.codepub.com)

mysql> ? show

Name: 'SHOW'

Description:

SHOW has many forms that provide information about databases, tables,

columns, or status information about the server. This section describes

those following:

SHOW AUTHORS

SHOW CHARACTER SET [LIKE 'pattern']

SHOW COLLATION [LIKE 'pattern']

SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE 'pattern']

SHOW CONTRIBUTORS

SHOW CREATE DATABASE db_name

SHOW CREATE EVENT event_name

SHOW CREATE FUNCTION funcname

。。。。。。

我想知道create table的语法,可以命令如下:

mysql> ? create table

Name: 'CREATE TABLE'

Description:

Syntax:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

(create_definition,...)

[table_option ...]

[partition_options]

Or:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

[(create_definition,...)]

[table_option ...]

[partition_options]

select_statement

、 。。。。。。

表类型(存储引擎)的选择

Mysql存储引擎概述

mysql支持多种存储引擎,在处理不同类型的应用时,可以通过选择使用不同的存储引擎提高应用的效率,或者提供灵活的存储。

mysql的存储引擎包括:MyISAM、 InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。

各种存储引擎的特性

下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式。

特点MyisamBDBMemoryInnoDBArchive

存储限制没有没有有64TB没有

事务安全支持支持

锁机制表锁页锁表锁行锁行锁

B树索引支持支持支持支持

哈希索引支持支持

全文索引支持

集群索引支持

数据缓存支持支持

索引缓存支持支持支持

数据可压缩支持支持

空间使用低低N/A高非常低

内存使用低低中等高低

批量插入的速度高高高低非常高

支持外键支持

最常使用的2种存储引擎:

1.Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。

每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD (MYData,存储数据)、.MYI (MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。

2.InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

如何选择合适的存储引擎

选择标准: 根据应用特点选择合适的存储引擎,对于复杂的应用系统可以根据实际情况选择多种存储引擎进行组合.

下面是常用存储引擎的适用环境:

1.MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一

2.InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。

3.Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

4.Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

选择合适的数据类型

选择数据类型的基本原则

前提: 使用适合存储引擎。

选择原则: 根据选定的存储引擎,确定如何选择合适的数据类型

下面的选择方法按存储引擎分类:

1.MyISAM 数据存储引擎和数据列

MyISAM数据表,最好使用固定长度的数据列代替可变长度的数据列。

2.MEMORY存储引擎和数据列

MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用CHAR或VARCHAR列都没有关系。两者都是作为CHAR类型处理的。

3.InnoDB 存储引擎和数据列

建议使用 VARCHAR类型

对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的 CHAR列不一定比使用可变长度VARCHAR列简单。因而,主要的性能因素是数据行使用的存储总量。由于CHAR平均占用的空间多于VARCHAR,因 此使用VARCHAR来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。

固定长度数据列与可变长度的数据列

char与varchar

CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:

值CHAR(4)存储需求VARCHAR(4)存储需求

''' '4个字节''1个字节

'ab''ab '4个字节'ab '3个字节

'abcd''abcd'4个字节'abcd'5个字节

'abcdefgh''abcd'4个字节'abcd'5个字节

请注意上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误。

从CHAR(4)和VARCHAR(4)列检索的值并不总是相同,因为检索时从CHAR列删除了尾部的空格。通过下面的例子说明该差别:

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));

Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO vc VALUES ('ab ', 'ab ');

Query OK, 1 row affected (0.00 sec)

mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;

+----------------+----------------+

| CONCAT(v, '+') | CONCAT(c, '+') |

+----------------+----------------+

| ab + | ab+ |

+----------------+----------------+

1 row in set (0.00 sec)

text和blob

在使用text和blob字段类型时要注意以下几点,以便更好的发挥数据库的性能.

1.BLOB和TEXT值也会引起自己的一些问题,特别是执行了大量的删除或更新操作的时候。删除这种值会在数据表中留下很大的 空洞 ,以后填入这些 空洞 的记录可能长度不同,为了提高性能,建议定期使用 OPTIMIZE TABLE 功能对这类表进行碎片整理.

2.使用合成的(synthetic)索引。合成的索引列在某些时候是有用的。一种办法是根据其它的列的内容建立一个散列值,并把这个值存储在单独的数据列中。接下来你就可以通过检索散列值找到数据行了。但是,我们要注意这种技术只能用于精确匹配的查询(散列值对于类似 或>=等范围搜索操作符 是没有用处的)。我们可以使用MD5()函数生成散列值,也可以使用SHA1()或CRC32(),或者使用自己的应用程序逻辑来计算散列值。请记住数值型散列值可以很高效率地存储。同样,如果散列算法生成的字符串带有尾部空格,就不要把它们存储在CHAR或VARCHAR列中,它们会受到尾部空格去除的影响。

  合成的散列索引对于那些BLOB或TEXT数据列特别有用。用散列标识符值查找的速度比搜索BLOB列本身的速度快很多。

3.在不必要的时候避免检索大型的BLOB或TEXT值。例如,SELECT *查询就不是很好的想法,除非你能够确定作为约束条件的WHERE子句只会找到所需要的数据行。否则,你可能毫无目的地在网络上传输大量的值。这也是 BLOB或TEXT标识符信息存储在合成的索引列中对我们有所帮助的例子。你可以搜索索引列,决定那些需要的数据行,然后从合格的数据行中检索BLOB或 TEXT值。

4.把BLOB或TEXT列分离到单独的表中。在某些环境中,如果把这些数据列移动到第二张数据表中,可以让你把原数据表中 的数据列转换为固定长度的数据行格式,那么它就是有意义的。这会减少主表中的碎片,使你得到固定长度数据行的性能优势。它还使你在主数据表上运行 SELECT *查询的时候不会通过网络传输大量的BLOB或TEXT值。

浮点数与定点数

为了能够引起大家的重视,在介绍浮点数与定点数以前先让大家看一个例子:

mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));

Query OK, 0 rows affected (0.29 sec)

mysql> insert into test values(131072.32,131072.32);

Query OK, 1 row affected (0.07 sec)

mysql> select * from test;

+-----------+-----------+

| c1 | c2 |

+-----------+-----------+

| 131072.31 | 131072.32 |

+-----------+-----------+

1 row in set (0.00 sec)

从上面的例子中我们看到c1列的值由131072.32变成了131072.31,这就是浮点数的不精确性造成的。

在mysql中float、double(或real)是浮点数,decimal(或numberic)是定点数。

浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;它的缺点是会引起精度问题。

在今后关于浮点数和定点数的应用中,大家要记住以下几点:

1、浮点数存在误差问题;

2、对货币等对精度敏感的数据,应该用定点数表示或存储;

3、编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;

4、要注意浮点数中一些特殊值的处理。

字符集

字符集概述

字符集是一套符号和编码的规则,不论是在oracle数据库还是在mysql数据库,都存在字符集的选择问题,而且如果在数据库创建阶段没有正确选择字符集,那么可能在后期需要更换字符集,而字符集的更换是代价比较高的操作,也存在一定的风险,所以,我们推荐在应用开始阶段,就按照需求正确的选择合适的字符集,避免后期不必要的调整。

Mysql支持的字符集简介

mysql服务器可以支持多种字符集(可以用show character set命令查看所有mysql支持的字符集),在同一台服务器、同一个数据库、甚至同一个表的不同字段都可以指定使用不同的字符集,相比oracle等其他数据库管理系统,在同一个数据库只能使用相同的字符集,mysql明显存在更大的灵活性。

mysql的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。字符集是用来定义mysql存储字符串的方式,校对规则则是定义了比较字符串的方式。字符集和校对规则是一对多的关系, MySQL支持30多种字符集的70多种校对规则。

每个字符集至少对应一个校对规则。可以用SHOW COLLATION LIKE 'utf8%';命令查看相关字符集的校对规则。

Unicode简述

Unicode是一种编码规范。我们在这里简述一下Unicode编码产生的历史。

先从ASCII码说起,ASCII码也是一种编码规范,只不过ASCII码只能最多表示256个字符,是针对英文产生的,而面对中文、阿拉伯文之类的复杂文字,256个字符显然是不够用的。于是各个国家或组织都相继制定了符合自己语言文字的标准,比如gb2312、big5等等。但是这种各自制定自己的标准的做法显然是有很多弊端的,于是Unicode编码规范应运而生。

Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是 Universal Multiple-Octet Coded Character Set ,简称为UCS。UCS可以看作是 Unicode Character Set 的缩写。

Unicode有两套标准UCS-2和UCS-4,前者用2个字节表示一个字符,后者用4个字节表示一个字符。以目前常用的UCS-2为例,它可以表示的字符数为2^16=65535,基本上可以容纳所有的欧美字符和绝大多数亚洲字符。

怎样选择合适的字符集

我们建议在能够完全满足应用的前提下,尽量使用小的字符集。因为更小的字符集意味着能够节省空间、减少网络传输字节数,同时由于存储空间的较小间接的提高了系统的性能。

有很多字符集可以保存汉字,比如utf8、gb2312、gbk、latin1等等,但是常用的是gb2312和gbk。因为gb2312字库比gbk字库小,有些偏僻字(例如:洺)不能保存,因此在选择字符集的时候一定要权衡这些偏僻字在应用出现的几率以及造成的影响,不能做出肯定答复的话最好选用gbk。

Mysql字符集的设置

mysql的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和字段级。分别在不同的地方设置,作用也不相同。

服务器字符集和校对,在mysql服务启动的时候确定。

可以在my.cnf中设置:

[mysqld]

default-character-set=utf8

或者在启动选项中指定:

mysqld --default-character-set=utf8

或者在编译的时候指定:

./configure --with-charset=utf8

如果没有特别的指定服务器字符集,默认使用latin1作为服务器字符集。上面三种设置的方式都只指定了字符集,没有指定校对规则,这样是使用该字符集默认的校对规则,如果要使用该字符集的非默认校对规则,则需要在指定字符集的同时指定校对规则。

可以用show variables like 'character_set_server';命令查询当前服务器的字符集和校对规则。

索引的设计和使用

Mysql索引概述

所有MySQL列类型可以被索引。对相关列使用索引是提高SELECT操作性能的最佳途径。根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。

在MySQL 5.1中,对于MyISAM和InnoDB表,前缀可以达到1000字节长。请注意前缀的限制应以字节为单位进行测量,而CREATE TABLE语句中的前缀长度解释为字符数。当为使用多字节字符集的列指定前缀长度时一定要加以考虑。

还可以创建FULLTEXT索引。该索引可以用于全文搜索。只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHAR、VARCHAR和TEXT列。索引总是对整个列进行,不支持局部(前缀)索引。也可以为空间列类型创建索引。只有MyISAM存储引擎支持空间类型。空间索引使用R-树。默认情况MEMORY(HEAP)存储引擎使用hash索引,但也支持B-树索引。

设计索引的原则

1.搜索的索引列,不一定是所要选择的列。换句话说,最适合索引的列是出现在WHERE 子句中的列,或连接子句中指定的列,而不是出现在SELECT 关键字后的选择列表中的列。

2.使用惟一索引。考虑某列中值的分布。对于惟一值的列,索引的效果最好,而具有多个重复值的列,其索引效果最差。例如,存放年龄的列具有不同值,很容易区分 各行。而用来记录性别的列,只含有“ M”和“F”,则对此列进行索引没有多大用处(不管搜索哪个值,都会得出大约一半的行)

3.使用短索引。如果对串列进行索引,应该指定一个前缀长度,只要有可能就应该这样做。例如,如果有一个CHAR(200) 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。对前10 个或20 个字符进行索引能够节省大量索引空间,也可能会使查询更快。较小的索引涉及的磁盘I/O 较少,较短的值比较起来更快。更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值,因此,MySQL也可以在内存中容纳更多的值。这增加 了找到行而不用读取索引中较多块的可能性。(当然,应该利用一些常识。如仅用列值的第一个字符进行索引是不可能有多大好处的,因为这个索引中不会有许多不 同的值。)

4.利用最左前缀。在创建一个n 列的索引时,实际是创建了MySQL可利用的n 个索引。多列索引可起几个索引的作用,因为可利用索引中最左边的列集来匹配行。这样的列集称为最左前缀。(这与索引一个列的前缀不同,索引一个列的前缀是利用该的前n 个字符作为索引值。)

5.不要过度索引。不要以为索引“越多越好”,什么东西都用索引是错的。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能,这一点我们前面已经介绍 过。在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的时间越长。如果有一个索引很少利用或从不使用,那么会不必要地减缓表 的修改速度。此外,MySQL在生成一个执行计划时,要考虑各个索引,这也要费时间。创建多余的索引给查询优化带来了更多的工作。索引太多,也可能会使 MySQL选择不到所要使用的最好索引。只保持所需的索引有利于查询优化。如果想给已索引的表增加索引,应该考虑所要增加的索引是否是现有多列索引的最左 索引。如果是,则就不要费力去增加这个索引了,因为已经有了。

6.考虑在列上进行的比较类型。索引可用于“ ”、“ = ”、“ = ”、“ > =”、“ > ”和BETWEEN 运算。在模式具有一个直接量前缀时,索引也用于LIKE 运算。如果只将某个列用于其他类型的运算时(如STRCMP( )),对其进行索引没有价值。

btree索引与hash索引

对于BTREE和HASH索引,当使用=、 =>、IN、IS NULL或者IS NOT NULL操作符时,关键元素与常量值的比较关系对应一个范围条件。Hash索引还有一些其它特征:它们只用于使用=或 =>操作符的等式比较(但很快)。优化器不能使用hash索引来加速ORDER BY操作。(该类索引不能用来按顺序搜索下一个条目)。MySQL不能确定在两个值之间大约有多少行(这被范围优化器用来确定使用哪个索引)。如果你将一个MyISAM表改为hash-索引的MEMORY表,会影响一些查询。只能使用整个关键字来搜索一行。(用B-树索引,任何关键字的最左面的前缀可用来找到行)。

对于BTREE索引,当使用>、 、>=、 =、BETWEEN、!=或者 >,或者LIKE 'pattern'(其中 'pattern'不以通配符开始)操作符时,关键元素与常量值的比较关系对应一个范围条件。“常量值”系指:查询字符串中的常量、同一联接中的const或system表中的列、无关联子查询的结果、完全从前面类型的子表达式组成的表达式

下面是一些WHERE子句中有范围条件的查询的例子:

下列范围查询适用于 btree索引和hash索引

SELECT * FROM t1 WHERE key_col = 1 OR key_col IN (15,18,20);

下列范围查询适用于btree索引

SELECT * FROM t1 WHERE key_col > 1 AND key_col 10;

SELECT * FROM t1 WHERE key_col LIKE 'ab%' OR key_col BETWEEN 'bar' AND 'foo';

Mysql如何使用索引

索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据。如果一个表有1000行,这比顺序读取至少快100倍。注意如果你需要访问大部分行,顺序读取要快得多,因为此时我们避免磁盘搜索。

大多数MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)在B树中存储。只是空间列类型的索引使用R-树,并且MEMORY表还支持hash索引。

关于什么情况下数据库会使用索引以及什么情况下数据库不会使用索引的详细解释请看优化篇的相关章节,这里就不再累述。


《深入浅出MySQL数据库开发、优化与管理维护》目录

第一篇开发篇8

第1章 帮助的使用8

1.1 按照层次看帮助8

1.2 快速查阅帮助10

第2章 表类型(存储引擎)的选择11

2.1 Mysql存储引擎概述11

2.2 各种存储引擎的特性11

2.3 如何选择合适的存储引擎12

第3章 选择合适的数据类型13

3.1 选择数据类型的基本原则13

3.2 固定长度数据列与可变长度的数据列13

3.2.1 char与varchar13

3.2.2 text和blob15

3.3 浮点数与定点数15

第4章 字符集16

4.1 字符集概述16

4.2 Mysql支持的字符集简介17

4.3 Unicode简述17

4.4 怎样选择合适的字符集17

4.5 Mysql字符集的设置18

第5章 索引的设计和使用18

5.1 Mysql索引概述18

5.2 设计索引的原则19

5.3 btree索引与hash索引20

5.4 Mysql如何使用索引21

第6章 锁机制和事务控制21

6.1 如何加锁21

6.2 死锁22

6.3 事务控制22

第7章 SQL中的安全问题29

7.1 SQL注入简述29

7.2 开发中可以采取的措施30

7.2.1 prepareStatement + Bind-variable30

7.2.2 使用应用程序提供的转换函数:31

7.2.3 自己定义函数进行校验31

第8章 SQL Mode及相关问题31

8.1 Mysql SQL Mode简介31

8.2 SQL Mode与可移植性33

8.3 SQL Mode与数据效验34

第9章 常用SQL技巧34

9.1 检索包含最大/最小值的行34

9.2 巧用rand()/rand(n)提取随机行34

9.3 利用group by 的with rollup子句做统计35

9.4 用bit group functions做统计36

第10章 其他需注意的问题39

10.1 数据库名、表名大小写问题39

10.2 使用外键需注意的地方41

第二篇 优化篇45

第11章 SQL优化45

11.1 优化SQL的一般步骤45

11.1.1 通过show status和应用特点了解各种SQL的执行频率45

11.1.2 定位执行效率较低的SQL语句:46

11.1.3 通过EXPLAIN分析低效SQL的执行计划:46

11.1.4 确定问题,并采取相应的优化措施:47

11.2 索引问题48

11.2.1 索引的存储分类48

10.2.2MySQL如何使用索引49

10.2.3查看索引使用情况49

11.3 两个简单实用的优化方法50

11.3.1 定期分析表:50

11.3.2 使用optimize table:50

11.4 常用SQL的优化51

11.4.1 大批量插入数据:51

11.4.2 优化insert语句:52

11.4.3 优化group by语句:52

11.4.4 优化order by语句:52

11.4.5 优化join语句:53

11.4.6 mysql如何优化or条件:54

11.4.7 查询优先还是更新(insert、update、delete)优先:54

11.4.8 使用SQL提示:55

11.5 其他优化措施56

第12章 优化数据库对象56

12.1 优化表的数据类型56

12.2 通过拆分,提高表的访问效率57

12.3 逆规范化57

12.4 使用冗余统计表57

12.5 选择更合适的表类型58

第13章 锁问题58

13.1 获取锁等待情况58

13.2 什么情况下使用表锁59

13.3 什么情况下使用行锁59

13.4 insert …select …带来的问题60

13.5 next-key锁对并发插入的影响61

13.6 隔离级别对并发插入的影响61

13.7 如何减少锁冲突62

第14章 优化Mysql Server63

14.1 查看Mysql server当前参数63

14.2 影响Mysql性能的重要参数63

14.2.1 key_buffer_size的设置63

14.2.2 table_cache的设置65

14.2.3 innodb_buffer_pool_size的设置:65

14.2.4 innodb_flush_log_at_trx_commit的设置:65

14.2.5 innodb_additional_mem_pool_size:66

14.2.6 innodb_table_locks:66

14.2.7 innodb_lock_wait_timeout:66

14.2.8 innodb_support_xa:67

14.2.9 innodb_doublewrite:67

14.2.10 innodb_log_buffer_size:67

14.2.11 innodb_log_file_size:67

第15章 I/O问题67

15.1 使用磁盘阵列或虚拟文件卷分布I/O68

15.2 使用Symbolic Links分布I/O68

第16章 应用优化69

16.1 使用连接池69

16.2 减少对Mysql的访问70

16.2.1 避免对同一数据做重复检索:70

16.2.2 使用mysql query cache:70

16.2.3 加cache层:71

16.3 负载均衡71

16.3.1 利用mysql 复制分流查询操作:71

16.3.2 采用分布式数据库架构:71

第三篇 管理维护篇73

第17章 mysql安装升级73

17.1 安装73

17.1.1 安装方法比较73

17.1.2 rpm安装步骤74

17.1.3 二进制安装步骤74

17.2 源码安装步骤75

17.3 源码安装的性能考虑:75

17.3.1 去掉不需要的模块:75

17.3.2 只选择要使用的字符集:76

17.3.3 使用pgcc编译:76

17.3.4 使用静态编译以提高性能:77

17.4 mysql升级77

17.5 mysql降级78

第18章 Mysql日志管理78

18.1 错误日志:78

18.2 BINLOG:79

18.3 查询日志80

18.4 慢查询日志:80

第19章 数据备份与恢复:81

19.1 备份/恢复策略:81

19.2 冷备份:81

19.3 逻辑备份:81

19.4 单个表的备份:82

19.5 使用备份工具ibbackup:82

19.6 时间点恢复:83

19.7 位置恢复:84

19.8 MyISAM表修复:84

第20章 Mysql安全:85

20.1 正确设置目录权限:85

20.2 尽量避免以root权限运行mysql:85

20.3 删除匿名帐号:85

20.4 给mysql root帐号设置口令:86

20.5 设置安全密码并定期修改:86

20.6 只授予帐号必须的权限:86

20.7 除root外,任何用户不应有mysql库user表的存取权限:86

20.8 不要把FILE、PROCESS 或 SUPER权限授予管理员以外的帐号:86

20.9 load data local带来的安全问题:87

20.10 尽量避免通过symlinks访问表:88

20.11 使用merge存储引擎潜藏的安全漏洞:88

20.12 防止DNS欺骗:88

20.13 drop table命令并不收回以前的相关访问授权:88

20.14 使用SSL:88

20.15 如果可能,给所有用户加上访问IP限制:90

20.16 严格控制操作系统帐号和权限:90

20.17 增加防火墙:90

20.18 其他安全设置选项:90

20.18.1 allow-suspicious-udfs:90

20.18.2 old-passwords:90

20.18.3 safe-user-create:91

20.18.4 secure-auth:91

20.18.5 skip-grant-tables:91

20.18.6 skip-networking:91

20.18.7 skip-show-database:91

第21章 Mysql复制:92

21.1 Mysql复制概述:92

21.2 安装配置:92

21.3 日常管理维护:93

21.3.1 经常查看slave状态93

21.3.2 怎样强制主服务器阻塞更新直到从服务器同步?94

21.3.3 master执行的语句在slave上执行失败怎么办?94

21.3.4 Slave上出现log event entry exceeded max_allowed_packet错误怎么办?94

21.3.5 多主复制时,自动增长变量的冲突问题95

21.3.6 怎么样知道slave上现在复制到什么地方了95

21.4 需要注意的问题:95

第22章 Mysql Cluster:95

22.1 Mysql Cluster概述:95

22.2 Mysql Cluster架构:96

22.3 安装配置:96

22.3.1 管理节点配置步骤:96

22.3.2 sql节点和数据节点的配置:98

22.4 管理维护:98

22.4.1 Cluster的启动98

22.4.2 Cluster的关闭99

22.5 数据备份和恢复:99

第23章 Oracle向Mysql数据迁移:100

23.1 数据类型的差异:100

23.2 利用导出文本迁移:100

23.2.1 导出为insert sql文本100

23.2.2 导出为固定格式文本101

23.3 利用工具软件迁移:102

23.4 使用DBA组开发的迁移工具:102

23.5 数据迁移常见问题:103

23.5.1 字符集问题:103

23.5.2 特殊字符处理:103

23.5.3 日期字段的处理:103

23.5.4 如何使迁移过程不被SQL错误中断:104

23.5.5 如何查找产生warnings的原因:104

第24章 应急处理:104

24.1 一般处理流程:104

24.2 忘记root密码:105

24.3 表损坏如何处理:105

24.4 MyISAM表超过4G无法访问:106

24.5 数据目录磁盘空间不足怎么办?106

24.6 如何禁止DNS反向解析?107

第25章 Mysql管理中一些常用的命令和技巧:107

25.1 参数设置方法:107

25.2 mysql.sock丢失后怎么连接数据库?107

25.3 同一台机器运行多个mysql:108

25.4 查看用户权限:109

25.5 修改用户密码:110

25.6 怎样灵活的指定连接的主机:111

25.7 到底匹配哪个符合条件的用户:111

25.8 不进入mysql,怎样运行sql语句?112

25.9 客户端怎么访问内网数据库?113

第一篇

计算机


python
AI人工智能
javascript
计算机网络/服务器
数据库技术
计算机F

考试教辅


考研考博
英语四六级

沪ICP备18046276号-5