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() / << "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 ;
}
编译&执行:
ghostwu@ghostwu:~/php/test$ g++ boost_test.c -o boost_test
ghostwu@ghostwu:~/php/test$ ./boost_test
max timespan: .56205e+09h
min timespan: 1e-06s
now time elapsed: .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
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() 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好几次启动不了,全部靠错误日志,找到问题所在!!!
ubuntu16.04编译安装mysql-boost-5.7.21并编译成php扩展测试与使用的更多相关文章
- Ubuntu16.04下安装mysql
系统信息 (lsb_release -a) Distributor ID: Ubuntu Description: Ubuntu 16.04.2 LTS Release: 16.04 Codename ...
- ubuntu16.04下安装mysql详细步骤
1.如果要搭建服务器先去购买一个云主机,比如阿里云.京东云.新网等等都有卖.这里推荐使用京东云服务器,因为最近在搞活动.一元可体验两个月(可能现在活动已经过了,但在京东云里有免费领一个月的,学生机也有 ...
- ubuntu16.04下安装mysql,并开启远程访问
一.安装 apt-get install mysql-server 二.本地连接 mysql默认开启了本地连接 直接通过mysql -uuser -p,然后输入密码访问 三.开启远程访问 3.1.创建 ...
- 图解在Ubuntu16.04中安装MySQL
1.安装mysql-server sudo apt-get install mysql-server 输入y,回车.等待下载,安装 出现下图,需要设定Mysql的密码. 输入密码,回车,弹出确认对话框 ...
- Shell脚本一键部署——源码编译安装MySQL及自动补全工具
Shell脚本一键部署--源码编译安装MySQL及自动补全工具 编译安装MySQL 1.软件包 Mysql安装包 将安装包拖至/opt目录下,编辑一个脚本文件,将以下内容复制进去,然后source或者 ...
- CentOS 6.6 下源码编译安装MySQL 5.7.5
版权声明:转自:http://www.linuxidc.com/Linux/2015-08/121667.htm 说明:CentOS 6.6 下源码编译安装MySQL 5.7.5 1. 安装相关工具# ...
- Linux 环境编译安装mysql (源码安装包)
标注: Linux需要先配置网络yum源,确定yum能在线安装软件包,方便测试过程中安装部分依赖包.配置163网易提示的网络yum源参考博客 http://www.cnblogs.com/zoulo ...
- Linux(CentOS6.5)下编译安装MySQL Community Server 5.7.12
组件 官方网站 直接下载地址 备注 mysql http://dev.mysql.com/downloads/mysql/ http://mirrors.sohu.com/mysql/MySQL- ...
- ubuntu16.04下安装artoolkit5
目前对AR技术的常见理解就是CV(Computer Vision)+CG(Computer Graphic).CV的方法很多,简单些比如FREAK+ICP(ARToolKit中的NFT),复杂些就是S ...
随机推荐
- CCF系列之数列分段(201509-1)
试题名称: 数列分段 试题编号: 201509-1 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 ...
- 【Android】屏幕尺寸的表示
1. 单位 - px(pixel): 普通的像素点描述,位图中的一个颜色点(RGBA或者YUV) - dip(device independent pixels): 设备独立像素. - dp: 与di ...
- Lucene.net(4.8.0) 学习问题记录四: IndexWriter 索引的优化以及思考
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- JavaScript学习日志:关于js分号
javascript有自动添加分号的功能,但是不是所有情况都会自动添加,要区分: 1,如果语句独占一行 如果当前行内的语句能够被js正确解析,那么就会在句尾添加一个分号. (如何判断是否正确解析?你在 ...
- es6重点笔记:对象
1,Object.is():比较两个值是否严格相等,es5的'===',不能判断+0和-0,还有NaN,但是es6的Object.is()可以区分 Object.is(+0, -0); // fals ...
- shopnc前台登陆不进去解决方法
安装好shopnc后,注册新用户成功,且登陆后提示登陆成功,但是一两秒后自动跳转回登陆页面,需要重新登陆问题 PHP写session不是自动起的,需要修改后才行,所以 找到PHP的php.ini配置文 ...
- hashCode方法和equals方法比较
为什么用HashCode比较比用equals方法比较要快呢?我们要想比较hashCode与equals的性能,得先了解HashCode是什么. HashCode HashCode是jdk根据对象的地址 ...
- Windows核心编程&内存管理
1. 每个进程都有自己的虚拟地址空间,对于32位机器而言,这个地址空间的大小为4GB(2^32 / 1024^3),这个虚拟地址空间只不过是一个内存地址空间, 为了能够正常读/写数据,我们还需要把物理 ...
- logback使用配置详解
title: logback使用配置详解 date: 2017-04-25 16:42:49 tags: 日志 --- 1.介绍 Logback是由log4j创始人设计的另一个开源日志组件,它当前分为 ...
- ORACLE 博客文章目录(2015
从接触ORACLE到深入学习,已有好几年了,虽然写的博客不多,质量也参差不齐,但是,它却是成长的历程的点点滴滴的一个见证,见证了我在这条路上的寻寻觅觅,朝圣的心路历程,现在将ORACLE方面的博客整理 ...