一、源码编译安装apache2.4
1. 先到apache官方网站 下载 Download - The Apache HTTP Server Project 最新版本 httpd-2.4.18.tar.gz
2. 先确保它所依赖的库是否有,怎样查看软件是否安装(rpm -q xxx),如果没有安装依赖则进行安装
3. 安装 zlib-devel pcre-devel pcre apr apr-util
(apr apr-util 这两个库,笔者在安装时发现使用yum安装不可取,编译时找不到类库,因此笔者这里采用源码安装方式)
4. yum install zlib-devel pcre-devel pcre
5. 确保安装了 gcc-c++
yum install gcc-c++
6.下载以下依赖包安装
wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz ;
wget http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz ;
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.zip
tar -zxvf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/src/httpd24/apr/
make && make install
tar -zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/src/httpd24/apr-util/ --with-apr=/usr/local/src/httpd24/apr/
make && make install
unzip pcre-8.10.zip(解压用unzip)
7.
./configure \
--prefix=/usr/local/src/httpd24/apache/ \
--with-apr=/usr/local/src/httpd24/apr/ \
--with-apr-util=/usr/local/src/httpd24/apr-util/ \
--enable-so \
--enable-deflate=shared \
--enable-expires=shared \
--enable-rewrite=shared \
--enable-static-support
8. 加入到系统服务 grep -v "#" /usr/local/apache/bin/apachectl > /etc/init.d/apache
vi /etc/init.d/apache 在该文件最前面插入下面的行,使其支持chkconfig命令:
#!/bin/sh
# chkconfig: 2345 85 15
# description: Apache is a World Wide Web server.
chmod +x /etc/init.d/apache
chkconfig --add apache
9. 加入开机自启动 vi /etc/rc.local
/etc/init.d/apachectl -k start
10.把服务加入到环境变量中(centOS7.6的环境)
(1) vi ~/.bash_profile 中添加httpd的路径
(2) PATH=$PATH:$HOME/bin:/usr/local/soft/apache/bin (注意这里不能把apachectl文件名写入,NND!)
(3) 如果想对全体用户有效就把这段
APACHE=/usr/local/soft/apache/bin
PHP=/usr/local/soft/php/bin
加入到/etc/profile,并且把变量添加进这行末尾export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL APACHE PHP,貌似还要添加PATH=$PATH:$HOME/bin:$APACHE:$PHP进vi ~/.bash_profile
加入到/etc/environment文件中,怎么测试都不成功NND!
11.虚拟主机的配置:
<VirtualHost *:80>重点注意这个地方不能写成<VirtualHost www.inspect.ltd:80> NND!
ServerName www.inspect.ltd:80
ServerAlias www.inspect.ltd
DocumentRoot "/home/www/www.inspect.ltd"
<Directory "/home/www/www.inspect.ltd">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
DirectoryIndex index.html index.php
ErrorLog "logs/www.inspect.ltd-error.log"
CustomLog "logs/www.inspect.ltd-access.log" common
</VirtualHost>
二、源码编译安装php7.0
windows + Apache + PHP(模块) :使用线程安全版本。
windows + Apache + PHP(FastCGI) :使用非线程安全版本。
线程安全主要针对的是Windows下以IIS来运行PHP的情况, 因为Windows中频繁申请进程开销较大
在Linux系统下,PHP绝大多数情况下都以多进程方式运行,所以Apache直接使用None Thread Safe即可。
1. 依赖包要先安装上
yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype freetype-devel gd jpegsrc libpng libpng-devel libjpeg libjpeg-devel libxml2 libxml2-devel zlib curl curl-devel openssl-devel bzip2-devel
这些三方库( 比如curl和gd )在编译PHP之前得安装好,可以直接使用yum安装在默认位置
这几个库安装不成功(mcrypt 是php里面重要的加密支持扩展库,linux环境下该库在默认情况下不开启)
php-mcrypt libmcrypt libmcrypt-devel(这三个可以通过下面安装) jpegsrc(暂时不知道)
打开网址: Index of /fedora-epel/6/i386/ 使用 Ctrl+F 搜索关键词“epel-release” 找到当前最新的扩展包发现最新版本为:epel-release-6-8.noarch.rpm
安装yum源: rpm -ivh http://mirrors.sohu.com/fedora-epel/6/i386/epel-release-6-8.noarch.rpm
yum install php-mcrypt
yum install libjpeg-devel(这个不装编译时提示error: jpeglib.h not found.)
因为Redhat的yum源是收费的,
所以在线只能配置CentOS的yum源,下载好CentOS yum源之后得把repo文件里链接里的变量改成死链接才能找着文件。(测试echo $releaserver输出是空的)把文件复制到/etc/yum.repo.d/:运行以下命令生成缓存
yum clean all
yum makecache
2.注意重新编译时要删掉整个文件夹或make clean,不然编译能通过但安装时容易出错,另外 --enable-mysqlnd \行以下的内容先别编译不然也容易出错。
./configure \
--prefix=/usr/local/soft/php \
--with-apxs2=/usr/local/soft/apache/bin/apxs \
--enable-mbstring \
--with-gd \
--with-curl \
--enable-bcmath \
--enable-sockets \
--with-config-file-path=/usr/local/soft/php/etc \
--enable-fpm \
--enable-soap \
--enable-xml \
--enable-bcmath \
--with-bz2 \
--with-zlib \
--with-gettext \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-libxml-dir \
--enable-maintainer-zts \
--with-mysql \ 支持老版内置的引擎,后续用phpize追加还失败貌似不算扩展模块,NND搞了两天
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock=/var/lib/mysql/mysql.sock
--with-gd #可以后面加装,这里装gd库时最好把jpeg等参数也加上,不然分开装时好像加载不了jpeg.这是一次痛苦的经历
(不知道从哪一版本开始,PHP不在希望使用mysql的库来支持mysql的连接,启用了mysqlnd来支持,听说比libmysql要快很多)难怪旧我的程序运行不了
3. 第一次安装时出错而安装到了/usr/local目录下是因为每句的反斜杠没加上
4. make && make install
5. cp php.ini-development /usr/local/php7/etc/php.ini (如果新增库的支持而重新编译需要安装后需要重新copy一次过去才能生效)
6. 在httpd.conf中加载php模块
Linux下是用:LoadModule php7_module modules/libphp7.so
#在win7下的Apache2.4加载php时用如下加载方法,以免Apache默认加载C盘下windows下的php.ini,然后在php.ini中要打开路径extension_dir = "D:/wamp/php71/ext",phpinfo()中查看到的Configuration File (php.ini) Path是默认的而Loaded Configuration File是指实际加载的
PHPIniDir "D:/wamp/php71/php.ini"
LoadModule php7_module "D:/wamp/php71/php7apache2_4.dll"
AddType application/x-httpd-php .php
7. 安装完毕出现执行php文件后页面白屏解决,增加php支持,不再使用 Apache 的 AddType 指令来设置
A:----------------------------------------------
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
或 AddHandler php5-script .php
B:----------------------------------------------
另外发现是不能执行mysql的查询,php配置文件里没有加载mysqli.so扩展,NND!
8. Warning: mysqli_connect(): (HY000/2002): No such file or directory in /home/www/inspection/sicms/tes
配置文件中的 mysqli.default_socket 设置是否指向正确的套接字文件路径mysql的mysql.sock文件。
9. 不支持原始的mysql问题NND
10.追加模块要选运行
phpize[root@anpc ~] cd /usr/local/src/php-5.2.10/ext/pdo_mysql
[root@anpc pdo_mysql] /usr/local/soft/php/bin/phpize
[root@anpc pdo_mysql] ./configure -with-php-config=/usr/local/soft/php/bin/php-config -with-mysql=/usr/bin/mysql_config
===================================================================================
php.ini配置上传文件关注如下几个参数:
post_max_size=128M #这两个设置要同时设置,不然可能出现设置了还是不能上传大文件
upload_max_file_size=128M
max_execution_time=30
max_input_time=600
memory_limit=32M
===================================================================================
三、rpm包安装MYSQL5.7(类似于yum安装,不是编译安装)
官网:MySQL :: MySQL Downloads # 貌似只有最新版下载
社团:MySQL :: MySQL Community Downloads # 各种版本都有,如果要下载源码包编译安装的话就在Operating System处选择Source Code, OS Version 处选择All Operating Systems
0. tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar(谨记el6是配合centOS6的,el7才适合centOS 7)
# 选择下载rpm-bundle类型的包,这样就省去寻找依赖包的麻烦。解压注意不用z参数,因为是tar包。另外MySQL Workbench是专门开发mysql前台工作台的团体。
安装依赖包的顺序为:
rpm -ivh mysql-community-common-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm
安装依赖包时故障提示:
file /usr/share/mysql/charsets/latin7.xml from install of mysql-community-common-5.7.41-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.61-4.el6.x86_64
解决: rpm -qa|grep mysql命令查看系统中是否已有mysql-libs-5.1.61-4.el6.x86_64
卸载掉自带的mysql,执行rpm -e --nodeps mysql-libs命令,而mysql-libs上面的文件名
error: Failed dependencies:
libsasl2.so.2 ()(64bit) is needed by mysql-community-server-5.7.41-1.el6.x86_64
原因:下载的mysql-5.7.41-1.el6.x86_64版本不适合在centOS7上安装,要下载mysql-5.7.41-1.el7.x86_64的版本
1. yum -y install make gcc-c++ cmake bison-devel ncurses-devel git
2. 下载BOOST并解压,放置位置/usr/local/soft/ , Boost能提升数据库性能,Boost库提供多线程支持,在高并发访问环境下处理MySQL数据库请求
(1)到官网下载最新版的boost,http://www.boost.org/users/history/version_1_67_0.html
(2)可能需要预先安装相关项:yum -y install gcc-c++ python-devel bzip2-devel zlib-devel
(3) 解压:tar zxvf boost_1_67_0.tar.gz
(4) 进入解压后的目录boost_1_67_0,
执行:sudo ./bootstrap.sh --prefix=/usr/local/boost
(5)安装 sudo ./b2 install -j5 --with-date_time --with-filesystem --with-system --with-thread --with-regex --with-chrono --with-log link=static runtime-link=static
(6)安装Boost.Build,进入boost_1_67_0目录下的tools/build目录,执行:sudo ./bootstrap.sh
(7)安装sudo ./b2 install --prefix=/usr/local/boost
(8)配置环境变量BOOST_ROOT=/usr/local/boost
sudo vi /etc/profile
source /etc/profile
3. 等一切就绪后,我们需要确保存在 mysql组和mysql用户,没有的话就添加
cat /etc/group|grep 'mysql'
cat /etc/passwd|grep 'mysql'
groupadd mysql
useradd -g mysql mysql
然后将目录'/usr/lib/mysql'的所有者改为mysql
chown -R mysql:mysql /var/lib/mysql
chmod -R 777 /var/lib/mysql
4. 运行出错:
- 运行mysqld –initialize 出错[ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
原因: Mysql出于安全考虑默认拒绝用root账号启动mysql服务
解决方法:
Mysqld –user=root启动
Vi /etc/my.cnf 加上user=mysql(使用一个属于mysqld用户组的普通用户启动)
- 因为是rpm安装的,所以centOS7.6下运行systemctl start mysqld启动,但出错 Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
原因:mysql的权限缺失
解决方法:
chown -R mysql:mysql /var/lib/mysql
chmod -R 777 /var/lib/mysql
如果这样操作还是不行,就把该目录下的数据全删掉rm –rf /var/lib/mysql/*(但注意这样会把所以数据删掉的!慎用)
5. 初始登入不知道密码或密码文件误删的情况需要在my.cnf的[mysqld]下面加入skip-grant-tables重启之后无密码登入root再修改密码(完事后千万要记得改回去)
Mysql –u root
update mysql.user set authentication_string=password('2188885') where user='root' and Host = 'localhost';
quit;
6. 用新密码登入后执行create database xxxx;时出错
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.执行:
alter user 'root'@'localhost' identified by 'root-ps@123456';
flush privileges;
7. 返原数据库:
source /root/bak.sql; (注意用此命令必须先create database xxxx; 再use xxxx;)
四、MySQL的编译不是用configure,而是需要安装cmake
1.首先要下载mysql的源码包(注意是源码包,在Operating System这里要选择Source Code)
2.cmake /home/yukey/soft/mysql-5.7.41 -DWITH_BOOST=/usr/local/mysql57/boost
# 当前路径是/home/yukey/soft/mysql-5.7.41/yukey_build,所以会把编译后的文件生成在当前路径下。
# make && make install时会自动在上层路径创建一个文件夹,安装到了/usr/local/mysql目录下,所以可以指定安装路径make install INSTALL_ROOT=/path
# 用下面的老出错因为下面的cmake 没有指定路径,
# 先把下载好的boost文件夹(包含子文件夹(boost/boost_1_59_0/boost/)放入安装文件夹
4. cmake /home/yukey/soft/mysql-5.7.41 \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql57 \
-DMYSQL_DATADIR=/var/data/mysql57 \
-DSYSCONFDIR=/usr/local/mysql57/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql57/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_BOOST=/home/yukey/soft/mysql-5.7.41/boost
5. make && make install
#在编译后的文件路径下执行/home/yukey/soft/mysql-5.7.41/yukey_build
#出错后重新运行配置,需要删除CMakeCache.txt文件
make clean
rm -f CMakeCache.txt
6. 等一切就绪后,我们需要确保存在 mysql组和mysql用户,没有的话就添加
cat /etc/group|grep 'mysql'
cat /etc/passwd|grep 'mysql'
groupadd mysql
useradd -g mysql mysql
然后将目录'/usr/local/src/mysql57'的所有者改为mysql
chown -R mysql:mysql /usr/local/src/mysql57
chown -R mysql:mysql /var/data/mysql57 或/var/opt/mysql57
chmod -R 755 /var/data/mysql57 这样递归更改mysql57目录下的子目录及文件
chown -R mysql:mysql /var/lib/mysql
find PATH –type f | xargs chmod 644 单文件改为644
find PATH –type d | xargs chmod 777 单文件夹改为644
6. cp /usr/local/src/mysql57/my-default.cnf /etc/my.cnf (把数据目录设置好,不然容易跑到默认目录去)
# 安装完后找不着my.cnf, 通过which mysqld 命令查看mysql的安装位置
# 再通过mysqld --verbose --help |grep -A 1 'Default options'
命令查看mysql使用的配置文件默认路径
7. /usr/local/src/mysql57/bin/mysqld –initialize #进行初始化,windows下也是一样,启动时用net start mysql(必须用管理员身份运行不然出错)
/usr/local/src/mysql57/bin/mysql -u root -p 用初密码登入修改密码 (这种办法在mysql5.7不能使用了)
mysql5.7会生成一个初始化密码,而在之前的版本首次登陆不需要登录。
cat /root/.mysql_secret
8. 用如下命令修改默认密码(注意:先用上面命令启动mysql才能执行下面命令修改密码)
shell> bin/mysqladmin -u root password '2133335' -p'CImiVUld:2Ck' (命令执行后立刻要用新密码登入)
或用 SET PASSWORD = PASSWORD('your new password');
不知道密码或密码文件误删的情况需要在my.cnf的[mysqld]下面加入skip-grant-tables重启之后无密码登入root再修改。
show databases; use mysql; show tables;
update mysql.user set authentication_string=password('2188885') where user='root' and Host = 'localhost';
quit;
===================================================================================
/usr/local/mysql57/support-files/mysql.server start
故障:ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid)
#PID,和mysql.sock文件都是服务运行时才生成的,停止服务时文件消失,别傻傻的去找!
原因 1.是数据存储目录的属主没有改成mysql
chown -R mysql:mysql /var/opt/data/mysql57
原因 2.是在my.cnf文件中指定的mysql.sock文件路径因用户权限问题无法写入mysql.sock文件 chown -R mysql:mysql /var/lib/mysql
9. cp /usr/local/mysql57/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql57/support-files/mysql.server /etc/init.d/mysql
chkconfig --add mysql
10. 注意如果安装了两个版本的mysql的话,进入mysql控制台的话要先进入具体的目录如:
cd /usr/local/mysql57/bin
mysql -uroot -p2133335
11. 用初始密码登入后出错提示ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement
SET PASSWORD = PASSWORD('123456');
Query OK, 0 rows affected (0.03 sec)
也就是用mysql> SET PASSWORD = PASSWORD('123456');这句话重新设置一次密码!大爷的,真费劲啊。
===================================================================================