深入浅出MySQL:数据库开发、优化与管理维护(第2版)

深入浅出MySQL:数据库开发、优化与管理维护(第2版)



目录
目 录

第一部分 基础篇

第1章 MySQL的安装与配置 2
1.1 MySQL的下载 2
1.1.1 在Windows平台下下载MySQL 3
1.1.2 在Linux平台下下载MySQL 3
1.2 MySQL的安装 6
1.2.1 在Windows平台下安装MySQL 6
1.2.2 在Linux平台下安装MySQL 10
1.3 MySQL的配置 11
1.3.1 Windows平台下配置MySQL 12
1.3.2 Linux平台下配置MySQL 20
1.4 启动和关闭MySQL服务 20
1.4.1 在Windows平台下启动和关闭MySQL服务 21
1.4.2 在Linux平台下启动和关闭MySQL服务 22
1.5 小结 23

第2章 SQL基础 24
2.1 SQL简介 24
2.2 (My)SQL使用入门 24
2.2.1 SQL分类 24
2.2.2 DDL语句 25
2.2.3 DML语句 33
2.2.4 DCL语句 47
2.3 帮助的使用 48
2.3.1 按照层次看帮助 48
2.3.2 快速查阅帮助 49
2.3.3 常用的网络资源 50
2.4 查询元数据信息 51
2.5 小结 51

第3章 MySQL支持的数据类型 52
3.1 数值类型 52
3.2 日期时间类型 58
3.3 字符串类型 65
3.3.1 CHAR和VARCHAR类 66
3.3.2 BINARY和VARBINARY类型 66
3.3.3 ENUM类型 67
3.3.4 SET类型 68
3.4 小结 68

第4章 MySQL中的运算符 69
4.1 算术运算符 69
4.2 比较运算符 70
4.3 逻辑运算符 73
4.4 位运算符 75
4.5 运算符的优先级 77
4.6 小结 78

第5章 常用函数 79
5.1 字符串函数 79
5.2 数值函数 82
5.3 日期和时间函数 85
5.4 流程函数 89
5.5 其他常用函数 91
5.6 小结 94

第6章 图形化工具的使用 95
6.1 MySQL Workbench 95
6.1.1 SQL开发 95
6.1.2 数据建模 105
6.1.3 服务器管理 112
6.1.4 MySQL Utilities 120
6.2 phpMyAdmin 124
6.2.1 数据库管理 124
6.2.2 数据库对象管理 125
6.2.3 权限管理 126
6.2.4 导入导出数据 126
6.3 小结 129

第二部分 开发篇

第7章 表类型(存储引擎)的选择 131
7.1 MySQL存储引擎概述 131
7.2 各种存储引擎的特性 133
7.2.1 MyISAM 134
7.2.2 InnoDB 135
7.2.3 MEMORY 140
7.2.4 MERGE 142
7.2.5 TokuDB 145
7.3 如何选择合适的存储引擎 146
7.4 小结 146

第8章 选择合适的数据类型 147
8.1 CHAR与VARCHAR 147
8.2 TEXT与BLOB 148
8.3 浮点数与定点数 152
8.4 日期类型选择 154
8.5 小结 155

第9章 字符集 156
9.1 字符集概述 156
9.2 Unicode简述 156
9.3 汉字及一些常见字符集 158
9.4 怎样选择合适的字符集 159
9.5 MySQL支持的字符集简介 160
9.6 MySQL字符集的设置 161
9.6.1 服务器字符集和校对规则 162
9.6.2 数据库字符集和校对规则 162
9.6.3 表字符集和校对规则 163
9.6.4 列字符集和校对规则 164
9.6.5 连接字符集和校对规则 164
9.7 字符集的修改步骤 164
9.8 小结 165

第10章 索引的设计和使用 166
10.1 索引概述 166
10.2 设计索引的原则 167
10.3 BTREE索引与HASH索引 168
10.4 小结 170

第11章 视图 171
11.1 什么是视图 171
11.2 视图操作 171
11.2.1 创建或者修改视图 171
11.2.2 删除视图 173
11.2.3 查看视图 174
11.3 小结 175

