我之前的文章已经改造了自定义 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 字段
- >flushprivileges;
- >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$
扩展安装步骤:
- /usr/local/php54/bin/phpize
- ./configure --with-php-config=/usr/local/php54/bin/php-config --with-mysql=/usr/local/mysql57
- make
- 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 好几次启动不了, 全部靠错误日志, 找到问题所在!!!
来源: https://www.cnblogs.com/ghostwu/p/8485819.html