MySQL 的 RPM 包或源码包在默认情况下并没有提供图形界面的管理工具,在这类工具中最著名是 phpMyAdmin。
phpMyAdmin(官方网站:http://www.phpmyadmin.net)是一个以 PHP 为基础的 MySQL 数据库管理工具。phpMyAdmin 让管理者通过 Web 的方式管理 MySQL 数据库。phpMyAdmin 与其它 PHP 程序一样在 Web 服务器上执行。但可以在任何地方使用这些程序产生的 HTML 页面,远端管理 MySQL 数据库,方便的建立、修改、删除数据库及表。
注意 phpMyAdmin 对 PHP 和 MySQL 的版本要求:
1、下载 phpMyAdmin 并解压
下载到 /data/software/ 目录
2、把解压出来的目录移动到 Apache 网站所在目录。
并复制 phpMyAdmin 配置文件模板。
修改 SELinux 状态。
3、启动 httpd、mysqld 服务
由于我之前配置了 LAMP 环境,所以 Apache、MySQL 服务已经成功运行。
4、访问 phpMyAdmin
上述配置完成后,可以使用 http://192.168.10.1/phpmyadmin 访问到 phpMyAdmin。如下图:
phpMyAdmin 可根据客户端所使用的操作系统的语言自动调整所显示的语言。
可以发现少了一个 mcrypt 扩展,这是一个加密方式。后继可以安装,建议必须安装。用来加密 Web 客户端与服务器端传输的数据,以保证 PHP 和数据库的安全。
注意:默认情况下 phpMyAdmin 会认为和所管理的 MySQL 在同一台主机,如果不在同一台主机,可修改“/var/www/html/phpmyadmin/config.inc.php”文件,内容如下:
$cfgServers[1]['host']='localhost';
5、登录 MySQL 数据库
输入 MySQL 数据库的管理员用户 root 和密码。即可进入数据库。如下图:
下面是数据库 mysql 下 user 表中的内容,可以看到目前数据库中有那些用户。
到这一步只能算服务架起来了。还有很的设置要做。最主要的当然是安全。牵扯到数据库,当然要保证数据库安全。
还需要安装 mcrypt 和 mhash 模块。否则会有以下问题,如下图:
所以到这一步,我们只是初步的把服务搭建起来。后续还有很多的工作要做。
问题1:配置文件现在需要一个短语密码
这是因为出于安全的考虑 phpMyAdmin 会启用 Cookies,所以必须要设置一个密码。在访问 phpMyAdmin 首页的时候下方也有提示。
为启用 Cookies 设置一个密码:
我把 phpMyAdmin 放到了 /var/www/html/phpmyadmin/ 目录。所以到该目录下,编辑 config.inc.php 和 libraries/config.default.php 两个配置文件。找到如下这一行:
$cfg['blowfish_secret'] = '';
在后面的单引号中加入密码,我设置的是:123456。如下图:
/var/www/html/phpmyadmin/config.inc.php
/var/www/html/phpmyadmin/libraries/config.default.php
注意:
/var/www/html/phpmyadmin/config.inc.php 配置文件优先级高于 /var/www/html/phpmyadmin/libraries/config.default.php 配置文件。只要设置 config.inc.php 即可。
问题2:缺少 mcrypt 扩展。
安装三个软件包:
libmcrypt
mhash
mcrypt
注意:
其中 libmcrypt 是编译 mcrypt 时所需要的依赖包,所以要在编译 mcrypt 包前先编译安装 libmcrypt包。
mcrypt 扩展库可用以实现加密解密功能。mcrypt库支持20多种加密算法和8种加密模式。
mhash 函数库支持多种哈稀演算法,例如最出名的 MD5、SHA1 或 GOST,还有其它多种的哈稀演算法。
我所下载的三个软件包如下图:
我下载的版本有点低。建议用高版本,但不建议用最新版。
下图是它们之间的依赖关系:
该图来源于网络
注意:
由于在配置 mcrypt 时,会找不到 libmcrypt 的链接库,导致无法编译,因为 libmcrypt 的链接库在 /usr/local/lib/ 目录下。因些在配置 mcrypt 时要加入 LD_LIBRARY_PATH=/usr/local/lib/ 导入键接库。
即:#./configure LD_LIBRARY_PATH=/usr/local/lib/
(1)先安装libmcrypt (说明:libmcript 默认安装在 /usr/local )
#tar -xvzf libmcrypt-2.5.7.tar.gz
#cd libmcrypt-2.5.7
#./configure
#make
#make install
(2)安装mhash
#tar -zxjf mhash-0.9.9.9.tar.bz2
#cd mhash-0.9.9.9
#./configure
#make
#make install
(3)安装mcrypt
#tar -xvzf mcrypt-2.6.7.tar.gz
#cd mcrypt-2.6.8
#./configure LD_LIBRARY_PATH=/usr/local/lib/
#make
#make install
注意:
指定 libmcrypt 链接库,由于我上面按默认编译安装 libmcrypt,所以安装路径应该是 /usr/local/lib/ ,如果不知道,可以用命令 #find /usr/ -name libmcrypt.so 查找。
(4)安装PHP扩展模块:
动态加载
这一步分两种情况,一种是通过源码安装的 LAMP 环境;一种是通过 RMP 包安装 LAMP 环境。针对这两种安装方法安装 mcrypt 扩展模块。原每个步骤针对源码安装的 LAMP 环境,但是我会在每个步骤特别注明 RPM 包安装的环境怎么做。
使用 PHP 的常见问题是:编译 PHP 时忘记添加某扩展,后来想添加扩展,但是因为安装 PHP 后又装了一些东西,不想删除目录重装,于是可以采用 phpize。来针对特定模块编译安装。
说明:
LAMP 源码安装环境
Linux:
RHEL 6
Apache:
版本:httpd-2.2.15-5.el6.x86_64
安装路径:/usr/local/httpd/
MySQL:
版本:mysql-5.1.47-4.el6.x86_64
安装路径:/usr/local/mysql
PHP:
版本:php-5.3.2-6.el6.x86_64
安装路径:/usr/local/php/
LAMP RPM安装环境
Linux:
RHEL 6
Apache:
版本:httpd-2.2.15-5.el6.x86_64
默认安装路径
MySQL:
版本:mysql-5.1.47-4.el6.x86_64
默认安装路径
PHP:
版本:php-5.3.2-6.el6.x86_64
默认安装路径
方法:
1)、要有与现有 PHP 完全相同的 PHP 压缩包 解压后进入里面的 ext/mcrypt目录 (里面是 mcrypt 的 PHP 扩展)
#cd /temp/php-5.3.2/ext/mcrypt
注意:
如果是 RPM 包安装的 PHP,建议下载同样版本的源码包做这个操作。源码包与你安装的 RMP 包的版本不一样,也是可以的,我下载了一个 php-5.2.17 和 php-5.3.8 的源码包测试过,编译出来的 mcrypt.so 模块可以使用。
RPM 包安装的 LAMP 环境同样做这一步。
2)、执行 /usr/local/php/bin/phpize,执行完后,会发现当前目录下多了一些 configure 文件,如果没报错,则根据提示运行。
#cd /temp/php-5.3.2/ext/mcrypt/
#/usr/local/php/bin/phpize (针对源码安装的 PHP,执行 PHP 命令时使用绝对路径。)
执行完 phpize 命令后会生成 configure 配置文件和其它几个文件。如下图:
注意:
在执行 phpize 命令时,一定要在解压开的源码包 /temp/php-5.3.2/ext/mcrypt/ 这个目录下执行 phpize 命令。所以要先切换到 /temp/php-5.3.2/ext/mcrypt/ 这个目录。
如果是 RPM 包安装的 PHP,就不需要使用绝对路径执行命令了。这条命令在 php-devel 包中,所以你要安装这个包。
RPM 包安装的 LAMP 环境同样做这一步。
3)、编译安装
#./configure --with-php-config=/usr/local/php/bin/php-config
#make
#make install
注意:
在 #make 完成后,会在当前目录的 modules/ 目录下生成 mcrypt.so 模块。modules/ 目录也是在执行 #make 命令后创建的。在执行 #make install 命令的时候会提示安装 mcrypt.so 模块的路径。
RPM 包安装的 LAMP 环境下测试,如下图:
注意:
源码安装的 PHP:php-config 的位置是 /usr/local/php/bin/php-config 。不指定路径会出现错误提示。
看到上图会有点困惑,上图是在 RPM 包安装的 LAMP 环境中测试的。如果是源码安装的 LAMP 环境,安装位位置就不一样了,因为在源码的环境中,要指定 php-config 的位置,即 #./configure --with-php-config=/usr/local/php/bin/php-config。安装 mcrypt.so 模块的位置受这个指定的 php-config 位置影响。
RPM 包安装的 PHP:php-config 是默认路径,/usr/bin/php-config。可以不指定路径。mcrypt.so 模块默认安装路径就是上图中的位置。
如果不知道可以用命令 #find / -name php-config 查找。
RPM 包安装的 LAMP 环境同样做这一步。
在源码安装的情况下,根据 php.ini 中指示的 extension_dir 指向的目录中, 将 mcrypt.so 其复制过去。你也可以修改 extension_dir 的指向,例如指向 /usr/lib64/php/modules/ 这个目录。这个 extension_dir 决定了 mcrypt.so 模块要放在的目录。
注意:
如果是 RPM 包安装的 LAMP 环境,一般就不需要做这一步。
5)、配置php.ini
#vi /usr/local/php/php.ini
并添加 extension=mcrypt.so
注意:
如果是 RPM 包安装的 LAMP 环境:PHP 配置文件在 /etc/php.ini 。
RPM 包安装的 LAMP 环境同样做这一步。
6)、重启 httpd 服务
#/usr/local/httpd/bin/apachectl restart
注意:
如果是 RPM 包安装的 LAMP 环境:直接执行 #apachectl restart 命令,或者是执行:#service httpd restart
RPM 包安装的 LAMP 环境同样做这一步。
下图是 PHP 官方的安装方法:
验证
现在来看一下访问 phpMyAdmin 的结果,看看有没有解决问题。如下图:
访问 http://192.168.10.1/phpmyadmin 并登录。
可以看到,已级解决了 mcrypt 扩展问题和 Cookies 需要一个短语密码的问题。
问题3:没有找到 PHP 扩展 mbstring 字符集。
注意:
这个也需要单独针对 mbstring.so 模块编译。方法和编译 mcrypt.so 模块用一样。所需要注意的地方和修改的地方完全一样。
在编译 mbstring 时,有可能会出现这个错误:
error: ‘PHP_FE_END’ undeclared here (not in a function)
make: *** [mbstring.lo] Error 1
解决方法如下:
刚开始以为是编译器和版本的问题。又下载的 php-5.3.8.tar.bz2,还是出现同样的问题。
执行下面两行命即可解决问题。出现这个问题,我觉得是源码被篡改了。当然是 hacker 所为了。
Apparently, the hack is to replace PHP_FE_FUNCTION by {NULL,NULL,NULL} so I added this in my code:
sed -i 's|PHP_FE_END|{NULL,NULL,NULL}|' /temp/php-5.3.8/ext/**/*.c
sed -i 's|ZEND_MOD_END|{NULL,NULL,NULL}|' /temp/php-5.3.8/ext/**/*.c
And this fixes the bug. But I am not a C expert so I know it works but I don't know why so it's kind of frustrating.
上面的方法摘自国外网络。如错误提示中有提到具体的错误文件,那就指定修改这个文件即可。
mbstring 编译开始:
#cd /temp/php-5.3.2/ext/mbstring/
#phpize
#./configure --with-php-config=/usr/local/php/bin/php-config (同样分两种情况)
#make
#make install
确定mcrypt.so文件在正确的位置
#vi /usr/local/php/php.ini
并添加 extension=mbstring.so
重启 httpd 服务
验证
如下图:
问题4:解决 phpMyAdmin 高级功能未设置。
1)、导入数据库
有一个SQL文件 phpmyadmin/script/create_tables.sql,通过 create_tables.sql 文件创建必需的数据表。在这一步,你也可以直接使用phpmyadmin导入功能完成这一步的操作。
注意:
这一步可以用 phpMyAdmin 的 Web 界面导入。数据库相关操作都可以这样通过 phpMyAdmin 操作。
GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass';
GRANT SELECT (
Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
Execute_priv, Repl_slave_priv, Repl_client_priv
) ON mysql.user TO 'pma'@'localhost';
GRANT SELECT ON mysql.db TO 'pma'@'localhost';
GRANT SELECT ON mysql.host TO 'pma'@'localhost';
GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv) ON mysql.tables_priv TO 'pma'@'localhost';
GRANT SELECT ON phpmyadmin.* TO 'pma'@'localhost';
注意:
这一步也可以用 phpMyAdmin 的 Web 图形界面操作。
3)、修改配置文件
修改 config_inc.php 配置文件如下图:
注意:
第一行 pma 就是上面创建的用户 , 第二行 pmapass 就是该用户的密码。实际应用时当然不能设置这个了 ^_^。
验证:
由于日志写的很慢,中间出现问题,等到解决了问题再写,每一步都写的很清楚了。前前后后花了一周的时间。