內容簡介
基礎篇主要適合於MySQL的初學者,內容包括MySQL的安裝與配置、SQL基礎、MySQL支持的數據類型、MySQL中的運算符、常用函式、圖形化工具的使用等。開發篇主要適合於MySQL的設計和開發人員,內容包括表類型(存儲引擎)的選擇、選擇合適的數據類型、字元集、索引的設計和使用、視圖、存儲過程和函式、觸發器、事務控制和鎖定語句、SQL中的安全問題、SQLMode及相關問題等。最佳化篇主要適合於開發人員和資料庫管理員,內容包括常用SQL技巧和常見問題、SQL最佳化、最佳化資料庫對象、鎖問題、最佳化MySQLServer、磁碟I/O問題、套用最佳化等。管理維護篇主要適合於資料庫管理員,內容包括MySQL高級安裝和升級、MySQL中的常用工具、MySQL日誌、備份與恢復、MySQL許可權與安全、MySQL複製、MySQLCluster、MySQL常見問題和套用技巧等。
《深入淺出MySQL資料庫開發、最佳化與管理維護》的作者都是MySQL方面的資深DBA。《深入淺出MySQL資料庫開發、最佳化與管理維護》不但融入了他們豐富的工作經驗和多年的使用心得,還提供了大量來自工作現場的實例,具有很強的實戰性和可操作性。
《深入淺出MySQL資料庫開發、最佳化與管理維護》適用於資料庫管理人員、資料庫開發人員、系統維護人員、資料庫初學者及其他資料庫從業人員,也可以作為大中專院校相關專業師生的參考用書和相關培訓機構的培訓教材。
作者簡介
唐漢明
網易公司技術部DBA組經理。2000年加入網易公司,歷任技術部高級DBA、軟體開發組經理、DBA組經理等職位,負責多個大型核心資料庫的管理維護,並作為核心成員參加了許多重要項目的設計實施,在資料庫開發及管理維護等方面具有豐富的經驗。
翟振興
網易公司技術部高級DBA,具有OracleOCP認證。曾參與某省級電力集團行銷MIS系統的設計與開發工作,後逐漸轉向資料庫管理維護領域。加入網易公司後,負責公司多個核心資料庫的管理維護工作,在資料庫最佳化、開發支持等方面,積累了豐富的經驗。
蘭麗華
網易公司技術部高級DBA,具有OracleOCP和IBMDB2DBA認證。曾任職於某大型國企,作為核心成員參與上海稅務項目的開發,該項目被列為2004年上海市科技成果。加入網易公司後,負責多個核心資料庫的管理維護工作,在資料庫最佳化和SQL調優方面具有豐富經驗。
關寶軍
網易技術部高級DBA。曾從事電信行業大型BOSS系統的開發及資料庫管理維護工作。加入網易公司後,負責多個重要資料庫管理維護,並參與了公司多個重要項目的計畫、開發及實施。在資料庫性能最佳化、問題診斷、集群技術套用等方面有豐富的實踐經驗。
申寶柱
網易公司技術部高級DBA,具有OracleOCP認證。曾參與某著名公司大型醫院管理系統的開發工作,後致力於資料庫方向的套用實踐。加入網易公司後,先後負責商務智慧型方面的開發和大型資料庫的管理維護,在數據倉庫建設和數據挖掘等方面有豐富的項目經驗。
編輯推薦
從開發、最佳化和管理維護3個角度逐步深入,融合了資深專家金戈鐵馬年工作實踐的積累和經驗,不但總結了套用MySQL資料庫時遇到的各種問題及其解決辦法,還強調了開發人員和資料庫人員必備的知識、技能。
目錄
第1部分 基礎篇
第1章 MySQL的安裝與配置 3
1.1 MySQL的下載 3
1.1.1 在Windows平台下下載MySQL 4
1.1.2 在Linux平台下下載MySQL 4
1.2 MySQL的安裝 7
1.2.1 在Windows平台下安裝MySQL 7
1.2.2 在Linux平台下安裝MySQL 11
1.3 MySQL的配置 12
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基礎 25
2.1 SQL簡介 25
2.2 (My)SQL使用入門 25
2.2.1 SQL分類 25
2.2.2 DDL語句 26
2.2.3 DML語句 35
2.2.4 DCL語句 51
2.3 幫助的使用 52
2.3.1 按照層次看幫助 53
2.3.2 快速查閱幫助 54
2.3.3 常用的網路資源 55
2.4 小結 55
第3章 MySQL支持的數據類型 57
3.1 數值類型 57
3.2 日期時間類型 64
3.3 字元串類型 71
3.3.1 CHAR和VARCHAR類型 72
3.3.2 BINARY和VARBINARY類型 72
3.3.3 ENUM類型 73
3.3.4 SET類型 74
3.4 小結 74
第4章 MySQL中的運算符 77
4.1 算術運算符 77
4.2 比較運算符 78
4.3 邏輯運算符 82
4.4 位運算符 83
4.5 運算符的優先權 85
4.6 小結 86
第5章 常用函式 87
5.1 字元串函式 87
5.2 數值函式 90
5.3 日期和時間函式 93
5.4 流程函式 97
5.5 其他常用函式 100
5.6 小結 103
第6章 圖形化工具的使用 105
6.1 MySQLAdministrator 105
6.1.1 連線管理 106
6.1.2 健康檢查 107
6.1.3 備份管理 108
6.1.4 Catalogs 109
6.2 MySQLQueryBrower 110
6.3 phpMyAdmin 111
6.3.1 資料庫管理 112
6.3.2 資料庫對象管理 113
6.3.3 許可權管理 113
6.3.4 導入導出數據 114
6.4 小結 116
第2部分 開發篇
第7章 表類型(存儲引擎)的選擇 119
7.1 MySQL存儲引擎概述 119
7.2 各種存儲引擎的特性 122
7.2.1 MyISAM 122
7.2.2 InnoDB 124
7.2.3 MEMORY 129
7.2.4 MERGE 131
7.3 如何選擇合適的存儲引擎 134
7.4 小結 135
第8章 選擇合適的數據類型 137
8.1 CHAR與VARCHAR 137
8.2 TEXT與BLOB 138
8.3 浮點數與定點數 142
8.4 日期類型選擇 145
8.5 小結 145
第9章 字元集 147
9.1 字元集概述 147
9.2 Unicode簡述 147
9.3 漢字及一些常見字元集 149
9.4 怎樣選擇合適的字元集 150
9.5 MySQL支持的字元集簡介 150
9.6 MySQL字元集的設定 152
9.6.1 伺服器字元集和校對規則 152
9.6.2 資料庫字元集和校對規則 153
9.6.3 表字元集和校對規則 154
9.6.4 列字元集和校對規則 154
9.6.5 連線字元集和校對規則 154
9.7 字元集的修改步驟 155
9.8 小結 156
第10章 索引的設計和使用 157
10.1 索引概述 157
10.2 設計索引的原則 158
10.3 BTREE索引與HASH索引 159
10.4 小結 161
第11章 視圖 163
11.1 什麼是視圖 163
11.2 視圖操作 163
11.2.1 創建或者修改視圖 163
11.2.2 刪除視圖 165
11.2.3 查看視圖 166
11.3 小結 167
第12章 存儲過程和函式 169
12.1 什麼是存儲過程和函式 169
12.2 存儲過程和函式的相關操作 169
12.2.1 創建、修改存儲過程或者函式 169
12.2.2 刪除存儲過程或者函式 174
12.2.3 查看存儲過程或者函式 174
12.2.4 變數的使用 176
12.2.5 定義條件和處理 177
12.2.6 游標的使用 180
12.2.7 流程控制 181
12.3 小結 185
第13章 觸發器 187
13.1 創建觸發器 187
13.2 刪除觸發器 190
13.3 查看觸發器 190
13.4 觸發器的使用 192
13.5 小結 193
第14章 事務控制和鎖定語句 195
14.1 LOCKTABLE和UNLOCKTABLE 195
14.2 事務控制 196
14.3 分散式事務的使用 202
14.3.1 分散式事務的原理 202
14.3.2 分散式事務的語法 203
14.3.3 存在的問題 204
14.4 小結 208
第15章 SQL中的安全問題 209
15.1 SQL注入簡介 209
15.2 套用開發中可以採取的應對措施 210
15.2.1 PrepareStatement+Bind-variable 210
15.2.2 使用應用程式提供的轉換函式 211
15.2.3 自己定義函式進行校驗 211
15.3 小結 212
第16章 SQLMode及相關問題 213
16.1 MySQLSQLMode簡介 213
16.2 常用的SQLMode 218
16.3 SQLMode在遷移中如何使用 219
16.4 小結 220
第3部分 最佳化篇
第17章 常用SQL技巧和常見問題 223
17.1 正則表達式的使用 223
17.2 巧用RAND()提取隨機行 226
17.3 利用GROUPBY的WITHROLLUP子句做統計 227
17.4 用BITGROUPFUNCTIONS做統計 229
17.5 資料庫名、表名大小寫問題 231
17.6 使用外鍵需要注意的問題 232
17.7 小結 233
第18章 SQL最佳化 235
18.1 最佳化SQL語句的一般步驟 235
18.1.1 通過showstatus命令了解各種SQL的執行頻率 235
18.1.2 定位執行效率較低的SQL語句 236
18.1.3 通過EXPLAIN分析低效SQL的執行計畫 236
18.1.4 確定問題並採取相應的最佳化措施 238
18.2 索引問題 239
18.2.1 索引的存儲分類 239
18.2.2 MySQL如何使用索引 239
18.2.3 查看索引使用情況 244
18.3 兩個簡單實用的最佳化方法 245
18.3.1 定期分析表和檢查表 245
18.3.2 定期最佳化表 246
18.4 常用SQL的最佳化 247
18.4.1 大批量插入數據 247
18.4.2 最佳化INSERT語句 249
18.4.3 最佳化GROUPBY語句 249
18.4.4 最佳化ORDERBY語句 250
18.4.5 最佳化嵌套查詢 250
18.4.6 MySQL如何最佳化OR條件 252
18.4.7 使用SQL提示 254
18.5 小結 256
第19章 最佳化資料庫對象 257
19.1 最佳化表的數據類型 257
19.2 通過拆分提高表的訪問效率 259
19.3 逆規範化 260
19.4 使用中間表提高統計查詢速度 261
19.5 小結 262
第20章 鎖問題 263
20.1 MySQL鎖概述 263
20.2 MyISAM表鎖 263
20.2.1 查詢表級鎖爭用情況 264
20.2.2 MySQL表級鎖的鎖模式 264
20.2.3 如何加表鎖 265
20.2.4 並發插入(ConcurrentInserts) 268
20.2.5 MyISAM的鎖調度 269
20.3 InnoDB鎖問題 270
20.3.1 背景知識 270
20.3.2 獲取InnoDB行鎖爭用情況 272
20.3.3 nnoDB的行鎖模式及加鎖方法 273
20.3.4 InnoDB行鎖實現方式 277
20.3.5 間隙鎖(Next-Key鎖) 281
20.3.6 恢復和複製的需要,對InnoDB鎖機制的影響 282
20.3.7 InnoDB在不同隔離級別下的一致性讀及鎖的差異 287
20.3.8 什麼時候使用表鎖 288
20.3.9 關於死鎖 288
20.4 小結 295
第21章 最佳化MySQLServer 297
21.1 查看MySQLServer參數 297
21.2 影響MySQL性能的重要參數 300
21.2.1 key_buffer_size的設定 301
21.2.2 table_cache的設定 303
21.2.3 innodb_buffer_pool_size的設定 305
21.2.4 innodb_flush_log_at_trx_commit的設定 306
21.2.5 innodb_additional_mem_pool_size的設定 306
21.2.6 innodb_lock_wait_timeout的設定 307
21.2.7 innodb_support_xa的設定 307
21.2.8 innodb_log_buffer_size的設定 307
21.2.9 innodb_log_file_size的設定 308
21.3 小結 308
第22章 磁碟I/O問題 309
22.1 使用磁碟陣列 309
22.1.1 常見RAID級別及其特性 309
22.1.2 如何選擇RAID級別 310
22.1.3 虛擬檔案卷或軟RAID 310
22.2 使用SymbolicLinks分布I/O 310
22.3 禁止作業系統更新檔案的atime屬性 311
22.4 用裸設備(RawDevice)存放InnoDB的共享表空間 312
22.5 小結 312
第23章 套用最佳化 313
23.1 使用連線池 313
23.2 減少對MySQL的訪問 313
23.2.1 避免對同一數據做重複檢索 313
23.2.2 使用查詢快取 314
23.2.3 增加CACHE層 315
23.3 負載均衡 315
23.3.1 利用MySQL複製分流查詢操作 315
23.3.2 採用分散式資料庫架構 316
23.4 其他最佳化措施 316
23.5 小結 316
第4部分 管理維護篇
第24章 MySQL高級安裝和升級 319
24.1 Linux/UNIX平台下的安裝 319
24.1.1 安裝包比較 319
24.1.2 安裝RPM包 320
24.1.3 安裝二進制包 320
24.1.4 安裝源碼包 321
24.1.5 參數設定方法 322
24.2 源碼包安裝的性能考慮 323
24.2.1 去掉不需要的模組 323
24.2.2 只選擇要使用的字元集 324
24.2.3 使用靜態編譯以提高性能 324
24.3 升級MySQL 324
24.4 MySQL降級 326
24.5 小結 326
第25章 MySQL中的常用工具 327
25.1 mysql(客戶端連線工具) 327
25.1.1 連線選項 327
25.1.2 客戶端字元集選項 330
25.1.3 執行選項 331
25.1.4 格式化選項 332
25.1.5 錯誤處理選項 333
25.2 myisampack(MyISAM表壓縮工具) 336
25.3 mysqladmin(MySQL管理工具) 338
25.4 mysqlbinlog(日誌管理工具) 339
25.5 mysqlcheck(MyISAM表維護工具) 345
25.6 mysqldump(數據導出工具) 346
25.7 mysqlhotcopy(MyISAM表熱備份工具) 350
25.8 mysqlimport(數據導入工具) 352
25.9 mysqlshow(資料庫對象查看工具) 352
25.10 perror(錯誤代碼查看工具) 355
25.11 replace(文本替換工具) 356
25.12 小結 357
第26章 MySQL日誌 359
26.1 錯誤日誌 359
26.2 二進制日誌 360
26.2.1 日誌的位置和格式 360
26.2.2 日誌的讀取 360
26.2.3 日誌的刪除 361
26.2.4 其他選項 364
26.3 查詢日誌 365
26.3.1 日誌的位置和格式 365
26.3.2 日誌的讀取 365
26.4 慢查詢日誌 366
26.4.1 檔案位置和格式 366
26.4.2 日誌的讀取 366
26.4.3 其他選項 368
26.5 小結 368
第27章 備份與恢復 371
27.1 備份/恢復策略 371
27.2 邏輯備份和恢復 371
27.2.1 備份 372
27.2.2 完全恢復 373
27.2.3 基於時間點恢復 374
27.2.4 基於位置恢復 375
27.3 物理備份和恢復 375
27.3.1 冷備份 375
27.3.2 熱備份 375
27.4 表的導入導出 378
27.4.1 導出 378
27.4.2 導入 383
27.5 小結 386
第28章 MySQL許可權與安全 387
28.1 MySQL許可權管理 387
28.1.1 許可權系統的工作原理 387
28.1.2 許可權表的存取 387
28.1.3 賬號管理 391
28.2 MySQL安全問題 401
28.2.1 作業系統相關的安全問題 401
28.2.2 資料庫相關的安全問題 404
28.3 其他安全設定選項 423
28.3.1 old-passwords 423
28.3.2 safe-user-create 424
28.3.3 secure-auth 425
28.3.4 skip-grant-tables 426
28.3.5 skip-network 426
28.3.6 skip-show-database 427
28.4 小結 428
第29章 MySQL複製 429
29.1 安裝配置 429
29.2 主要複製啟動選項 433
29.2.1 log-slave-updates 433
29.2.2 master-connect-retry 433
29.2.3 read-only 433
29.2.4 指定複製的資料庫或者表 435
29.2.5 slave-skip-errors 437
29.3 日常管理維護 437
29.3.1 查看從伺服器狀態 437
29.3.2 主從伺服器同步維護 438
29.3.3 從伺服器複製出錯的處理 439
29.3.4 logevententryexceededmax_allowed_packet的處理 441
29.3.5 多主複製時的自增長變數衝突問題 441
29.3.6 查看從伺服器的複製進度 444
29.4 切換主從伺服器 446
29.5 小結 447
第30章 MySQLCluster 449
30.1 MySQLCluster架構 449
30.2 MySQLCluster的配置 450
30.2.1 MySQLCluster的版本支持 450
30.2.2 管理節點配置步驟 451
30.2.3 SQL節點和數據節點的配置 452
30.3 開始使用Cluster 453
30.3.1 Cluster的啟動 453
30.3.2 Cluster的測試 455
30.3.3 Cluster的關閉 459
30.4 維護Cluster 460
30.4.1 數據備份 460
30.4.2 數據恢復 461
30.4.3 日誌管理 463
30.5 小結 466
第31章 MySQL常見問題和套用技巧 467
31.1 忘記MySQL的root密碼 467
31.2 如何處理MyISAM存儲引擎的表損壞 468
31.2.1 方法一 468
31.2.2 方法二 469
31.3 MyISAM表超過4GB無法訪問的問題 469
31.4 數據目錄磁碟空間不足的問題 470
31.4.1 對於MyISAM存儲引擎的表 470
31.4.2 對於InnoDB存儲引擎的表 471
31.5 DNS反向解析的問題 471
31.6 mysql.sock丟失後如何連線資料庫 472
31.7 同一台伺服器運行多個MySQL資料庫 472
31.8 客戶端怎么訪問區域網路資料庫 473
31.9 小結 476
……