标题: PHP教程之利用MySQL时的一些罕见毛病 [打印本页] 作者: 冷月葬花魂 时间: 2015-2-4 00:18 标题: PHP教程之利用MySQL时的一些罕见毛病 告诉你了一个方式,但是缺少努力这一环节,那也是白搭。mysql|毛病 MySQL server has gone away毛病
本大节也触及有关Lost connection to server during query的毛病。
对MySQL server has gone away毛病最多见的缘由是办事器超时了而且封闭了毗连。缺省地,假如没有工作产生,办事器在 8个小时后封闭毗连。你可在启动mysqld时经由过程设置wait_timeout变量改动工夫限制。
Can't connect to [local] MySQL server毛病
一个MySQL客户可以两种分歧的体例毗连mysqld办事器:Unix套接字,它经由过程在文件体系中的一个文件(缺省“/tmp/mysqld.sock”)停止毗连;或TCP/IP,它经由过程一个端标语毗连。Unix套接字比TCP/IP更快,然而只要用在毗连统一台盘算机上的办事器。假如你不指定主机名或假如你指定特别的主机名localhost,利用Unix套接字。
毛病(2002)Can't connect to ...凡是意味着没有一个MySQL办事器运转在体系上或当试图毗连mysqld办事器时,你正在利用一个毛病的套接字文件或TCP/IP端口。
shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host' version
shell> mysqladmin --socket=/tmp/mysql.sock version
shell> mysqladmin --socket=/path/to/socket version
你正在利用 Linux和线程已逝世了(中心倾倒了)。在这类情形中,你必需杀逝世其它mysqld线程(例如在启动一个新的MySQL办事器之前,可以用mysql_zap剧本)。见18.1 假如MySQL老是溃散怎样办。
假如你失掉毛病Can't connect to MySQL server on some_hostname,你可以测验考试以下步调找出成绩是甚么:
经由过程履行telnet your-host-name tcp-ip-port-number而且按几回回车来反省办事器是不是正常运转。假如有一个MySQL运转在这个端口上,你应当失掉一个包括正在运转的MySQL办事器的版本号的应对。假如你失掉相似于telnet: Unable to connect to remote host: Connection refused的一个毛病,那末没有办事器在利用的端口上运转。
测验考试毗连当地机械上的mysqld守护历程,并用mysqladmin variables反省mysqld被设置装备摆设利用的TCP/IP端口(变量port)。
反省你的mysqld办事器没有效--skip-networking选项启动。
Host '...' is blocked毛病
假如你失掉象如许的一个毛病:
Host 'hostname' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'
mysql: Out of memory at line 42, 'malloc.c'
mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)
ERROR 2008: MySQL client ran out of memory
The table is full毛病
这个毛病产生在内存一时表变得比tmp_table_size字节大时。为了不这个成绩,你可使用mysqld的-O tmp_table_size=#选项来增添一时表的巨细,或在你收回有疑问的查询之前利用SQL选项SQL_BIG_TABLES。见7.25 SET OPTION句法。
你能够正在运转一个有一个老的user表的新版本mysqld。你可以经由过程履行mysqlshow mysql user看看口令字段是不是少于 16个字符来反省它。假如是如许,你可以经由过程运转scripts/add_long_password剧本更正这类情形。
用户有一个老式的口令(8个字符长)而且你没利用--old-protocol选项启动mysqld。用一个新口令更新在user表中的用户或用--old-protocol重启mysqld。
你没有利用PASSWORD()函数在在user表中指定了一个口令。利用mysql以一个新口令更新在user表中的用户。确保利用PASSWORD()函数:
mysql> update user set password=PASSWORD('your password')
where user='XXX';