一, 背景說明:
1, windows xp 環境;
2,已經安裝mysql伺服器版本, 可以通過下面方式查看:
3,預設的儲存引擎是innodb,內建的非innodb plugin;
需求:為了利用新的儲存引擎 Innodb plugin的更多特性 ,決定使用innodb plugin引擎。
二, 操作步驟
1,可以用show engines 或者 show plugins命令查看當前安裝的引擎或者外掛程式情況。
2,查看一下當前mysql安裝是否支援動態添加外掛程式。
注意,若have_dynamic_loading 選項的value是YES,則說明支援。如果是NO,則必須麻煩,因為have_dynamic_loading是唯讀變數。
3,添加外掛程式
首先確認一下外掛程式的dll或者so的所在目錄,偶安裝在windows環境,dll所在目錄是:${MYSQLHOME}/lib/plugin/ha_innodb_plugin.dll。
執行如下命令:
mysql>install plugin innodb dllname 'ha_innodb_plugin.dll';
mysql>install plugin innodb_trx soname 'ha_innodb_plugin.dll';
mysql>install plugin innodb_locks soname 'ha_innodb_plugin.dll';
mysql>install plugin innodb_lock_waits soname 'ha_innodb_plugin.dll';
mysql>install plugin innodb_cmp soname 'ha_innodb_plugin.dll';
mysql>install plugin innodb_cmp_reset soname 'ha_innodb_plugin.dll';
mysql>install plugin innodb_cmpmem soname 'ha_innodb_plugin.dll';
mysql>install plugin innodb_cmpmem_reset soname 'ha_innodb_plugin.dll';
4,檢測外掛程式安裝是否成功,可以執行:show plugins命令或者show engines;
5,查看安裝的innodb plugin的版本:
注意:
看似簡單,但是要想完成動態載入innodb plugin是有條件的:
1,使用源碼編譯的,預設innobase沒有被編譯進來;使用二進位包安裝的,在啟動前,在my.cnf裡面加入skip-innodb或是ignore_builtin_innodb。
2,使用源碼編譯時間,不能使用–with-mysqld-ldflags=-all-static選項,以靜態方式編譯庫,當show global variables like ‘have_%’;的時候,輸出有一項是
have_dynamic_loading將是NO,這就決定mysql是否支援動態載入plugin;而二進位包安裝的mysql,就是動態編譯的,支援動態載入plugin,這項為Yes。
3,選擇對應的innodb plugin版本,並將其放到basedir/lib/plugin下面。
三, 修改配置my.ini後重新啟動mysql
1,去掉之前innodb的所有配置,在my.ini進行如下配置後重啟mysql
對於mysql5.1.38之後的版本,要使用新的InnoDB Plugin儲存引擎,只需在my.ini中做如下配置:
#*** INNODB Specific options ***
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.dll
plugin-load=innodb_trx=ha_innodb_plugin.dll
plugin-load=innodb_locks=ha_innodb_plugin.dll
plugin-load=innodb_lock_waits=ha_innodb_plugin.dll
plugin-load=innodb_cmp=ha_innodb_plugin.dll
plugin-load=innodb_cmp_reset=ha_innodb_plugin.dll
plugin-load=innodb_cmpmem=ha_innodb_plugin.dll
plugin-load=innodb_cmpmem_reset=ha_innodb_plugin.dll
注意:對之前的設定項目,前面加上loose_後均變成innodb plugin的設定項目,如
loose_innodb_additional_mem_pool_size=12M
loose_innodb_flush_log_at_trx_commit=1
loose_innodb_log_buffer_size=6M
loose_innodb_buffer_pool_size=538M
loose_innodb_log_file_size=269M
loose_innodb_thread_concurrency=10
loose_innodb_file_per_table=1
2,重啟mysql
在重啟若出現如下錯誤:
120701 13:47:11 [ERROR] Plugin 'InnoDB' init function returned error.
120701 13:47:11 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120701 13:48:51 [Note] mysqld: Normal shutdown
120701 13:48:51 [Note] Event Scheduler: Purging the queue. 0 events
120701 13:48:53 [Warning] mysqld: Forcing close of thread 1 user: 'root'
InnoDB: Error: log file .\ib_logfile0 is of different size 0 282066944 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
120701 13:48:53 [Note] mysqld: Shutdown complete
處理辦法:只要刪除MySQL目錄下的ib_logfile0和ib_logfile1兩個檔案,重啟mysql就可以解決問題了。