AMH 社区首页
AMH社区 - 开放自由有价值的社区
[综合话题] [开发日志] 关于AMH数据库连接地址 mysql.sock 说明。 |
|
---|---|
amysql |
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面板 - 好用高效低占用、安全可靠极稳定 |
恶小弟 |
本帖最后由 恶小弟 于 2013-8-6 17:36 编辑
能开通吗? (n点 那样)
回复
2013-08-06 17:34:55 2
|
ylx |
用127.0.0.1就对 了 .......
回复
2013-08-06 17:50:46 3
|
amysql |
#2楼,文不对题。 localhost、127.0.0.1的区别,有遇到这方面问题的用户, 也可以了解了解。
回复
2013-08-06 18:02:04 4
|
sonla |
貌似127.0.0.1是给IDC和站群的哥们用的,localhost是给一两个站的哥们用的。
回复
2013-08-06 19:34:57 5
|
ylx |
回复
2013-08-06 19:38:26 6
|
amysql |
#5 你这是…?
#6 走的路不同、目的地一样。
回复
2013-08-06 21:05:03 7
|
寒汐 |
我说怎么localhost怎么老是无法连接数据库呢 只能改成127.0.0.1 原来是安全模式
回复
2013-08-07 12:08:06 8
|
amysql |
回复
2013-08-07 13:45:54 9
|
yingwu |
本帖最后由 yingwu 于 2013-8-7 14:20 编辑
我把数据盘挂载到了/home 然后将数据库移动并软链接到ln -s /home/data 最后: [root@localhost /]# /etc/init.d/amh-start 出现: 这个是数据盘挂载/home 导致的 还是ln -s软链接导致的? 有没有具体的解决办法呢? amh 的控制面板 貌似没有一点异常,还是可以正常使用的。
回复
2013-08-07 14:18:55 10
|