本书从数据库的基础、开发、优化、管理4方面对MySQL进行了详细的介绍,其中每一部分都独立成篇,每一篇又包括多个章节。本书面向实用,内容覆盖广泛,讲解由浅入深,适合于各个层次的读者。
基础篇主要适合于MySQL的初学者,主要包括MySQL的安装与配置、SQL基础、MySQL支持的数据类型、MySQL中的运算符、常用函数、图形化工具的使用等内容。
开发篇主要适合于MySQL的设计和开发人员,主要包括表类型(存储引擎)的选择、选择合适的数据类型、字符集、索引的设计和使用、视图、存储过程和函数、触发器、事务控制和锁定语句、SQL中的安全问题、SQL Mode及相关问题等内容。
优化篇主要适合于开发人员和数据库管理员,主要包括常用SQL技巧和常见问题、SQL优化、优化数据库对象、锁问题、优化MySQL Server、磁盘I/O问题、应用优化等内容。
管理维护篇主要适合于数据库管理员,主要包括MySQL高级安装和升级、MySQL中的常用工具、MySQL日志、备份与恢复、MySQL权限与安全、MySQL复制、MySQL Cluster、MySQL常见问题和应用技巧等内容。
本书的作者都是在MySQL方面的资深DBA,本书不但融合了他们丰富的工作经验和多年的使用心得,还提供了大量来自实际工作现场的实例,具有很强的实战性和可操作性。
目 录
第1部分 基础篇
第1章 MySQL的安装与配置 1
1.1 MySQL的下载 1
1.1.1 在Windows平台下下载MySQL 2
1.1.2 在Linux平台下下载MySQL 2
1.2 MySQL的安装 5
1.2.1 在Windows平台下安装MySQL 5
1.2.2 在Linux平台下安装MySQL 10
1.3 MySQL的配置 11
1.3.1 Windows平台下配置MySQL 11
1.3.2 Linux平台下配置MySQL 22
1.4 启动和关闭MySQL服务 22
1.4.1 在Windows平台下启动和关闭MySQL服务 22
1.4.2 在Linux平台下启动和关闭MySQL服务 23
1.5 小结 25
第2章 SQL基础 26
2.1 SQL简介 26
2.2 (My)SQL使用入门 26
2.2.1 SQL分类 26
2.2.2 DDL语句 26
2.2.3 DML语句 35
2.2.4 DCL语句 50
2.3 帮助的使用 51
2.3.1 按照层次看帮助 52
2.3.2 快速查阅帮助 53
2.3.3 常用网址 54
2.4 小结 54
第3章 MySQL支持的数据类型 55
3.1 数值类型 55
3.2 日期时间类型 61
3.3 字符串类型 68
3.3.1 CHAR和VARCHAR类型 69
3.3.2 BINARY和VARBINARY类型 69
3.3.3 ENUM类型 70
3.3.4 SET类型 70
3.4 小结 71
第4章 MySQL中的运算符 72
4.1 算术运算符 72
4.2 比较运算符 73
4.3 逻辑运算符 76
4.4 位运算符 77
4.5 运算符的优先级 79
4.6 小结 80
第5章 常用函数 81
5.1 字符串函数 81
5.2 数值函数 84
5.3 日期和时间函数 86
5.4 流程函数 90
5.5 其他常用函数 92
5.6 小结 95
第6章 图形化工具的使用 96
6.1 MySQL Administrator 96
6.1.1 连接管理 96
6.1.2 健康检查 97
6.1.3 备份管理 99
6.1.4 Catalogs 100
6.2 MySQL Query Brower 101
6.3 phpMyAdmin 102
6.3.1 数据库管理 102
6.3.2 数据库对象管理 103
6.3.3 权限管理 103
6.3.4 导入导出数据 104
6.4 小结 106
第2部分 开发篇
第7章 表类型(存储引擎)的选择 107
7.1 MySQL存储引擎概述 107
7.2 各种存储引擎的特性 109
7.2.1 MyISAM 110
7.2.2 InnoDB 111
7.2.3 MEMORY 116
7.2.4 MERGE 119
7.3 如何选择合适的存储引擎 121
7.4 小结 122
第8章 选择合适的数据类型 123
8.1 CHAR与VARCHAR 123
8.2 TEXT与BLOB 124
8.3 浮点数与定点数 128
8.4 日期类型选择 130
8.5 小结 131
第9章 字符集 132
9.1 字符集概述 132
9.2 Unicode简述 132
9.3 汉字及一些常见字符集 134
9.4 怎样选择合适的字符集 135
9.5 MySQL支持的字符集简介 135
9.6 MySQL字符集的设置 137
9.6.1 服务器字符集和校对规则 137
9.6.2 数据库字符集和校对规则 138
9.6.3 表字符集和校对规则 138
9.6.4 列字符集和校对规则 139
9.6.5 连接字符集和校对规则 139
9.7 字符集的修改步骤 139
9.8 小结 140
第10章 索引的设计和使用 141
10.1 索引概述 141
10.2 设计索引的原则 142
10.3 BTREE索引与HASH索引 143
10.4 小结 144
第11章 视图 145
11.1 什么是视图 145
11.2 视图操作 145
11.2.1 创建或者修改视图 145
11.2.2 删除视图 147
11.2.3 查看视图 147
11.3 小结 149
第12章 存储过程和函数 150
12.1 什么是存储过程和函数 150
12.2 存储过程和函数的相关操作 150
12.2.1 创建、修改存储过程或者函数 150
12.2.2 删除存储过程或者函数 154
12.2.3 查看存储过程或者函数 155
12.2.4 变量的使用 157
12.2.5 定义条件和处理 157
12.2.6 光标的使用 160
12.2.7 流程控制 161
12.3 小结 166
第13章 触发器 167
13.1 创建触发器 167
13.2 删除触发器 170
13.3 查看触发器 170
13.4 触发器的使用 172
13.5 小结 172
第14章 事务控制和锁定语句 173
14.1 LOCK TABLE和UNLOCK TABLE 173
14.2 事务控制 174
14.3 分布式事务的使用 180
14.3.1 分布式事务的原理 180
14.3.2 分布式事务的语法 181
14.3.3 存在的问题 182
14.4 小结 186
第15章 SQL中的安全问题 187
15.1 SQL注入简介 187
15.2 应用开发中可以采取的应对措施 188
15.2.1 PrepareStatement+Bind-variable 188
15.2.2 使用应用程序提供的转换函数 188
15.2.3 自己定义函数进行校验 189
15.3 小结 190
第16章 SQL Mode及相关问题 191
16.1 MySQL SQL Mode简介 191
16.2 常用的SQL Mode 196
16.3 SQL Mode在迁移中如何使用 196
16.4 小结 198
第3部分 优化篇
第17章 常用SQL技巧和常见问题 199
17.1 正则表达式的使用 199
17.2 巧用RAND()提取随机行 202
17.3 利用GROUP BY的WITH ROLLUP子句做统计 203
17.4 用BIT GROUP FUNCTIONS做统计 205
17.5 数据库名、表名大小写问题 207
17.6 使用外键需要注意的问题 207
17.7 小结 209
第18章 SQL优化 210
18.1 优化SQL语句的一般步骤 210
18.1.1 通过show status命令了解各种SQL的执行频率 210
18.1.2 定位执行效率较低的SQL语句 211
18.1.3 通过EXPLAIN分析低效SQL的执行计划: 211
18.1.4 确定问题,并采取相应的优化措施: 212
18.2 索引问题 213
18.2.1 索引的存储分类 213
18.2.2 MySQL如何使用索引 214
18.2.3 查看索引使用情况 218
18.3 两个简单实用的优化方法 219
18.3.1 定期分析表和检查表 219
18.3.2 定期优化表 220
18.4 常用SQL的优化 221
18.4.1 大批量插入数据 221
18.4.2 优化INSERT语句 222
18.4.3 优化GROUP BY语句 223
18.4.4 优化ORDER BY语句: 223
18.4.5 优化嵌套查询 224
18.4.6 MySQL如何优化OR条件 225
18.4.7 使用SQL提示 227
18.5 小结 229
第19章 优化数据库对象 230
19.1 优化表的数据类型 230
19.2 通过拆分提高表的访问效率 232
19.3 逆规范化 233
19.4 使用中间表提高统计查询速度 234
19.5 小结 235
第20章 锁问题 236
20.1 MySQL锁概述 236
20.2 MyISAM表锁 236
20.2.1 查询表级锁争用情况 237
20.2.2 MySQL表级锁的锁模式 237
20.2.3 如何加表锁 238
20.2.4 并发插入(Concurrent Inserts) 240
20.2.5 MyISAM的锁调度 242
20.3 InnoDB锁问题 242
20.3.1 背景知识 242
20.3.2 获取InnoDB行锁争用情况 244
20.3.3 InnoDB的行锁模式及加锁方法 246
20.3.4 InnoDB行锁实现方式 249
20.3.5 间隙锁(Next-Key锁) 253
20.3.6 恢复和复制的需要,对InnoDB锁机制的影响 255
20.3.7 InnoDB在不同隔离级别下的一致性读及锁的差异 260
20.3.8 什么时候使用表锁 262
20.3.9 关于死锁 262
20.4 小结 268
第21章 优化MySQL Server 270
21.1 查看MySQL Server参数 270
21.2 影响MySQL性能的重要参数 273
21.2.1 key_buffer_size的设置 273
21.2.2 table_cache的设置 275
21.2.3 innodb_buffer_pool_size的设置 278
21.2.4 innodb_flush_log_at_trx_commit的设置 278
21.2.5 innodb_additional_mem_pool_size的设置 279
21.2.6 innodb_lock_wait_timeout的设置 279
21.2.7 innodb_support_xa的设置 279
21.2.8 innodb_log_buffer_size的设置 279
21.2.9 innodb_log_file_size的设置 280
21.3 小结 280
第22章 磁盘I/O问题 281
22.1 使用磁盘阵列 281
22.1.1 常见RAID级别及其特性 281
22.1.2 如何选择RAID级别 282
22.2 虚拟文件卷或软RAID 282
22.3 使用Symbolic Links分布I/O 282
22.4 禁止操作系统更新文件的atime属性 283
22.5 用裸设备(Raw Device)存放InnoDB的共享表空间 284
22.6 小结 284
第23章 应用优化 285
23.1 使用连接池 285
23.2 减少对MySQL的访问 285
23.2.1 避免对同一数据做重复检索 285
23.2.2 使用查询缓存 285
23.2.3 增加CACHE层 286
23.3 负载均衡 287
23.3.1 利用MySQL复制分流查询操作 287
23.3.2 采用分布式数据库架构 287
23.4 其他优化措施 287
23.5 小结 288
第4部分 管理维护篇
第24章 MySQL高级安装和升级 289
24.1 Linux/UNIX下的安装 289
24.1.1 安装包比较 289
24.1.2 安装RPM包 290
24.1.3 安装二进制包 290
24.1.4 安装源码包 291
24.1.5 参数设置方法 291
24.2 源码包安装的性能考虑 293
24.2.1 去掉不需要的模块 293
24.2.2 只选择要使用的字符集 293
24.2.3 使用静态编译以提高性能 293
24.3 升级MySQL 294
24.4 MySQL降级 295
24.5 小结 295
第25章 MySQL中的常用工具 296
25.1 mysql(客户端连接工具) 296
25.2 myisampack(MyISAM表压缩工具) 304
25.3 mysqladmin(MySQL管理工具) 306
25.4 mysqlbinlog(日志管理工具) 307
25.5 mysqlcheck(MyISAM表维护工具) 312
25.6 mysqldump(数据导出工具) 313
25.7 mysqlhotcopy(MyISAM表热备份工具) 318
25.8 mysqlimport(数据导入工具) 319
25.9 mysqlshow(数据库对象查看工具) 320
25.10 perror(错误代码查看工具) 322
25.11 replace(文本替换工具) 323
25.12 小结 324
第26章 MySQL日志 325
26.1 错误日志 325
26.2 二进制日志 326
26.2.1 日志的位置和格式 326
26.2.2 日志的读取 326
26.2.3 日志的删除 327
26.2.4 其他选项 330
26.3 查询日志 330
26.3.1 日志的位置和格式 330
26.3.2 日志的读取 331
26.4 慢查询日志 331
26.4.1 文件位置和格式 331
26.4.2 日志的读取 332
26.4.3 其他选项 333
26.5 小结 333
第27章 备份与恢复 335
27.1 备份/恢复策略 335
27.2 逻辑备份和恢复 335
27.2.1 备份 335
27.2.2 完全恢复 336
27.2.3 基于时间点恢复 338
27.2.4 基于位置恢复 338
27.3 物理备份和恢复 338
27.3.1 冷备份 339
27.3.2 热备份 339
27.4 表的导入导出 341
27.4.1 导出 342
27.4.2 导入 345
27.5 小结 349
第28章 MySQL权限与安全 350
28.1 MySQL权限管理 350
28.1.1 权限系统的工作原理 350
28.1.2 权限表的存取 350
28.2 账号管理 353
28.3 MySQL安全问题 363
28.3.1 操作系统相关的安全问题 363
28.3.2 数据库相关的安全问题 366
28.4 其他安全设置选项 384
28.4.1 old-passwords 384
28.4.2 safe-user-create 385
28.4.3 secure-auth 387
28.4.4 skip-grant-tables 387
28.4.5 skip-network 388
28.4.6 skip-show-database 388
28.5 小结 389
第29章 MySQL复制 390
29.1 安装配置 390
29.2 主要复制启动选项 394
29.2.1 log-slave-updates 394
29.2.2 master-connect-retry 394
29.2.3 read-only 394
29.2.4 指定复制的数据库或者表 396
29.2.5 slave-skip-errors 397
29.3 日常管理维护 397
29.3.1 查看从服务器状态 398
29.3.2 主从服务器同步维护 399
29.3.3 从服务器复制出错的处理 399
29.3.4 log event entry exceeded max_allowed_packet的处理 401
29.3.5 多主复制时的自增长变量冲突问题 401
29.3.6 查看从服务器的复制进度 404
29.4 切换主从服务器 406
29.5 小结 407
第30章 MySQL Cluster 408
30.1 MySQL Cluster架构 408
30.2 MySQL Cluster的配置 409
30.2.1 MySQL Cluster的版本支持 409
30.2.2 管理节点配置步骤 410
30.2.3 SQL节点和数据节点的配置 411
30.3 开始使用Cluster 412
30.3.1 Cluster的启动 412
30.3.2 Cluster的测试 414
30.3.3 Cluster的关闭 417
30.4 维护Cluster 418
30.4.1 数据备份 418
30.4.2 数据恢复 419
30.4.3 日志管理 421
30.5 小结 423
第31章 MySQL常见问题和应用技巧 424
31.1 忘记MySQL的root密码 424
31.2 如何处理MyISAM存储引擎的表损坏 425
31.3 MyISAM表超过4GB无法访问的问题 426
31.4 数据目录磁盘空间不足的问题 427
31.4.1 对于MyISAM存储引擎的表 427
31.4.2 对于InnoDB存储引擎的表 428
31.5 DNS反向解析的问题 428
31.6 mysql.sock丢失后如何连接数据库 428
31.7 同一台服务器运行多个MySQL数据库 429
31.8 客户端怎么访问内网数据库 429
31.9 小结 432
互联网的快速发展离不开各种技术和软件的普及与应用。作为开源软件的代表,MySQL数据库随着其功能的日益完善和可靠性的不断提高,已经成为互联网平台上应用广泛的数据库软件。网易公司成立10年以来,推出了众多网民所喜爱的产品与服务,其中MySQL数据库在后台也扮演了重要的角色。在应用MySQL的过程中,我们的工程师曾遇到了形形色色的问题,从开发技巧到管理维护,从性能问题到安全问题。本着交流和分享的精神,他们将多年实践中积累的经验和心得整理出来,编写了《MySQL实用手册》,在网易公司内部进行了交流,受到很大欢迎。在此基础上,他们联系出版机构将实用手册完善后出版,希望和国内更多的MySQL用户分享与交流。
这本书从应用开发、管理优化、系统维护三个角度,由浅入深地介绍了MySQL数据库各方面的知识,还从应用的角度总结了网易工程师遇到的各种问题以及解决方法,对实际工作者具有一定的实践指导意义。值此新书即将出版之际,谨向此书的作者团队表示祝贺,也真诚地期待读者朋友们提出宝贵意见。我们希望“网聚人的力量”,共同为互联网的技术和应用的发展不懈努力。
丁磊
网易公司总裁
无封面