仓酷云

标题: 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变量改动工夫限制。

你可以经由过程履行mysqladmin version而且查验正常运转的工夫来反省MySQL还没逝世失落。

假如你有一个剧本,你只须再收回查询让客护停止一次主动的从头毗连。

在这类请下,你凡是能取得以下毛病代码(你失掉的是OS相干的):

CR_SERVER_GONE_ERROR  客户不克不及发送一个成绩给办事器。  
CR_SERVER_LOST  当写办事器时,客户没有失足,然而它没有失掉对成绩的一个完全的谜底(或任何谜底)。  

假如你向办事器发送不准确的或太大的查询,你也能够失掉这些毛病。假如mysqld失掉一个太大或不正常的包,它以为客户失足了并封闭毗连。假如你需求较大的查询(例如,假如你正在处置较大的BLOB列),你可使用-O max_allowed_packet=#选项(缺省1M)启动mysqld以增添查询限制。过剩的内存按需分派,如许mysqld只要在你收回较大差询时或mysqld必需前往较大的了局行时,才利用更多的内存!

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端口。

由反省(利用ps)在你的办事器上有一个名为mysqld的历程启动!假如没有任何mysqld进程,你应当启动一个。见4.15.2 启动MySQL办事器的成绩。

假如一个mysqld进程正在运转,你可以经由过程测验考试这些分歧的毗连来反省办事器(固然,端标语和套接字途径名能够在你的装置中是分歧的):

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

