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

来源:https://www.cnblogs.com/ghostwu/archive/2018/02/28/8485819.html
-Advertisement-
Play Games

我之前的文章已經改造了自定義MVC框架中的工具類(驗證碼,圖片上傳,圖像處理,分頁)4個類,接下來,就要改造模型類,模型類肯定要連接資料庫,由於我的Ubuntu Linux是裸裝的php(目前只編譯了一個gd擴展),所以需要編譯安裝mysql,並把它編譯成擴展,這裡,我選用5.7版本帶boost的源 ...


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

一、需要準備的庫

1,cmake編譯器

sudo apt-get install cmake

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

sudo apt-get install bison

3,ncurses庫,如果你有學過Linux系統編程游戲開發,可能聽過或者使用這個庫

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/

>進入解壓後的源碼目錄

cd /usr/local
cd boost_1_59_0/

如果切換不進boost_1_59_0這個目錄,自己記得修改用戶和組以及許可權【sudo chmod 755 boost_1_59_0/】

>然後運行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

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

1、添加Mysql用戶

groupadd mysql
useradd -r -g mysql mysql

2、創建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

三、如果臨時密碼太複雜登錄不進去,怎麼辦?重新修改密碼

>先關閉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這個密碼登錄了 

 四、把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

https://www.cnblogs.com/Lam7/p/6090989.html

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

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

https://www.cnblogs.com/forest-wow/p/6642025.html

 

總結:

很重要的一項技能:  看日誌,看日誌,掌握調試方法, 我的mysql好幾次啟動不了,全部靠錯誤日誌,找到問題所在!!!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大型站點高併發架構技術 高併發: 高併發主要是由於網站PV訪問量大,單台伺服器涌承載大量訪問所帶來的壓力,所以會採用多台伺服器進行分流,採用伺服器集群技術,對於每個訪問會被髮送到哪台伺服器,我們採取負載均衡策略,常見的技術有LVS,由於網站中有大量的靜態頁面,所以採用緩存伺服器和反向代理技術,包括H ...
  • #117. 歐拉迴路 統計 描述 提交 自定義測試 有一天一位靈魂畫師畫了一張圖,現在要你找出歐拉迴路,即在圖中找一個環使得每條邊都在環上出現恰好一次。 一共兩個子任務: 輸入格式 第一行一個整數 tt,表示子任務編號。t∈{1,2}t∈{1,2},如果 t=1t=1 則表示處理無向圖的情況,如果  ...
  • 文件處理 一.文件處理 1.介紹 電腦系統:電腦硬體,操作系統,應用程式 應用程式無法直接操作硬體,通過操作系統來操作文件,進而讀/寫硬體中的文件。 python打開文件過程: 2.打開文件的模式 a.打開文本文件 b.對於非文本文件,只能使用b模式,"b"表示以位元組的方式操作(而所有文件也都是 ...
  • 之前寫過一篇博客《Spring+Mybatis+Mysql搭建分散式資料庫訪問框架》描述如何通過Spring+Mybatis配置動態數據源訪問多個資料庫。但是之前的方案有一些限制(原博客中也描述了):只適用於資料庫數量不多且固定的情況。針對資料庫動態增加的情況無能為力。 下麵講的方案能支持資料庫動態 ...
  • jdk1.8.0_144 AbstractMap抽象類實現了一些簡單且通用的方法,本身並不難。但在這個抽象類中有兩個方法非常值得關註,keySet和values方法源碼的實現可以說是教科書式的典範。 抽象類通常作為一種骨架實現,為各自子類實現公共的方法。上一篇我們講解了Map介面,此篇對Abstra ...
  • github 的使用教程(非常詳細的小白視頻)鏈接如下: http://yun.itheima.com/course/209.html Git 詳細使用手冊鏈接如下: https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA% ...
  • 最近開始接觸matplotlib, 1.首先安裝matplotlib庫和其依賴的一些其他庫,例如:numpy,scipy和pandas等 2.開始進行簡單的編碼工作,併在PyCharm中運行,出現如下錯誤: 解決步驟如下: 前提: 1.導入正確版本的matplotlib庫 2.代碼最後調用matpl ...
  • 因為啟動tomcat有時候操作不當會出現8080被占用的情況 之前一直按百度經驗來,很麻煩 然而2條命令就可以解決 netstat ano|findstr 8080 說明:查看占用8080埠的進程 //pid 是10776 taskkill /pid 10776 /f 說明,運行windows自帶 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...