产品服务AMH 免费服务器主机面板SSL证书 免费SSL证书申请 担保单 免费安全、零费率交易平台编程助手免费智能写代码、翻译AMYSQL 免费MySQL管理工具

AMH 社区首页

 AMH社区 - 开放自由有价值的社区

[综合话题] [开发日志] 关于AMH数据库连接地址 mysql.sock 说明。

amysql
创始人
16530.81 价值分

amysql 发表于 2013-08-06 17:26:30
1、环境说明
AMH面板虚拟主机有两种运行模式,有安全模式与兼容模式。
新建主机默认情况是安全模式,用户可以使用AMChroot模块进行切换。

AMH安全模式是Chroot模拟Linux环境,运行虚拟主机、防跨站安全性很高。
由于是模拟环境,兼容性不太好。
虽然是安全模式兼容性不好,但一直没放弃安全模式,安全方面还是很重要,能增强就增强。
所以一直再改善安全模式的兼容问题。


2、环境影响
其中数据库连接地址就为一很好的例子。
php mysql_connect连接MySQL地址127.0.0.1与localhost是有区别的,
PHP官方提示:
引用:
只要将 server 指定为 "localhost" 或 "localhost:port",MySQL 客户端库会越过此值并尝试连接到本地套接字(Windows 中的名字管道)。如果想用 TCP/IP,应该用 "127.0.0.1" 代替 "localhost"。如果 MySQL 客户端库试图连接到一个错误的本地套接字,则应该在 PHP 配置中设定 的正确路径并把 server 留空。

也就是说明localhost是使用套接字(socket)连接,
AMH MySQL配置是:
socket = /tmp/mysql.sock
(mysql.sock位置于系统根/tmp目录)

# file /tmp/mysql.sock
/tmp/mysql.sock: socket

所以如果AMH虚拟主机使用安全模式,MySQL连接地址只允许使用127.0.0.1,因为防跨站不能越过主机目录读取系统根/tmp目录,实际读到的是虚拟主机根目录/tmp。

这也是AMH3.2或是以下版本虚拟主机安全模式只允许使用127.0.0.1的原因,需要使用localhost地址需要切换兼容模式。


3、解决方案
AMH4.0针对这一兼容问题做了改进,
使用ln硬链接 /tmp/mysql.sock 到每个虚拟主机根目录/tmp,解决防跨站不能读取系统根/tmp/mysql.sock目录的问题。
[ -w /tmp/mysql.sock ] && find /home/wwwroot/*/tmp -maxdepth 0 -exec ln -f /tmp/mysql.sock {} \;
每次MySQL 重启系统做一次硬链接即可。
因此解决了安全模式不能使用localhost地址问题,兼容了127.0.0.1、localhost。


4、需要改进
ln硬链接只允许同一分区内建立,不可跨分区建立(Inode位置不同)。
这意味着如果用户手动挂载/home目录为一独立分区,ln硬链接将会失败。
目前没用好的解决方法,用户可改进/etc/my.cnf配置把socket指定到/home目录,可以避免分区问题。
但这样需要增加php配置,建立虚拟主机/home目录等,相对比较麻烦。



5、默认MySQL连接地址总结
安全模式 -------------
1) 无分区挂载/home
localhost、127.0.0.1都支持。

2) 有分区挂载/home
127.0.0.1 支持。

兼容模式 -------------
localhost、127.0.0.1都支持。


  点赞,加油! (13.2分)
2013-08-06 17:26:30 1

AMH面板 - 好用高效低占用、安全可靠极稳定

恶小弟
银牌会员
4539.82 价值分

本帖最后由 恶小弟 于 2013-8-6 17:36 编辑

能开通吗? (n点 那样)
  支持 (0分)  反对 (0分)
回复  2013-08-06 17:34:55 2

ylx
银牌会员
4334.00 价值分

用127.0.0.1就对 了 .......
  支持 (0分)  反对 (0分)
回复  2013-08-06 17:50:46 3

amysql
创始人
16530.81 价值分

引用:
ylx 发表于 2013-8-6 17:50
用127.0.0.1就对 了 .......

#2楼,文不对题。

localhost、127.0.0.1的区别,有遇到这方面问题的用户,
也可以了解了解。
  支持 (0分)  反对 (0分)
回复  2013-08-06 18:02:04 4

sonla
铝牌会员
241.00 价值分

貌似127.0.0.1是给IDC和站群的哥们用的,localhost是给一两个站的哥们用的。
  支持 (0分)  反对 (0分)
回复  2013-08-06 19:34:57 5

ylx
银牌会员
4334.00 价值分

引用:
amysql 发表于 2013-8-6 18:02
#2楼,文不对题。

localhost、127.0.0.1的区别,有遇到这方面问题的用户,


表示不懂!!!!一直认为是通用的~~~
  支持 (0分)  反对 (0分)
回复  2013-08-06 19:38:26 6

amysql
创始人
16530.81 价值分

#5 你这是…?
#6 走的路不同、目的地一样。
  支持 (0分)  反对 (0分)
回复  2013-08-06 21:05:03 7

寒汐
铜牌会员
728.32 价值分

我说怎么localhost怎么老是无法连接数据库呢 只能改成127.0.0.1 原来是安全模式
  支持 (0分)  反对 (0分)
回复  2013-08-07 12:08:06 8

amysql
创始人
16530.81 价值分

引用:
寒汐 发表于 2013-8-7 12:08
我说怎么localhost怎么老是无法连接数据库呢 只能改成127.0.0.1 原来是安全模式 ...


看第5点总结。
  支持 (0分)  反对 (0分)
回复  2013-08-07 13:45:54 9

yingwu
铜牌会员
864.00 价值分

本帖最后由 yingwu 于 2013-8-7 14:20 编辑

我把数据盘挂载到了/home
然后将数据库移动并软链接到ln -s /home/data


最后:
[root@localhost /]# /etc/init.d/amh-start

出现:



这个是数据盘挂载/home 导致的 还是ln -s软链接导致的?
有没有具体的解决办法呢?

amh 的控制面板 貌似没有一点异常,还是可以正常使用的。

  支持 (0分)  反对 (0分)
回复  2013-08-07 14:18:55 10
 1 2 >  (总2页)
AMH社区列表
用户服务中心