注重hostname号令利用反引号“`”而非正引号“'”;这些招致hostname输入(即,以后主机名)被取代进mysqladmin号令中。

这是能够形成Can't connect to local MySQL server毛病的一些缘由:

mysqld不在运转。
你正在利用MIT-pthreads的一个体系上运转。假如正在运转在一个没有原生线程的体系上,mysqld利用 MIT-pthreads 软件包。见4.2 由MySQL撑持的操作体系。但是,MIT-pthreads不撑持Unix套接字,因而当与办事器毗连时,在如许一个体系上,你老是必需明白地指定主机名。尝尝利用这个号令反省到办事器的毗连:
shell> mysqladmin -h `hostname` version

或人删除mysqld利用的Unix套接字(缺省“/tmp/mysqld.sock”)。你能够有一个cron义务删除MySQL套接字(例如,一个把旧文件从“/tmp”目次中删除的义务)。你老是可以运转mysqladmin version而且反省mysqladmin正在试图利用的套接字的确存在。在这类情形下,修复办法是删除cron义务而不删除“mysqld.sock 或将套接字放在其他中央。你能用这个号令在MySQL设置装备摆设时指定一个分歧的套接字地址:
shell> ./configure --with-unix-socket-path=/path/to/socket

你也能够利用--socket=/path/to/socket选项启动safe_mysqld和在启动你的MySQL客户前设置情况变量MYSQL_UNIX_PORT为套接字途径名。你可用--socket=/path/to/socket选项启动mysqld办事器。假如你改动了办事器的套接字途径名,你也必需告诉MySQL客户关于新途径的情形。你可以经由过程设置情况变量MYSQL_UNIX_PORT为套接字途径名或由供应套接字途径名作为客户的参数做到。你可用这个号令测试套接字:

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'

这意味着,mysqld已失掉了大批(max_connect_errors)的主机'hostname'的在半途被中止了的毗连恳求。在max_connect_errors次掉败恳求后,mysqld认定失足了(象来字一个黑客的进击),而且禁止该站点进一步的毗连,直到或人履行号令mysqladmin flush-hosts。

缺省地,mysqld在10个毗连毛病后壅塞一台主机。你可以经由过程象如许启动办事器很轻易地调剂它:

shell> safe_mysqld -O max_connect_errors=10000 &

注重,对给定的主机,假如失掉这条毛病动静,你应当起首反省该主机的TCP/IP毗连有无成绩。假如你的TCP/IP毗连不在运转,增添max_connect_errors变量的值对你也不会有匡助!

Too many connections毛病
假如在你试土毗连MySQL时,你失掉毛病Too many connections,这意味着已有max_connections个客户毗连了mysqld办事器。

假如你需求比缺省(100)更多的毗连,那末你应当重启mysqld,用更大的 max_connections 变量值。

注重,mysqld实践上答应(max_connections+1)个客户毗连。最初一个毗连是为一个用Process权限的用户保存的。经由过程不把这个权限给普通用户(他们不该该需求它),有这个权限一个办理员可以登录而且利用SHOW PROCESSLIST找出甚么能够失足。见7.21 SHOW句法(失掉表,列的信息)。

Out of memory毛病
假如你收回查询而且失掉相似于上面的毛病:

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

注重,毛病指向了MySQL客户mysql。这个毛病的缘由很复杂,客户没有足够的内存存储全体了局。

为了修改这个成绩,起首反省你的查询是不是准确。它应当前往这么多的行,这公道吗?假如是如许,你可使用mysql --quick,它利用mysql_use_result()检索了局纠合。这将较少的承当放在了客户端(只是办事器更多)。

Packet too large毛病
当一个MySQL客户或mysqld办事器失掉一个比max_allowed_packet个字节长的包,它收回一个Packet too large毛病并终止毗连。

假如你正在利用mysql客户,你可以经由过程用mysql --set-variable=max_allowed_packet=8M指定一个更大的缓冲区来启动客户法式。

假如你正在利用不答应你指定最大包巨细的其他客户(例如 DBI),你需求在你启动办事器时设置包巨细。你可使用mysqld的号令行选项设置max_allowed_packet为一个更大的尺寸。例如,假如你正希冀将一个全长的BLOB存入一张表中,你将需求用--set-variable=max_allowed_packet=24M选项来启动办事器。

 

The table is full毛病
这个毛病产生在内存一时表变得比tmp_table_size字节大时。为了不这个成绩,你可使用mysqld的-O tmp_table_size=#选项来增添一时表的巨细,或在你收回有疑问的查询之前利用SQL选项SQL_BIG_TABLES。见7.25 SET OPTION句法。

你也能够利用--big-tables选项启动mysqld。这与为一切查询利用SQL_BIG_TABLES完整不异。


Commands out of sync in client毛病
假如你在你的客户代码中失掉Commands out of sync; You can't run this command now,你正在以毛病的次第挪用客户函数!

这能够产生,例如,假如你正在利用mysql_use_result()而且在你已挪用了mysql_free_result()之前试图履行新查询。假如你在mysql_use_result()或mysql_store_result()之间试图履行前往数据的2个查询,它也能够产生。

Ignoring user毛病
假如你失掉以下毛病:

Found wrong password for user: 'some_user@some_host'; Ignoring user

这意味着在mysqld启动时或在它再次装载权限表时,它在user表中找到了一个有一个有效口令的条目。了局,条目复杂地被权限体系疏忽。

能够招致这个成绩的缘由和修改:

你能够正在运转一个有一个老的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';

Table 'xxx' doesn't exist毛病
假如你失掉毛病Table 'xxx' doesn't exist或Can't find file: 'xxx' (errno: 2),这意味着在以后数据库中没着名为xxx的表存在。

注重,由于MySQL利用目次和文件存储数据库和表,数据库和表名件是辨别巨细写的!(在Win32上,数据库和表名不是辨别巨细写的,然而在查询中对一切表的援用必需利用不异的巨细写!)

你可以用SHOW TABLES反省你在以后数据库中有哪一个表。

  怎么配置呢 ,问最好的老实百度,问啥都有答案。所以用好搜索引擎是学好的令1个关键,程序会出各样的问题,没有1个人可能会碰到所有的问题,所有就可以问百度这个大家精华的集合了。
作者: 精灵巫婆    时间: 2015-2-4 11:21
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 只想知道    时间: 2015-2-9 22:20
爱上php,他也会爱上你。
作者: 海妖    时间: 2015-2-25 19:54
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
作者: 飘飘悠悠    时间: 2015-3-8 02:02
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
作者: 若天明    时间: 2015-3-15 18:57
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者: 第二个灵魂    时间: 2015-3-16 04:16
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者: 莫相离    时间: 2015-3-21 07:04
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
作者: 老尸    时间: 2015-3-31 07:33
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 愤怒的大鸟    时间: 2015-4-1 17:11
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
作者: 变相怪杰    时间: 2015-4-6 02:09
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 简单生活    时间: 2015-4-16 16:11
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 柔情似水    时间: 2015-4-16 22:20
做为1门年轻的语言,php一直很努力。
作者: 深爱那片海    时间: 2015-4-23 23:31
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 金色的骷髅    时间: 2015-4-28 05:54
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 谁可相欹    时间: 2015-5-5 06:02
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
作者: 冷月葬花魂    时间: 2015-5-11 23:08
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
作者: 再现理想    时间: 2015-6-27 21:18
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
作者: 再见西城    时间: 2015-6-28 08:45
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 飘灵儿    时间: 2015-7-11 22:45
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2