第12章 存储过程和函数 176
12.1 什么是存储过程和函数 176
12.2 存储过程和函数的相关操作 176
12.2.1 创建、修改存储过程或者函数 176
12.2.2 删除存储过程或者函数 180
12.2.3 查看存储过程或者函数 181
12.2.4 变量的使用 182
12.2.5 定义条件和处理 183
12.2.6 光标的使用 186
12.2.7 流程控制 187
12.2.8 事件调度器 191
12.3 小结 193

第13章 触发器 195
13.1 创建触发器 195
13.2 删除触发器 198
13.3 查看触发器 198
13.4 触发器的使用 200
13.5 小结 200

第14章 事务控制和锁定语句 201
14.1 LOCK TABLE和UNLOCK TABLE 201
14.2 事务控制 202
14.3 分布式事务的使用 208
14.3.1 分布式事务的原理 208
14.3.2 分布式事务的语法 208
14.3.3 存在的问题 210
14.4 小结 213

第15章 SQL中的安全问题 214
15.1 SQL注入简介 214
15.2 应用开发中可以采取的应对措施 215
15.2.1 PrepareStatement+Bind-Variable 215
15.2.2 使用应用程序提供的转换函数 217
15.2.3 自己定义函数进行校验 217
15.3 小结 218

第16章 SQL Mode及相关问题 219
16.1 MySQL SQL Mode简介 219
16.2 SQL Mode的常见功能 221
16.3 常用的SQL Mode 224
16.4 SQL Mode在迁移中如何使用 224
16.5 小结 225

第17章 MySQL分区 226
17.1 分区概述 226
17.2 分区类型 227
17.2.1 Range分区 229
17.2.2 List分区 231
17.2.3 Columns分区 232
17.2.4 Hash分区 235
17.2.5 Key分区 239
17.2.6 子分区 240
17.2.7 MySQL分区处理NULL值的方式 241
17.3 分区管理 243
17.3.1 RANGE&LIST分区管理 244
17.3.2 HASH&KEY分区管理 251
17.4 小结 252

第三部分 优化篇

第18章 SQL优化 254
18.1 优化SQL语句的一般步骤 254
18.1.1 通过show status命令了解各种SQL的执行频率 254
18.1.2 定位执行效率较低的SQL语句 255
18.1.3 通过EXPLAIN分析低效SQL的执行计划 256
18.1.4 通过show profile分析SQL 262
18.1.5 通过trace分析优化器如何选择执行计划 266
18.1.6 确定问题并采取相应的优化措施 271
18.2 索引问题 272
18.2.1 索引的存储分类 272
18.2.2 MySQL如何使用索引 273
18.2.3 查看索引使用情况 284
18.3 两个简单实用的优化方法 284
18.3.1 定期分析表和检查表 284
18.3.2 定期优化表 286
18.4 常用SQL的优化 287
18.4.1 大批量插入数据 287
18.4.2 优化INSERT语句 288
18.4.3 优化ORDER BY语句 289
18.4.4 优化GROUP BY语句 293
18.4.5 优化嵌套查询 294
18.4.6 MySQL如何优化OR条件 295
18.4.7 优化分页查询 297
18.4.8 使用SQL提示 299
18.5 常用SQL技巧 301
18.5.1 正则表达式的使用 301
18.5.2 巧用RAND()提取随机行 304
18.5.3 利用GROUP BY的WITH ROLLUP子句 305
18.5.4 用BIT GROUP FUNCT IONS做统计 306
18.5.5 数据库名、表名大小写问题 308
18.5.6 使用外键需要注意的问题 309
18.6 小结 310

第19章 优化数据库对象 311
19.1 优化表的数据类型 311
19.2 通过拆分提高表的访问效率 313
19.3 逆规范化 314
19.4 使用中间表提高统计查询速度 315
19.5 小结 316

第20章 锁问题 317
20.1 MySQL锁概述 317
20.2 MyISAM表锁 318
20.2.1 查询表级锁争用情况 318
20.2.2 MySQL表级锁的锁模式 318
20.2.3 如何加表锁 319
20.2.4 并发插入(Concurrent Inserts) 322
20.2.5 MyISAM的锁调度 323
20.3 InnoDB锁问题 324
20.3.1 背景知识 324
20.3.2 获取InnoDB行锁争用情况 326
20.3.3 InnoDB的行锁模式及加锁方法 328
20.3.4 InnoDB行锁实现方式 331
20.3.5 Next-Key锁 335
20.3.6 恢复和复制的需要,对InnoDB锁机制的影响 337
20.3.7 InnoDB在不同隔离级别下的一致性读及锁的差异 341
20.3.8 什么时候使用表锁 343
20.3.9 关于死锁 343
20.4 小结 349

