mysql 安装dso命令_使用tengine DSO 来动态编译安装第三方模块(Lua
在使用nginx時,需要增加或者改動一個模塊,都需要重新編譯nginx文件。最近使用了tengine,它提供的DSO工具來動態加載模塊。本例測試需要動態增加lua-nginx模塊,記錄一下安裝過程。
1. 編譯安裝 luajit
Lua 環境推薦使用成熟快速的 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. 設置環境變量:# 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下)這個工具來編譯第三方模塊 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. 編譯成功時,如下圖
5. 設置動態庫echo '/usr/local/luajit-2.0.4/lib'>>/etc/ld.so.conf.d/usr_local_luajit_lib.confldconfig
6. 配置tengine的配置文件,動態加載模塊,如下圖所示:
使用./nginx -t 測試配置文件是否通過。提示成功,則打開瀏覽器訪問/lua路徑,測試第三方模塊lua-nginx-module是否正常。
7. 全新編譯安裝Tengine+Lua
7.1 編譯安裝nginx需要的依賴包yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
7.2 編譯安裝Lua需要的依賴包(centos默認可能裝過了,可省略,rpm -qa|grep readline查詢)yum install readline readline-devel
或者手動編譯安裝
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
手動編譯后如果指定了 prefix ,要修改一下 lua 的編譯腳本
修改lua src/Makefile
修改MYCFLAGS=-I/usr/local/readline/include
修改MYLDFLAGS=-L/usr/local/readline/lib
直接執行lua命令,出現加載不了readline.so的問題,軟鏈接 /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/)因為安裝在缺省路徑,所以LuaJIT對應的lib,include均在/usr/local目錄里。
創建www用戶和組:sudo groupadd www
sudo useradd www -g www -s /sbin/nologin -M
另外,可以安裝jemalloc,優化內存管理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優化MySQL方法1.
MySQL/MaridDB 5.5編譯方法,cmake預編譯時加上下面參數
-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
重新啟動MYSQL
使用下面代碼自動修改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優化Nginx編譯NGINX時添加以下參數:
--with-ld-opt="-ljemalloc"
具體實現:
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
驗證 jemalloc 是否運行: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 (創建軟連接,可省略)shell> mkdir /var/tmp/tengine-2.1.2 -p (創建所需的目錄以及賦權)shell> chown -R www:www /var/tmp/tengine-2.1.2參數說明:由于Pcre是通過yum安裝的,不用使用--with-pcre=/path/to/ 指定。
lua是手動安裝的需要配置參數
--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,則可執行文件默認放在/usr/local/bin,庫文件默認在/usr/local/lib,配置文件在/usr/local/etc,其他資源文件放在/usr/local/share。若要卸載這個程序,要么在原來的make目錄下執行make uninstall(前提是make文件指定過uninstall),要么去上述默認目錄里把相關的文件夾一個個的刪掉。但是,對于指定了prefix的目錄的好處是卸載軟件或者移植軟件。當某個軟件不再需要時,只須簡單刪除該文件安裝目錄,就可以把軟件卸載干凈;移植軟件只需要拷貝整個目錄到另外一個機器即可(相同的操作系統及環境依賴)。
--with-ld-opt
其中的 --with-ld-opt=-Wl,-rpath,/usr/local/lib:/opt/openresty/luajit/lib 意思是:這是鏈接器選項,目的是把/usr/loca/lib和/opt/openresty/luajit/lib這兩個路徑添加進nginx可執行文件的RPATH頭重,這樣在啟動的時候,系統就可以找到正確的動態鏈接庫文件。
若不使用該參數指定動態的鏈接庫,試著使用 ./nginx 啟動tengine,如果運氣不好的話,可能遇到如下錯誤:
cannot open shared object file: No such file or directory
這是什么情況呢?可以使用ldd命令來查看:
ldd /usr/local/tengine-2.1.0/sbin/nginx
會出現xxxx-xxxx.so => not found
此類問題通常使用ldconfig命令就能解決,例如本例有可能出現的
libluajit-.so => not found
我們使用如下命令:(由于我們默認安裝libluagit動態鏈接庫默認安裝至/usr/local/lib)shell> echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.confshell> ldconfig再次啟動nginx,應該就OK了。
7.5 測試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);';}
總結
以上是生活随笔為你收集整理的mysql 安装dso命令_使用tengine DSO 来动态编译安装第三方模块(Lua的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高校在线考试系统_高校在线考试系统有哪些
- 下一篇: python读文件缺key_在Pytho