深入淺出MySQL:資料庫開發最佳化與管理維護

深入淺出MySQL:資料庫開發最佳化與管理維護

該書由唐漢明、翟振興、蘭麗華聯合編寫,2008由人民郵電出版社出版發行。《深入淺出MySQL資料庫開發、最佳化與管理維護》從資料庫的基礎、開發、最佳化、管理維護4個方面對MySQL進行了詳細的介紹,其中每一部分都獨立成篇。《深入淺出MySQL資料庫開發、最佳化與管理維護》內容實用,覆蓋廣泛,講解由淺入深,適合於各個層次的讀者。

基本信息

內容簡介

書籍封面書籍封面

基礎篇主要適合於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

……

相關詞條

相關搜尋

熱門詞條

聯絡我們