最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

新手必看:一步到位之InnoDB_MySQL

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 18:28:00
文檔

新手必看:一步到位之InnoDB_MySQL

新手必看:一步到位之InnoDB_MySQL:bitsCN.com 新手必看:一步到位之InnoDB 前言:MySQL發(fā)展到今天,InnoDB引擎已經(jīng)作為絕對的主力,除了像大數(shù)據(jù)量分析等比較特殊領(lǐng)域需求外,它適用于眾多場景。然而,仍有不少開發(fā)者還在“執(zhí)迷不悟”的使用MyISAM引擎,覺得對InnoDB無
推薦度:
導(dǎo)讀新手必看:一步到位之InnoDB_MySQL:bitsCN.com 新手必看:一步到位之InnoDB 前言:MySQL發(fā)展到今天,InnoDB引擎已經(jīng)作為絕對的主力,除了像大數(shù)據(jù)量分析等比較特殊領(lǐng)域需求外,它適用于眾多場景。然而,仍有不少開發(fā)者還在“執(zhí)迷不悟”的使用MyISAM引擎,覺得對InnoDB無

bitsCN.com

新手必看:一步到位之InnoDB

前言:MySQL發(fā)展到今天,InnoDB引擎已經(jīng)作為絕對的主力,除了像大數(shù)據(jù)量分析等比較特殊領(lǐng)域需求外,它適用于眾多場景。然而,仍有不少開發(fā)者還在“執(zhí)迷不悟”的使用MyISAM引擎,覺得對InnoDB無法把握好,還是MyISAM簡單省事,還能支持快速COUNT(*)。本文是由于最近幾天幫忙處理discuz論壇有感而發(fā),希望能對廣大開發(fā)者有幫助。

1. 快速認(rèn)識InnoDB

InnoDB是MySQL下使用最廣泛的引擎,它是基于MySQL的高可擴(kuò)展性和高性能存儲引擎,從5.5版本開始,它已經(jīng)成為了默認(rèn)引擎。

InnODB引擎支持眾多特性:

a) 支持ACID,簡單地說就是支持事務(wù)完整性、一致性;

b) 支持行鎖,以及類似ORACLE的一致性讀,多用戶并發(fā);

c) 獨(dú)有的聚集索引主鍵設(shè)計方式,可大幅提升并發(fā)讀寫性能;

d) 支持外鍵;

e) 支持崩潰數(shù)據(jù)自修復(fù);

InnoDB有這么多特性,比MyISAM來的優(yōu)秀多了,還猶豫什么,果斷的切換到InnoDB引擎吧

2. 修改InnoDB配置選項(xiàng)

可以選擇官方版本,或者Percona的分支,如果不知道在哪下載,就google吧。

安裝完MySQL后,需要適當(dāng)修改下my.cnf配置文件,針對InnoDB相關(guān)的選項(xiàng)做一些調(diào)整,才能較好的運(yùn)行InnoDB。

相關(guān)的選項(xiàng)有:

#InnoDB存儲數(shù)據(jù)字典、內(nèi)部數(shù)據(jù)結(jié)構(gòu)的緩沖池,16MB 已經(jīng)足夠大了。

innodb_additional_mem_pool_size = 16M

#InnoDB用于緩存數(shù)據(jù)、索引、鎖、插入緩沖、數(shù)據(jù)字典等

#如果是專用的DB服務(wù)器,且以InnoDB引擎為主的場景,通常可設(shè)置物理內(nèi)存的50%

#如果是非專用DB服務(wù)器,可以先嘗試設(shè)置成內(nèi)存的1/4,如果有問題再調(diào)整

#默認(rèn)值是8M,非??覺,這也是導(dǎo)致很多人覺得InnoDB不如MyISAM好用的緣故

innodb_buffer_pool_size = 4G

#InnoDB共享表空間初始化大小,默認(rèn)是 10MB,也非??覺,改成 1GB,并且自動擴(kuò)展

innodb_data_file_path = ibdata1:1G:autoextend

#如果不了解本選項(xiàng),建議設(shè)置為1,能較好保護(hù)數(shù)據(jù)可靠性,對性能有一定影響,但可控

innodb_flush_log_at_trx_commit = 1

#InnoDB的log buffer,通常設(shè)置為 64MB 就足夠了

innodb_log_buffer_size = 64M

#InnoDB redo log大小,通常設(shè)置256MB 就足夠了

innodb_log_file_size = 256M

#InnoDB redo log文件組,通常設(shè)置為 2 就足夠了

innodb_log_files_in_group = 2

#啟用InnoDB的獨(dú)立表空間模式,便于管理

innodb_file_per_table = 1

#啟用InnoDB的status file,便于管理員查看以及監(jiān)控等

innodb_status_file = 1