第21章 优化MySQL Server 351
21.1 MySQL体系结构概览 351
21.2 MySQL内存管理及优化 352
21.2.1 内存优化原则 353
21.2.2 MyISAM内存优化 353
21.2.3 InnoDB内存优化 356
21.2.4 调整用户服务线程排序缓存区 359
21.2 InnoDB log机制及优化 360
21.3.1 InnoDB重做日志 360
21.3.2 innodb_flush_log_at_trx_commit的设置 361
21.3.3 设置log file size,控制检查点 362
21.3.4 调整innodb_log_buffer_size 363
21.2 调整MySQL并发相关的参数 364
21.4.1 调整max_connections,提高并发连接 364
21.4.2 调整back_log 364
21.4.3 调整table_open_cache 364
21.4.4 调整thread_cache_size 365
21.4.5 innodb_lock_wait_timeout的设置 365
21.5 小结 365

第22章 磁盘I/O问题 366
22.1 使用磁盘阵列 366
22.1.1 常见RAID级别及其特性 366
22.1.2 如何选择RAID级别 367
22.2 虚拟文件卷或软RAID 367
22.3 使用Symbolic Links分布I/O 368
22.4 禁止操作系统更新文件的atime属性 369
22.5 用裸设备(Raw Device)存放InnoDB的共享表空间 369
22.6 调整I/O调度算法 370
22.7 RAID卡电池充放电问题 372
22.7.1 什么是RAID卡电池充放电 372
22.7.2 RAID卡缓存策略 373
22.7.3 如何应对RAID卡电池充放电带来的I/O性能波动 375
22.8 NUMA架构优化 376
22.9 小结 380

第23章 应用优化 381
23.1 使用连接池 381
23.2 减少对MySQL的访问 381
23.2.1 避免对同一数据做重复检索 381
23.2.2 使用查询缓存 382
23.2.3 增加CACHE层 383
23.3 负载均衡 383
23.3.1 利用MySQL复制分流查询操作 383
23.3.2 采用分布式数据库架构 384
23.4 其他优化措施 384
23.5 小结 384

第四部分 管理维护篇

第24章 MySQL高级安装和升级 386
24.1 Linux/UNIX平台下的安装 386
24.1.1 安装包比较 386
24.1.2 安装RPM包 387
24.1.3 安装二进制包 387
24.1.4 安装源码包 388
24.1.5 参数设置方法 389
24.2 源码包安装的性能考虑 390
24.2.1 去掉不需要的模块 390
24.2.2 只选择要使用的字符集 391
24.2.3 使用静态编译以提高性能 391
24.3 升级MySQL 391
24.4 MySQL降级 393
24.5 小结 393

第25章 MySQL中的常用工具 394
25.1 mysql(客户端连接工具) 394
25.1.1 连接选项 395
25.1.2 客户端字符集选项 397
25.1.3 执行选项 398
25.1.4 格式化选项 399
25.1.5 错误处理选项 399
25.2 myisampack(MyISAM表压缩工具) 402
25.3 mysqladmin(MySQL管理工具) 404
25.4 mysqlbinlog(日志管理工具) 405
25.5 mysqlcheck(MyISAM表维护工具) 410
25.6 mysqldump(数据导出工具) 411
25.6.1 连接选项 411
25.6.2 输出内容选项 411
25.6.3 输出格式选项 412
25.6.4 字符集选项 414
25.6.5 其他常用选项 415
25.7 mysqlhotcopy(MyISAM表热备份工具) 415
25.8 mysqlimport(数据导入工具) 417
25.9 mysqlshow(数据库对象查看工具) 417
25.10 perror(错误代码查看工具) 420
25.11 replace(文本替换工具) 420
25.12 小结 421

第26章 MySQL日志 422
26.1 错误日志 422
26.2 二进制日志 423
26.2.1 日志的位置和格式 423
26.2.2 日志的读取 424
26.2.3 日志的删除 425
26.2.4 其他选项 428
26.3 查询日志 428
26.3.1 日志的位置和格式 428
26.3.2 日志的读取 429
26.4 慢查询日志 430
26.4.1 文件位置和格式 430
26.4.2 日志的读取 430
26.5 mysqlsla简介 433
26.6 小结 435

