我以前的文章已經改造了自定義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好幾回啓動不了,所有靠錯誤日誌,找到問題所在!!!