#設(shè)置事務(wù)隔離級別為 READ-COMMITED,提高事務(wù)效率,通常都滿足事務(wù)一致性要求

transaction_isolation = READ-COMMITTED

在這里,其他配置選項(xiàng)也需要注意:

#設(shè)置最大并發(fā)連接數(shù),如果前端程序是PHP,可適當(dāng)加大,但不可過大

#如果前端程序采用連接池,可適當(dāng)調(diào)小,避免連接數(shù)過大

max_connections = 60

#最大連接錯誤次數(shù),可適當(dāng)加大,防止頻繁連接錯誤后,前端host被mysql拒絕掉

max_connect_errors = 100000

#設(shè)置慢查詢閥值,建議設(shè)置最小的 1 秒

long_query_time = 1

#設(shè)置臨時表最大值,這是每次連接都會分配,不宜設(shè)置過大 max_heap_table_size 和 tmp_table_size 要設(shè)置一樣大

max_heap_table_size = 96M

tmp_table_size = 96M

#每個連接都會分配的一些排序、連接等緩沖,一般設(shè)置為 2MB 就足夠了

sort_buffer_size = 2M

join_buffer_size = 2M

read_buffer_size = 2M

read_rnd_buffer_size = 2M

#建議關(guān)閉query cache,有些時候?qū)π阅芊炊且环N損害

query_cache_size = 0

#如果是以InnoDB引擎為主的DB,專用于MyISAM引擎的 key_buffer_size 可以設(shè)置較小,8MB 已足夠

#如果是以MyISAM引擎為主,可設(shè)置較大,但不能超過4G

#在這里,強(qiáng)烈建議不使用MyISAM引擎,默認(rèn)都是用InnoDB引擎

key_buffer_size = 8M

#設(shè)置連接超時閥值,如果前端程序采用短連接,建議縮短這2個值

#如果前端程序采用長連接,可直接注釋掉這兩個選項(xiàng),是用默認(rèn)配置(8小時)

interactive_timeout = 120

wait_timeout = 120

3. 開始使用InnoDB引擎

修改完配置文件,即可啟動MySQL。啟動完畢后,在MySQL的datadir目錄下,若產(chǎn)生以下幾個文件,則表示應(yīng)該可以使用InnoDB引擎了。

-rw-rw---- 1 mysql mysql 1.0G Sep 21 17:25 ibdata1

-rw-rw---- 1 mysql mysql 256M Sep 21 17:25 ib_logfile0

-rw-rw---- 1 mysql mysql 256M Sep 21 10:50 ib_logfile1

登錄MySQL后,執(zhí)行命令,確認(rèn)已啟用InnoDB引擎:

(root:imysql.cn:Thu Oct 15 09:16:22 2009)[mysql]> show engines;

+------------+---------+----------------------------------------------------------------+--------------+------+------------+

| Engine | Support | Comment | Transactions | XA | Savepoints |

+------------+---------+----------------------------------------------------------------+--------------+------+------------+

| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |

接下來創(chuàng)建一個InnoDB表:

(root:imysql.cn:Thu Oct 15 09:16:22 2009)[mysql]>

CREATE TABLE my_innodb_talbe(

id INT UNSIGNED NOT NULL AUTO_INCREMENT,

name VARCHAR(20) NOT NULL DEFAULT /'/',

passwd VARCHAR(32) NOT NULL DEFAULT /'/',

PRIMARY KEY(id),

UNIQUE KEY `idx_name`(name)

) ENGINE = InnoDB;

有幾個和MySQL(尤其是InnoDB引擎)數(shù)據(jù)表設(shè)計相關(guān)的建議,希望開發(fā)者朋友能遵循:

a) 所有InnoDB數(shù)據(jù)表都創(chuàng)建一個和業(yè)務(wù)無關(guān)的自增數(shù)字型作為主鍵,對保證性能很有幫助;

b) 杜絕使用text/blob,確實(shí)需要使用的,盡可能拆分出去成一個獨(dú)立的表;

c) 時間戳建議使用 TIMESTAMP 類型存儲;

d) IPV4 地址建議用 INT UNSIGNED 類型存儲;

e) 性別等非是即非的邏輯,建議采用 TINYINT 存儲,而不是 CHAR(1);

f) 存儲較長文本內(nèi)容時,建議采用JSON/BSON格式存儲

bitsCN.com

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

新手必看:一步到位之InnoDB_MySQL

新手必看:一步到位之InnoDB_MySQL:bitsCN.com 新手必看:一步到位之InnoDB 前言:MySQL發(fā)展到今天,InnoDB引擎已經(jīng)作為絕對的主力,除了像大數(shù)據(jù)量分析等比較特殊領(lǐng)域需求外,它適用于眾多場景。然而,仍有不少開發(fā)者還在“執(zhí)迷不悟”的使用MyISAM引擎,覺得對InnoDB無
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top