MyRocks是facabook版將自主研發的MySQL分支,其源碼位於為:https://github.com/facebook/mysql-5.6/
首先需要安裝以下:
1 sudo yum install cmake gcc-c++ bzip2-devel libaio-devel bison \ 2 zlib-devel snappy-devel 3 sudo yum install gflags-devel readline-devel ncurses-devel \ 4 openssl-devel lz4-devel gdb git
這幾個包缺一不可,有好幾個依賴的包都是不能直接yum安裝的,所以要下源碼編譯安裝。
其中 snappy-devel 需要加 -b current 安裝,默認的repo里沒有。而 gflags-devel 和 lz4-devel 通過yum找不到,只能下載源碼編譯安裝。
gflags:https://gflags.github.io/gflags
lz4:https://github.com/Cyan4973/lz4
然后利用git從myrocks的github主頁將項目clone下來:
1 git clone https://github.com/facebook/mysql-5.6.git 2 cd mysql-5.6 3 git submodule init 4 git submodule update
注意,這里必須要用這種方式下載項目源碼,直接從github主頁上下載解壓的源碼會編譯失敗。
調用 git submodule update 是用來更新 submodule 信息的。一般大的項目,通用的部分希望抽取出來做成一個公共庫(子模塊)來提供給別的工程來使用,MyRocks中也存在這樣的子模塊,當其他人將某一子模塊修改更新后,用到這個模塊的項目只要調用git submodule update即可獲取最新的子模塊。這樣顯然便於公共庫的版本維護。
然后利用cmake:
1 cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=system -DWITH_ZLIB=bundled -DMYSQL_MAINTAINER_MODE=0 -DENABLED_LOCAL_INFILE=1
這里插播一下下,如果在已經安裝了cmake的情況下,要升級成更高版本的,需要刪除了原來的后再編譯安裝,否則可能報CMake Error: Could not find CMAKE_ROOT !!!
接下來make:
1 make -j8
2 make install 指定文件夾
由於MyRocks要利用C++ 11 的一些特性,gcc/g++ 應該升級到4.7或以上版本(redhat默認是4.4.6)。
但是問題是,我升級到4.9.3,並使用如下命令更新后
1 #更新gcc默認 2 /usr/sbin/update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/x86_64-unknown-linux-gnu-gcc-4.9.3 40 3 4 #更新g++默認 5 /usr/sbin/update-alternatives --install /usr/bin/g++ g++ /usr/local/bin/g++ 40
仍然會報 cc1plus: error: unrecognized command line option "-std=c++11"
百思不得其解,請教了一下江神,江神建議我安裝devtoolset ,然后設置CC和CXX參數,並export這兩個參數。受到江神的啟發,我先嘗試着將CXX和CC的參數設置成我安裝的g++/gcc路徑看看怎么樣,結果竟然通過了。
看來盡管我將gcc/g++升級到了4.9.3版本,cmake仍然默認使用未刪除老版本,這一點要記住。
解決了這個問題后,后來又出現了如下的錯誤:
g++: internal compiler error: Killed (program cc1plus)
主要原因是內存不足,畢竟申請的虛擬機內存比較小,於是臨時使用交換分區來解決:
1 sudo dd if=/dev/zero of=/swapfile bs=64M count=16 2 sudo mkswap /swapfile 3 sudo swapon /swapfile
編譯完成后,釋放掉交換區:
1 sudo swapoff /swapfile 2 sudo rm /swapfile
最后還出了一個liblz4.so.1: cannot open shared object file錯誤,原來是我的lz4庫默認安裝在了/usr/local/bin下,將其鏈接到/usr/lib或者/lib這兩個默認的目錄下邊。
1 sudo ln -s /usr/local/lib/liblz4.so.1 /usr/lib 2 sudo ldconfig
以上問題都解決了后,編譯就成功了。
編譯后應該進行安裝:
1 /u01/my9906/scripts/mysql_install_db --defaults-file=/u01/my9906/my.cnf --datadir=/u01/my9906/data --basedir=/u01/my9906
1 sudo /u01/my9906/bin/mysqld --defaults-file=/u01/my9906/my.cnf &
1 [mysqld] 2 rocksdb 3 default-storage-engine=rocksdb 4 skip-innodb 5 default-tmp-storage-engine=MyISAM 6 collation-server=latin1_bin (or utf8_bin, binary) 7 8 log-bin 9 binlog-format=ROW