第27章 备份与恢复 436
27.1 备份/恢复策略 436
27.2 逻辑备份和恢复 437
27.2.1 备份 437
27.2.2 完全恢复 438
27.2.3 基于时间点恢复 439
27.2.4 基于位置恢复 440
27.3 物理备份和恢复 440
27.3.1 冷备份 440
27.3.2 热备份 441
27.4 表的导入导出 452
27.4.1 导出 452
27.4.2 导入 456
27.5 小结 460

第28章 MySQL权限与安全 461
28.1 MySQL权限管理 461
28.1.1 权限系统的工作原理 461
28.1.2 权限表的存取 462
28.1.3 账号管理 464
28.2 MySQL安全问题 476
28.2.1 操作系统相关的安全问题 476
28.2.2 数据库相关的安全问题 479
28.3 其他安全设置选项 495
28.3.1 old-passwords 495
28.3.2 safe-user-create 496
28.3.3 secure-auth 497
28.3.4 skip-grant-tables 498
28.3.5 skip-network 498
28.3.6 skip-show-database 499
28.4 小结 499

第29章 MySQL监控 500
29.1 如何选择一个监控方案 500
29.1.1 选择何种监控方式 500
29.1.2 如何选择适合自己的监控工具 501
29.2 常用网络监控工具 501
29.2.1 Cacti简介 501
29.2.2 Nagios简介 503
29.2.3 Zabbix简介 504
29.2.4 几种常见开源软件比较 506
29.3 Zabbix 部署 506
29.3.1 Zabbix Server软件安装 506
29.3.2 Zabbix Server配置与启动 507
29.3.3 配置Zabbix Web服务端 509
29.3.4 Zabbix Agent安装和配置 512
29.3.5 MPM插件介绍和部署 513
29.3.6 Zabbix Web端操作 518
29.4 小结 521

第30章 MySQL常见问题和应用技巧 522
30.1 忘记MySQL的root密码 522
30.2 如何处理MyISAM存储引擎的表损坏 523
30.2.1 方法一:使用myisamchk工具 523
30.2.2 方法二:使用SQL命令 524
30.3 MyISAM表超过4GB无法访问的问题 524
30.4 数据目录磁盘空间不足的问题 525
30.4.1 对于MyISAM存储引擎的表 525
30.4.2 对于InnoDB存储引擎的表 526
30.5 DNS反向解析的问题 526
30.6 mysql.sock丢失后如何连接数据库 527
30.7 同一台服务器运行多个MySQL数据库 527
30.8 客户端怎么访问内网数据库 528
30.8.1 方法一:使用SecureCRT客户端工具 528
30.8.2 方法二:使用MySQL Proxy工具 531
30.9 小结 534

第五部分 架构篇

第31章 MySQL复制 536
31.1 复制概述 536
31.1.1 复制中的各类文件 538
31.1.2 三种复制方式 540
31.1.3 复制的3种常见架构 544
31.2 复制搭建过程 547
31.2.1 异步复制 547
31.2.2 半同步复制(Semi-synchronous Replication) 552
31.3 主要复制启动选项 560
31.3.1 log-slave-updates 560
31.3.2 master-connect-retry 560
31.3.3 read-only 561
31.3.4 指定复制的数据库或者表 562
31.3.5 slave-skip-errors 563
31.4 日常管理维护 564
31.4.1 查看从库状态 564
31.4.2 主从库同步维护 565
31.4.3 从库复制出错的处理 566
31.4.4 log event entry exceeded max_allowed_packet的处理 567
31.4.5 多主复制时的自增长变量冲突问题 568
31.4.6 查看从库的复制进度 570
31.4.7 如何提高复制的性能 571
31.5 切换主从库 576
31.6 小结 577

第32章 MySQL Cluster 578
32.1 MySQL Cluster架构 578
32.2 MySQL Cluster的配置 579
32.2.1 MySQL Cluster的版本支持 580
32.2.2 管理节点配置步骤 581
32.2.3 SQL节点和数据节点的配置 582
32.3 开始使用Cluster 582
32.3.1 Cluster的启动 582
32.3.2 Cluster的测试 584
32.3.3 Cluster的关闭 588
32.4 维护Cluster 589
32.4.1 数据备份 589
32.4.2 数据恢复 590
32.4.3 日志管理 592
32.5 小结 594

