第一部分 基础篇 2
1第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第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第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第4章 MySQL中的运算符 69
4.1算术运算符 69
4.2比较运算符 70
4.3逻辑运算符 73
4.4位运算符 75
4.5运算符的优先级 77
4.6小结 78
5第5章 常用函数 79
5.1字符串函数 79
5.2数值函数 82
5.3日期和时间函数 85
5.4流程函数 89
5.5其他常用函数 91
5.6小结 94
6第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
第二部分 开发篇 131
7第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第8章 选择合适的数据类型 147
8.1 CHAR与VARCHAR 147
8.2 TEXT与BLOB 148
8.3浮点数与定点数 152
8.4日期类型选择 154
8.5小结 155
9第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第10章 索引的设计和使用 166
10.1索引概述 166
10.2设计索引的原则 167
10.3 BTREE索引与HASH索引 168
10.4小结 170
11第11章 视图 171
11.1什么是视图 171
11.2视图操作 171
11.2.1创建或者修改视图 171
11.2.2删除视图 173
11.2.3查看视图 174
11.3小结 175
12第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第13章 触发器 195
13.1创建触发器 195
13.2删除触发器 198
13.3查看触发器 198
13.4触发器的使用 200
13.5小结 200
14第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第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第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第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
第三部分 优化篇 254
18第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优化GROUPBY语句 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巧用RANDQ提取随机行 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第19章 优化数据库对象 311
19.1优化表的数据类型 311
19.2通过拆分提高表的访问效率 313
19.3逆规范化 314
19.4使用中间表提高统计查询速度 315
19.5小结 316
20第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第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 le 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第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第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
第四部分 管理维护篇 386
24第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第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第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第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第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第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 Zabbit部署 506
29.3.1 Zabbix Server软件安装 506
29.3.2 Zabbix Server配置与启动 507
29.3.3 配置Zabbix Web服务端 509
29.3.4 ZabbixAgent安装和配置 512
29.3.5 MPM插件介绍和部署 513
29.3.6 Zabbix Web端操作 518
29.4小结 521
30第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
第五部分 架构篇 536
31第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第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第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