• ubuntu16.04编译安装mysql-boost-5.7.21并编译成php扩展测试与使用


    我之前的文章已经改造了自定义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好几次启动不了,全部靠错误日志,找到问题所在!!!

  • 相关阅读:
    实用C语言技巧
    ASP.NET的适配器设计模式(Adapter)
    MongoDB的管理
    WinForm实现类似QQ停靠,显示隐藏过程添加特效效果
    dreamhappy博客索引
    Namenode的介绍
    asp.net
    学习
    采用Mono进行移动开发图书推荐
    VS2010+C#写的3D
  • 原文地址:https://www.cnblogs.com/ghostwu/p/8485819.html
Copyright © 2020-2023  润新知