ubuntu16.04編譯安裝mysql-boost-5.7.21並編譯成php擴展測試與使用

我以前的文章已經改造了自定義MVC框架中的工具類(驗證碼圖片上傳圖像處理分頁)4個類,接下來,就要改造模型類,模型類確定要鏈接數據庫,因爲個人Ubuntu Linux是裸裝的php(目前只編譯了一個gd擴展),因此須要編譯安裝mysql,並把它編譯成擴展,這裏,我選用5.7版本帶boost的源碼包。搞了一個晚上,一邊實施,一邊作筆記。。。配置太多。php

1、須要準備的庫html

1,cmake編譯器mysql

sudo apt-get install cmake

2,bison( Linux下C/C++語法分析器 )ios

sudo apt-get install bison

3,ncurses庫,若是你有學過Linux系統編程遊戲開發,可能聽過或者使用這個庫sql

sudo apt-get install libncurses5-dev

4,gcc編譯器,ubuntu16.04自帶數據庫

5,Boost 1.59.0,這個庫下載下來以後,要編譯,安裝編程

wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz 
tar -zxvf boost_1_59_0.tar.gz -C /usr/local/

>進入解壓後的源碼目錄bootstrap

cd /usr/local cd boost_1_59_0/

若是切換不進boost_1_59_0這個目錄,本身記得修改用戶和組以及權限【sudo chmod 755 boost_1_59_0/】ubuntu

>而後運行bootstrap.sh腳本並設置相關參數服務器

./bootstrap.sh --with-libraries=all --with-toolset=gcc

--with-libraries指定編譯哪些boost庫,all的話就是所有編譯

--with-toolset指定編譯時使用哪一種編譯器

>編譯安裝boost

./b2  //編譯boost 
sudo ./b2 install //將生成的庫安裝到/usr/local/lib目錄下面,默認的頭文件在/usr/local/include/boost目錄下邊。

>判斷boost庫是否安裝成功

ghostwu@ghostwu:~/php/test$ cat boost_test.c #include <string> #include <iostream> #include <boost/version.hpp> #include <boost/timer.hpp> using namespace std; int main() { boost::timer t; cout << "max timespan: " << t.elapsed_max() / 3600 << "h" << endl; cout << "min timespan: " << t.elapsed_min() << "s" << endl; cout << "now time elapsed: " << t.elapsed() << "s" << endl; cout << "boost version" << BOOST_VERSION <<endl; cout << "boost lib version" << BOOST_LIB_VERSION <<endl; return 0; } 

編譯&執行:

ghostwu@ghostwu:~/php/test$ g++ boost_test.c -o boost_test ghostwu@ghostwu:~/php/test$ ./boost_test max timespan: 2.56205e+09h min timespan: 1e-06s now time elapsed: 4.7e-05s boost version105900 boost lib version1_59

顯示boost版本1.59

2、準備工做已經就緒,接下來開始編譯安裝mysql

一、添加Mysql用戶

groupadd mysql useradd -r -g mysql mysql

二、建立Mysql安裝程序的目錄和數據文件的目錄 以及修改目錄的用戶和組

sudo mkdir /usr/local/mysql57 sudo mkdir ~/mysql57_data chown -R mysql.mysql ~/mysql57_data/

sudo chown -R mysql.mysql /usr/local/mysql57/

3,配置mysql

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql57 \ -DMYSQL_DATADIR=/home/ghostwu/mysql57_data \ -DWITH_BOOST=/usr/local/boost_1_59_0 \ -DSYSCONFDIR=/etc \ -DEXTRA_CHARSETS=all

用cmake配置mysql預編譯參數: 
-DCMAKE_INSTALL_PREFIX:安裝路徑 
-DMYSQL_DATADIR:數據存放目錄 
-DWITH_BOOST:boost源碼路徑 
-DSYSCONFDIR:my.cnf配置文件目錄 
-DEFAULT_CHARSET:數據庫默認字符編碼 
-DDEFAULT_COLLATION:默認排序規則 
-DENABLED_LOCAL_INFILE:容許從本文件導入數據 
-DEXTRA_CHARSETS:安裝全部字符集 
更多預編譯配置參數請參考mysql官方文檔說明:http://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html#cmake-general-options

 >make && sudo make install

