(轉(zhuǎn)自linux社區(qū))
mysql 的 InnoDB 存儲(chǔ)引擎不僅可以緩存索引,而且還可以緩存數(shù)據(jù),如果將其表和索引存儲(chǔ)在裸設(shè)備(Raw Device)上,從而繞過了文件系統(tǒng)的高速緩存和緩沖器而直接訪問磁盤,那么將大大降低linux文件系統(tǒng)的負(fù)擔(dān),使系統(tǒng)性能獲得顯著改善。
另外,從裸設(shè)備在數(shù)據(jù)庫應(yīng)用的優(yōu)化原理中,我們也可以看到優(yōu)化數(shù)據(jù)庫的一個(gè)基本方向,就是如何設(shè)法降低因數(shù)據(jù)庫特有的 I/O 密集型訪問所導(dǎo)致的文件系統(tǒng)的繁重負(fù)擔(dān)。因此,即使在現(xiàn)有的基于文件系統(tǒng)的數(shù)據(jù)庫存儲(chǔ)引擎上,也可考慮使用特殊的文件系統(tǒng)掛載方式。
例如為存儲(chǔ)數(shù)據(jù)庫文件的分區(qū)使用 noatime 作為掛載參數(shù),由于訪問次數(shù)(access times)不再被記錄 可以帶來系統(tǒng)性能的一定程度的提升。
──────────────────────────────────────────────────────────────────────────────
本筆記最新配置之系統(tǒng)環(huán)境:
──────────────────────────────────────────────────────────────────────────────
OS:??CentOS6
HDD:? /dev/sdc /dev/sdd
RAW:? /dev/raw/raw1 /dev/raw/raw2
MySQL:? 5.1.61
USER:? mysql:mysql
參考官方網(wǎng)站的配置指引:
──────────────────────────────────────────────────────────────────────────────
(1) 設(shè)置裸設(shè)備(Prepare the raw device)
──────────────────────────────────────────────────────────────────────────────
在使用裸設(shè)備之前,必須先將磁盤設(shè)備綁定到裸設(shè)備上:
# /bin/raw /dev/raw/raw1 /dev/sdc;
——————————————————————————–
/dev/raw/raw1:? bound to major 8, minor 32
——————————————————————————–
再綁定另一個(gè)裸設(shè)備,然后還要讓您的MySQL數(shù)據(jù)庫的運(yùn)行用戶有權(quán)讀寫裸設(shè)備:
# /bin/raw /dev/raw/raw2 /dev/sdd;
# chown root:mysql /dev/raw/raw1 /dev/raw/raw2;
# chmod 0660 /dev/raw/raw1 /dev/raw/raw2;
# /bin/raw -qa;
# /bin/raw -q /dev/raw/raw1;
# /bin/ls -l /dev/raw/raw1;
# blockdev –report /dev/raw/raw1;
# blockdev –report /dev/sdc;
vi /etc/udev/rules.d/60-raw.rules;
——————————————————————————–
ACTION==”add”, KERNEL==”sdc”, GROUP==”mysql”, MODE==”0660″, RUN+=”/bin/raw /dev/raw/raw1 %N”
ACTION==”add”, KERNEL==”sdd”, GROUP==”mysql”, MODE==”0660″, RUN+=”/bin/raw /dev/raw/raw2 %N”
——————————————————————————–
Note: this make sure device /dev/sdc and /dev/sdd will bind automatically when server reboot.
# vi /etc/udev/rules.d/41-local-permissions-rules;
──────────────────────────────────────────────────────────────────────────────
(2) 如有需要,先備份舊有的InnoDB數(shù)據(jù)表
──────────────────────────────────────────────────────────────────────────────
如果您的數(shù)據(jù)庫已經(jīng)運(yùn)行,并且現(xiàn)有數(shù)據(jù)存儲(chǔ)于舊的InnoDB引擎之中,如果您需要遷移的話,
請(qǐng)?jiān)陉P(guān)閉數(shù)據(jù)庫之前預(yù)先用mysqldump命令導(dǎo)出您的數(shù)據(jù), 等新引擎配置好之后再導(dǎo)入即可。
可參考如下SQL命令查看和導(dǎo)出您的InnoDB數(shù)據(jù)表:
mysql> SELECT table_schema,table_name,engine FROM INFORMATION_SCHEMA.TABLES;
mysql> SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine=’InnoDB’;
如有需要,可用mysqldump導(dǎo)出數(shù)據(jù),請(qǐng)參考如下格式(請(qǐng)用相應(yīng)的數(shù)據(jù)庫和表名稱):
mysqldump -u root -p -h localhost [database].[table] > database.table.sql
注意:您必須逐個(gè)表導(dǎo)出舊的數(shù)據(jù)。
──────────────────────────────────────────────────────────────────────────────
(3) 初始化階段MySQL的配置
──────────────────────────────────────────────────────────────────────────────
When you create a new data file, put the keyword newraw?
immediately after the data file size in innodb_data_file_path:
# vi /etc/my.cnf;
——————————————————————————–
[mysqld]
innodb_buffer_pool_size=128M
innodb_data_home_dir=
innodb_data_file_path=/dev/raw/raw1:64Mnewraw;/dev/raw/raw2:64Mnewraw
——————————————————————————–
?
后記:
mysql 還提供了另一種實(shí)現(xiàn)方式,配置 my.ini 里 innodb_flush_method
innodb_flush_method = O_DIRECT
這樣也可以實(shí)現(xiàn)直接I/O
?