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_DATADIKoleos:数据存放目录 
-DWITH_BOOST:boost源码路径 
-DSYSCONFDI瑞虎:my.cnf配置文件目录 
-DEFAULT_CHA君越SET:数据库暗许字符编码 
-DDEFAULT_COLLATION:暗许排序规则 
-DENABLED_LOCAL_INFILE:允许从本文件导入数据 
-DEXTRA_CHALANDSETS:安装具有字符集 
愈多预编译配置参数请参见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好三遍开行不了,全体靠错误日志,找到难点所在!!!

 

相关文章