今天碰到奇怪的问题:不过又增加经验了:
首先:论坛突然报以下错误(discuz的):
我马上想到缓存问题,我到后台更新了下缓存。然后刷新首页变成了:
百度了下,都说是要cdb_style表少了一个主题样式,补上就行了。然后马上到数据库看,打算看下cdb_style表并修复一下数据库,可是当我任意打开一张表后提示:
Got error 28 from storage engine
百度了下:
产生该错误的原因是:
临时空间不够,无法执行此SQL语句。
根据返回值,可以判断应该是某挂在分区空间已满造成。
[root@websites ~]# df -lh
Filesystem 容量 已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00 45G 43G 0 100%
/dev/xvda1 99M 12M 83M 13% /boot
/usr/tmpDSK 512M 0 512M 0% /dev/shm
解决办法:
清空/tmp目录,或者修改my.cnf中的tmpdir参数,指向具有足够空间目录。
清空tmp目录后(第一个问题算解决了),刷新首页,提示变了:
Can't connect to local MySQL server through socket
怎么会连不上数据库了呢。我重启数据库后还是这样。
百度后按一下方法,
问题分析:
出现这个错误一般情况下是因为下面两个原因:
1、MySQL 服务器没有开启。
2、MySQL 服务器开启了,但不能找到 socket 文件。
解决方法:
1、虚拟主机用户,请联系空间商确认数据库是否正常启动,并跟空间商确认 MySQL 的 socket 文件启动地址,可以尝试在 论坛根目录下的配置文件 config.inc.php 中的 $dbhost 的值改为 $dbname = 'localhost:/tmp/mysql.socket‘,(这里假设 MySQL 的启动地址是 /tmp/mysql.socket,具体的启动地址依据空间商提供的启动地址而定)。
2、独立主机用户,请检查一下 MySQL 服务是否已经开启,没有开启,请启动 MySQL 服务;如果已经开启并且是 Linux 系统,请检查一下 MySQL 的 socket 路径,然后打开 config.inc.php 找到
$dbhost = 'localhost'; 在 localhost 后面加冒号‘:’和 MySQL 的 socket 路径。
比如 MySQL 服务器为 localhost
MySQL 的 socket 路径为 /tmp/MySQL.sock
那么就改成如下:
$dbhost = 'localhost:/tmp/MySQL.sock';
今天弄个环境,遇到这个问题:Can't connect to local MySQL server through socket '/tmp/mysql.sock'
1.确认用户名跟密码都设置正常,授权正常,仍然
2.查看‘/tmp/mysql.sock’文件,发现,没有这个文件
3.查看mysql进程,如下:
4.原来之前使用的是/xxxxx/mysql/3306/data/mysql.sock这个sock 所以无法连接了,忘记了
5.处理方法如下:
ln -s /xxxxx/mysql/3306/data/mysql.sock /tmp/mysql.sock
再通过mysql命令就可以正常连接了!
mysql.sock文件丢失了
在mysql的启动过程中有时会遇到下述错误
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
请问mysql.sock 这个文件到底起什么作用?
如何避免发生如此错误?
答案一、
这个mysql.sock应该是mysql的主机和客户机在同一host(物理服务器)上的时候,使用unix domain socket做为通讯协议的载体,它比tcp快。通常遇到这个问题的原因就是你的mysql server没运行起来。
看看你的 /tmp/mysql.sock 这个文件存在否?正常情况下它应该在那里的,或者用 netstat 看看结果中是否有
Active UNIX domain sockets
答案二、
这个文件是用于socket连接的文件。
也就是只有你的守护进程启动起来这个文件才存在。
但是你的mysql程序(这个程序是客户端,服务器端是mysqld)可以选择是否使用mysql.sock文件来连接(因为这个方法只适合在Unix主机上面连接本地的mysqld),对于非本地的任何类型的主机。这些在MySQL的手册(包括晏子翻译的中文版本,覆盖3.23/4.0版本)都有说明。只要看看就可以明白。
前面朋友说不能连接,最大可能就是mysqld的这个守护进程没有启动。
答案三、
Mysql有两种连接方式:
(1)TCP/IP
(2)socket
对mysql.sock来说,其作用是 mysql客户端程序 mysql与 mysql服务器端程序 mysqlserver处于同一台机器,发起本地连接时可用 。
例如你无须定义连接host的具体IP得,只要为空或localhost就可以。
在此种情况下,即使你改变mysql的外部port也是一样可能正常连接。
因为你在my.ini中或my.cnf中改变端口后, mysql.sock是随每一次 mysql server启动生成的。已经根据你在更改完my.cnf后重启mysql时重新生成了一次,信息已跟着变更。
那么对于外部连接,必须是要变更port才能连接的。
本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1351632,如需转载请自行联系原作者