>初始化數據庫

sudo ./bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/home/ghostwu/mysql57_data

臨時密碼:

cat ~/.mysql_secret

拷貝服務啓動文件

sudo cp support-files/mysql.server /etc/init.d/mysqld

/etc目錄下建立my.cnf

[client] port=3306 socket=/var/run/mysqld/mysqld.sock [mysqld] port=3306 socket=/var/run/mysqld/mysqld.sock pid-file=/home/ghostwu/mysql57_data/mysql.pid basedir=/usr/local/mysql57 datadir=/home/ghostwu/mysql57_data

sudo mkdir -p /var/run/mysqld

sudo chown mysql:mysql /var/run/mysqld

啓動服務

/etc/init.d/mysqld start|stop|restart

3、若是臨時密碼太複雜登陸不進去,怎麼辦?從新修改密碼

>先關閉mysql服務

/etc/init.d/mysqld stop

>把路徑切入到/usr/local/mysql57/bin,執行

mysqld_safe --skip-grant-tables &

>mysql -p鏈接,用空密碼鏈接

而後更新密碼:

>update mysql.user set authentication_string=password('abc123') where user='root' and Host = 'localhost';

新版的mysql數據庫下的user表中已經沒有Password字段了,而是將加密後的用戶密碼存儲於authentication_string字段

>flush privileges;

>quit

而後重啓服務器,就能夠用abc123這個密碼登陸了 

 4、把mysql編譯爲php的擴展

沒有mysql擴展的時候,php調用mysql_connect報錯,同時 用 -m參數 也找不到mysql擴展

ghostwu@ghostwu:~/php/senior_php$ /usr/local/php54/bin/php -f db.php PHP Fatal error: Call to undefined function mysql_connect() in /home/ghostwu/php/senior_php/db.php on line 2 ghostwu@ghostwu:~/php/senior_php$ /usr/local/php54/bin/php -m | grep mysql ghostwu@ghostwu:~/php/senior_php$ cat db.php <?php $link = mysql_connect( "localhost", "root", "abc123" ); var_dump( $link ); ?> ghostwu@ghostwu:~/php/senior_php$

 擴展安裝步驟:

1 /usr/local/php54/bin/phpize 2 ./configure --with-php-config=/usr/local/php54/bin/php-config --with-mysql=/usr/local/mysql57 3 make
4 sudo make install

而後在/usr/local/php54/lib/php.ini中啓用mysql.so擴展: extension=mysql.so

再次執行php(db.php)文件,若是出現下面這個錯誤:

PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /home/ghostwu/php/senior_php/db.php on line 2

請在php.ini文件下面這個配置中,告訴php mysql的socket文件路徑

ghostwu@ghostwu:~/php/senior_php$ cat /usr/local/php54/lib/php.ini | grep mysql.default_socket pdo_mysql.default_socket= mysql.default_socket = /var/run/mysqld/mysqld.sock

最後執行數據庫鏈接成功:

ghostwu@ghostwu:~/php/senior_php$ /usr/local/php54/bin/php -f db.php resource(4) of type (mysql link)

 

各類參考文章:

http://www.jb51.net/article/101767.htm

http://www.javashuo.com/article/p-awwwmqne-p.html

http://blog.csdn.net/upHailin/article/details/69264389?locationNum=11&fps=1

http://blog.csdn.net/u011573853/article/details/52682256

http://www.javashuo.com/article/p-ubhtsoab-c.html

 

總結:

很重要的一項技能:  看日誌,看日誌,掌握調試方法, 個人mysql好幾回啓動不了,所有靠錯誤日誌,找到問題所在!!!

相關文章
相關標籤/搜索