第33章 高可用架构 595
33.1 MMM架构 595
33.2 MHA架构 605
33.3 安装部署MHA 607
33.3.1 安装MHA node(在所有的MySQL服务器上安装) 607
33.3.2 安装MHA Manager 608
33.3.3 配置SSH登录无密码验证 609
33.3.4 搭建主从复制环境 610
33.3.5 配置MHA 611
33.3.6 检查SSH的配置 613
33.3.7 检查整个复制环境状况 614
33.3.8 检查MHA Manager的状态 615
33.3.9 开启MHA Manager监控 615
33.3.10 查看启动日志 615
33.3.11 关闭MHA Manager监控 616
33.3.12 VIP配置 616
33.3.13 自动Failover 624
33.3.14 网络问题触发的Failover操作 631
33.3.15 手动Failover 633
33.3.16 在线进行切换 634
33.3.17 修复宕机的Master 635
33.4 小结 635
内容介绍
《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》从数据库的基础、开发、优化、管理维护和架构5个方面对MySQL进行了详细的介绍,每一部分都独立成篇。基础篇主要适合于MySQL的初学者阅读,包括MySQL的安装与配置、SQL基础、MySQL支持的数据类型、MySQL中的运算符、常用函数、图形化工具的使用等内容。开发篇主要适合于MySQL的设计和开发人员阅读,内容包括表类型(存储引擎)的选择、选择合适的数据类型、字符集、索引的设计和使用、视图、存储过程和函数、触发器、事务控制和锁定语句、SQL中的安全问题、SQL Mode及相关问题、分区等。优化篇主要适合于开发人员和数据库管理员阅读,内容包括SQL优化、优化数据库对象、锁问题、优化MySQL Server、磁盘I/O问题、应用优化等。管理维护篇主要适合于数据库管理员阅读,内容包括MySQL高级安装和升级、MySQL中的常用工具、MySQL日志、备份与恢复、MySQL权限与安全、MySQL监控、MySQL常见问题和应用技巧等。架构篇主要适合高级数据库管理人员和数据库架构设计师阅读,包括MySQL复制、MySQL Cluster、高可用架构等内容。   《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》的作者都是MySQL方面的资深DBA。本书不但融入了他们丰富的工作经验和多年的使用心得,还提供了大量来自工作现场的实例,具有很强的实战性和可操作性。  《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》内容实用,覆盖广泛,讲解由浅入深,适合数据库管理人员、数据库开发人员、系统维护人员、数据库初学者及其他数据库从业人员阅读,也适合用作大中专院校相关专业师生的参考用书和相关培训机构的培训教材。
作者介绍
唐汉明,网易公司技术部副总监。2000年加入网易公司,历任技术部高级DBA、软件开发组经理、DBA组经理等职位,曾负责多个大型核心数据库的管理维护,并作为核心成员参加了许多重要项目的设计实施,在数据库开发及管理维护等方面具有丰富的经验。 翟振兴,网易公司技术部高级DBA,具有Oracle OCP证书。曾参与某省级电力集团营销MIS系统的设计与开发工作,后逐渐转向数据库管理维护领域。加入网易公司后,负责公司多个核心数据库的管理维护工作,在数据库优化、开发支持等方面,积累了丰富的经验。关宝军,网易技术部高级DBA。曾从事电信行业大型BOSS系统的开发及数据库管理维护工作。加入网易公司后,负责多个重要数据库管理维护,并参与了公司多个重要项目的计划、开发及实施。在数据库性能优化、问题诊断、集群技术应用等方面有丰富的实践经验。 王洪权,网易技术部DBA,具有Oracle 10g OCP,曾任职于某知名大型游戏公司,负责海量数据库的运维和优化,加入网易公司后,主要负责MySQL的运维管理工作,在MySQL性能优化、故障诊断和高可用系统架构方面有丰富的实战经验。 黄潇,2005年大学毕业后先从事Java开发,后转向数据库管理,2008年获得Oracle 10g OCP证书,2009年加入网易从事数据库维护工作,熟悉Oracle和MySQL的日常维护管理,爱好数据库优化,致力于做一名有意思的IT“民工”。
关联推荐
最畅销的MySQL原创图书之一,网易技术部DBA组时隔5年再献力作,把MySQL用到极致的最佳实践