mysql 安装dso命令_使用tengine DSO 来动态编译安装第三方模块(Lua
在使用nginx時(shí),需要增加或者改動(dòng)一個(gè)模塊,都需要重新編譯nginx文件。最近使用了tengine,它提供的DSO工具來(lái)動(dòng)態(tài)加載模塊。本例測(cè)試需要?jiǎng)討B(tài)增加lua-nginx模塊,記錄一下安裝過(guò)程。
1. 編譯安裝 luajit
Lua 環(huán)境推薦使用成熟快速的 luajit。cd /root/Download/wget http://luajit.org/download/LuaJIT-2.0.4.tar.gztar zxvf LuaJIT-2.0.4.tar.gzcd /root/Downloads/LuaJIT-2.0.4make && make install PREFIX=/usr/local/luajit-2.0.4
2. 設(shè)置環(huán)境變量:# tell nginx's build system where to find LuaJIT 2.0:export LUAJIT_LIB=/usr/local/luajit-2.0.4/libexport LUAJIT_INC=/usr/local/luajit-2.0.4/include/luajit-2.0
3. 你能夠使用dso_tool(在Nginx安裝目錄的sbin下)這個(gè)工具來(lái)編譯第三方模塊 lua-nginx-module.cd /root/Download/wget --no-check-certificate https://github.com/openresty/lua-nginx-module/archive/v0.9.19.tar.gztar zxvf v0.9.19.tar.gzcd /usr/local/tengine/sbin/./dso_tool --add-module=/root/Downloads/LuaJIT-2.0.4
4. 編譯成功時(shí),如下圖
5. 設(shè)置動(dòng)態(tài)庫(kù)echo '/usr/local/luajit-2.0.4/lib'>>/etc/ld.so.conf.d/usr_local_luajit_lib.confldconfig
6. 配置tengine的配置文件,動(dòng)態(tài)加載模塊,如下圖所示:
使用./nginx -t 測(cè)試配置文件是否通過(guò)。提示成功,則打開(kāi)瀏覽器訪(fǎng)問(wèn)/lua路徑,測(cè)試第三方模塊lua-nginx-module是否正常。
7. 全新編譯安裝Tengine+Lua
7.1 編譯安裝nginx需要的依賴(lài)包yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
7.2 編譯安裝Lua需要的依賴(lài)包(centos默認(rèn)可能裝過(guò)了,可省略,rpm -qa|grep readline查詢(xún))yum install readline readline-devel
或者手動(dòng)編譯安裝
wget -c ftp://ftp.gnu.org/gnu/readline/readline-6.2.tar.gz
tar -zxvf readline-6.2.tar.gz
cd readline-6.2
./configure
make && make installl
手動(dòng)編譯后如果指定了 prefix ,要修改一下 lua 的編譯腳本
修改lua src/Makefile
修改MYCFLAGS=-I/usr/local/readline/include
修改MYLDFLAGS=-L/usr/local/readline/lib
直接執(zhí)行l(wèi)ua命令,出現(xiàn)加載不了readline.so的問(wèn)題,軟鏈接 /usr/local/readline/lib/libreadline.so.6 到 /usr/lib/
7.3 安裝luayum安裝:
yum install lua lua-devel
安裝Lua或者LuaJIT都是可以的,但是出于效率的考慮,推薦安裝LuaJIT。源碼安裝LuaGIT如下:
LuaGIT官方地址: http://luajit.org/wget http://luajit.org/download/LuaJIT-2.0.4.tar.gzcd /usr/local/srctar -zxvf LuaJIT-2.0.4.tar.gzcd LuaJIT-2.0.4makemake install (也可以使用make install PREFIX=/usr/local/luagit-2.0.4)ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2 (ln -s /usr/local/luagit-2.0.4/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2)export LUAJIT_LIB=/usr/local/lib (export LUAJIT_LIB=/usr/local/luagit-2.0.4/lib)export LUAJIT_INC=/usr/local/include/luajit-2.0/ (export LUAJIT_INC=/usr/local/luagit-2.0.4/include/luajit-2.0/)因?yàn)榘惭b在缺省路徑,所以L(fǎng)uaJIT對(duì)應(yīng)的lib,include均在/usr/local目錄里。
創(chuàng)建www用戶(hù)和組:sudo groupadd www
sudo useradd www -g www -s /sbin/nologin -M
另外,可以安裝jemalloc,優(yōu)化內(nèi)存管理wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
tar xjf jemalloc-3.6.0.tar.bz2
cd jemalloc-3.6.0
./configure
make && make install
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig
7.3.1 使用jemalloc優(yōu)化MySQL方法1.
MySQL/MaridDB 5.5編譯方法,cmake預(yù)編譯時(shí)加上下面參數(shù)
-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF
方法2.
修改mysqld_safe直接加載:
查找文件 /usr/local/mysql/bin/mysqld_safe
在#executing mysqld_safe 下面加上
LD_PRELOAD=/usr/local/lib/libjemalloc.so
重新啟動(dòng)MYSQL
使用下面代碼自動(dòng)修改mysqld_safe文件
sed -i '[email?protected] [email?protected] mysqld_safenexport LD_PRELOAD=/usr/local/lib/libjemalloc.so@' /usr/local/mysql/bin/mysqld_safe
service mysqld restart
7.3.2 使用jemalloc優(yōu)化Nginx編譯NGINX時(shí)添加以下參數(shù):
--with-ld-opt="-ljemalloc"
具體實(shí)現(xiàn):
cd lnmp/src/nginx-1.4.2
make clean
./configure --prefix=/usr/local/nginx --user=www --group=www
--with-http_stub_status_module --with-http_ssl_module --with-http_flv_module
--with-http_gzip_static_module --with-ld-opt="-ljemalloc" (或者 --with-jemalloc)
make && make install
驗(yàn)證 jemalloc 是否運(yùn)行:lsof -n | grep jemalloc
7.4 編譯Tengineshell> wget http://tengine.taobao.org/download/tengine-2.1.2.tar.gzshell> tar zxvf tengine-2.1.2.tar.gzshell> cd tengine-2.1.2shell> ./configure --prefix=/usr/local/tengine-2.1.2 --with-http_lua_module --with-luajit-lib=/usr/local/luagit-2.0.4/lib/ --with-luajit-inc=/usr/local/luagit-2.0.4/include/luajit-2.0/ --pid-path=/var/run/nginx.pid --group=www --user=www --dso-path=/usr/local/tengine-2.1.2/modules --with-http_gzip_static_module --with-http_stub_status_module --with-poll_module --with-http_sub_module --with-http_realip_module --with-http_concat_module --http-proxy-temp-path=/var/tmp/tengine-2.1.2/proxy_temp --http-fastcgi-temp-path=/var/tmp/tengine-2.1.2/fastcgi_temp --http-uwsgi-temp-path=/var/tmp/tengine-2.1.2/uwsgi_temp --http-scgi-temp-path=/var/tmp/tengine-2.1.2/cgi_temp --http-client-body-temp-path=/var/tmp/tengine-2.1.2/client_body_temp --http-log-path=/var/log/tengine-2.1.2/access.log --error-log-path=/var/log/tengine-2.1.2/error.log --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB,-ljemalloc"shell> make&& make installshell> ln -s /usr/local/tengine-2.1.2 /usr/local/nginx (創(chuàng)建軟連接,可省略)shell> mkdir /var/tmp/tengine-2.1.2 -p (創(chuàng)建所需的目錄以及賦權(quán))shell> chown -R www:www /var/tmp/tengine-2.1.2參數(shù)說(shuō)明:由于Pcre是通過(guò)yum安裝的,不用使用--with-pcre=/path/to/ 指定。
lua是手動(dòng)安裝的需要配置參數(shù)
--with-http_lua_module
--with-luajit-lib=/usr/local/luagit-2.0.4/lib/ --with-luajit-inc=/usr/local/luagit-2.0.4/include/luajit-2.0/
--prefix安裝的目錄
作用:不指定prefix,則可執(zhí)行文件默認(rèn)放在/usr/local/bin,庫(kù)文件默認(rèn)在/usr/local/lib,配置文件在/usr/local/etc,其他資源文件放在/usr/local/share。若要卸載這個(gè)程序,要么在原來(lái)的make目錄下執(zhí)行make uninstall(前提是make文件指定過(guò)uninstall),要么去上述默認(rèn)目錄里把相關(guān)的文件夾一個(gè)個(gè)的刪掉。但是,對(duì)于指定了prefix的目錄的好處是卸載軟件或者移植軟件。當(dāng)某個(gè)軟件不再需要時(shí),只須簡(jiǎn)單刪除該文件安裝目錄,就可以把軟件卸載干凈;移植軟件只需要拷貝整個(gè)目錄到另外一個(gè)機(jī)器即可(相同的操作系統(tǒng)及環(huán)境依賴(lài))。
--with-ld-opt
其中的 --with-ld-opt=-Wl,-rpath,/usr/local/lib:/opt/openresty/luajit/lib 意思是:這是鏈接器選項(xiàng),目的是把/usr/loca/lib和/opt/openresty/luajit/lib這兩個(gè)路徑添加進(jìn)nginx可執(zhí)行文件的RPATH頭重,這樣在啟動(dòng)的時(shí)候,系統(tǒng)就可以找到正確的動(dòng)態(tài)鏈接庫(kù)文件。
若不使用該參數(shù)指定動(dòng)態(tài)的鏈接庫(kù),試著使用 ./nginx 啟動(dòng)tengine,如果運(yùn)氣不好的話(huà),可能遇到如下錯(cuò)誤:
cannot open shared object file: No such file or directory
這是什么情況呢?可以使用ldd命令來(lái)查看:
ldd /usr/local/tengine-2.1.0/sbin/nginx
會(huì)出現(xiàn)xxxx-xxxx.so => not found
此類(lèi)問(wèn)題通常使用ldconfig命令就能解決,例如本例有可能出現(xiàn)的
libluajit-.so => not found
我們使用如下命令:(由于我們默認(rèn)安裝libluagit動(dòng)態(tài)鏈接庫(kù)默認(rèn)安裝至/usr/local/lib)shell> echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.confshell> ldconfig再次啟動(dòng)nginx,應(yīng)該就OK了。
7.5 測(cè)試lua是否可以使用了
配置下面代碼至nginx.conf的server 中,并重新加載配置文件(./nginx -s reload),location /lua {set $test "hello, world.";content_by_lua 'ngx.header.content_type = "text/plain";ngx.say(ngx.var.test);';}
總結(jié)
以上是生活随笔為你收集整理的mysql 安装dso命令_使用tengine DSO 来动态编译安装第三方模块(Lua的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 高校在线考试系统_高校在线考试系统有哪些
- 下一篇: mysql计算后精度增大_Mysql用法