MySQL常见的错误分析与解决⽅法总结
⼀、Can’t connect to MySQL server on ‘localhost’ (10061)
翻译:不能连接到 localhost 上的mysql
分析:这说明“localhost”计算机是存在的,但在这台机器上却没提供MySQL服务。
需要启动这台机器上的MySQL服务,如果机⼦负载太⾼没空相应请求也会产⽣这个错误。
解决:既然没有启动那就去启动这台机⼦的mysql。如果启动不成功,多数是因为你的my.ini配置的有问题。重新配置其即可。
如果觉得mysql负载异常,可以到mysql/bin 的⽬录下执⾏mysqladmin -uroot -p123 processlist来查看mysql当前的进程。
⼆、Unknown MySQL Server Host ‘localhosadst’ (11001)
翻译:未知的MySQL服务器 localhosadst
分析:服务器 localhosasdst 不存在。或者根本⽆法连接
解决:仔细检查⾃⼰论坛下⾯的 ./config.inc.php 到$dbhost重新设置为正确的mysql 服务器地址。
三、Access denied for user: ‘roota@localhost’ (Using password: YES)
翻译:⽤户 roota 访问 localhost 被拒绝(没有允许通过)
分析:造成这个错误⼀般数据库⽤户名和密码相对mysql服务器不正确
解决:仔细检查⾃⼰论坛下⾯的 ./config.inc.php 到dbuser、
dbpw核实后重新设置保存即可。
四、Access denied for user: ‘red@localhost’ to database ‘newbbs’
翻译:⽤户 red 在localhost 服务器上没有权限操作数据库newbbs
分析:这个提⽰和问题三是不同的。那个是在连接数据库的时候就被阻⽌了,⽽这个错误是在对数据库进⾏操作时引起的。⽐如在select update等等。这个是因为该⽤户没有操作数据库相应的权⼒。⽐如select 这个操作在mysql.user.Select_priv⾥记录 Y 可以操作N 不可以操作。
解决:如果是⾃⼰的独⽴主机那么更新mysql.user 的相应⽤户记录,⽐如这⾥要更新的⽤户为red 。
或者直接修改 ./config.inc.php 为其配置⼀个具有对数据库操作权限的⽤户
或者通过如下的命令来更新授权grant all privileges on dbname.* to ‘user’@‘localhost’ identified by 'password’
提⽰:更新了mysql库中的记录⼀定要重启mysql服务器才能使更新⽣效
FLUSH PRIVILEGES;
五、No Database Selected
翻译:没有数据库被选择上
分析:产⽣的原因有两种
config.inc.php ⾥⾯dbname设置的不对。致使数据库根本不存在,所以在
db->select_db(dbname);时返回了false和上⾯问题四是⼀样的,数据库⽤户没有select权限,同样会导致这样的错误。当你发现config.inc.php的设置没有任何问题,但还是提⽰这个错误,那⼀定就是这种情况了。解决:对症下药打开config.inc.php到
dbname核实重新配置并保存
同问题四的解决⽅法
六、Can’t open file: ‘xxx_forums.MYI’. (errno: 145)
翻译:不能打开xxx_forums.MYI
问题分析:
这种情况是不能打开 cdb_forums.MYI 造成的,引起这种情况可能的原因有:
1、服务器⾮正常关机,数据库所在空间已满,或⼀些其它未知的原因,对数据库表造成了损坏。
2、类 unix 操作系统下直接将数据库⽂件拷贝移动会因为⽂件的属组问题⽽产⽣这个错误。
解决⽅法:
1、修复数据表
可以使⽤下⾯的两种⽅式修复数据表:(第⼀种⽅法仅适合独⽴主机⽤户)
1)使⽤ myisamchk ,MySQL ⾃带了专门⽤户数据表检查和修复的⼯具 —— myisamchk 。更改当前⽬录到 MySQL/bin 下⾯,⼀般情况下只有在这个下⾯才能运⾏ myisamchk 命令。常⽤的修复命令为:myisamchk -r 数据⽂件⽬录/数据表名.MYI;
2)通过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进⼊到某⼀个表中后,点击“操作”,在下⽅的“表维护”中点击“修复表”即可。
注意:以上两种修复⽅式在执⾏前⼀定要备份数据库。
2、修改⽂件的属组(仅适合独⽴主机⽤户)
1)复制数据库⽂件的过程中没有将数据库⽂件设置为 MySQL 运⾏的帐号可读写(⼀般适⽤于 Linux 和 FreeBSD ⽤户)。
七、Table ‘_sessions’ doesn’t exist
翻译:xxxxx表不存在
分析:在执⾏sql语句时没有到表,⽐如:SELECT * FROM xxx_members WHERE uid=’XX’ 这⾥如果表xxx_members不存在于$dbname库⾥,那么就会提⽰这个错误。具体可分为以下三种情况来讨论:
安装插件或者hack时修改了程序⽂件,⽽忘记了对数据库作相应的升级。
后台使⽤了不完全备份,导⼊数据时没有导⼊到已经安装了相应版本的论坛的数据库中。
解决: 同样对症下药,不同的原因不同的处理⽅法。
仔细对照插件作者提供的安装说明,把遗漏的对数据库的操作补上,如果仍然不能解决问题,那么应该怀疑该插件的可⽤性了。去咨询⼀下插件作者,或者将其卸载。
不要张冠李戴,多⼤的脚就穿多⼤的鞋。总之使得程序⽂件和数据库配套即可.
⼋、Unknown column ‘column_name’ in ‘field list’
翻译:未知的字段名 column_name
分析:在执⾏sql语句是出现了指定表中没有的字段名称,就会出现这个错误。具体导致的原因可分为以下两种
安装插件或者hack时修改了程序⽂件,⽽忘记了对数据库作相应的升级。
程序⽂件和数据库不配套,⽐如d2.5的数据库配置给d4.1的程序来⽤肯定会出现这个错误。
解决: 导致的原因和问题⼋的1和 3是相同的,所以解决⽅法也⼀样。
九、You have an error in your SQL syntax
翻译:有⼀个语法错误在你的sql中
分析:论坛标准的程序是没有sql语法错误的。所以造成这个错误的原因⼀般就两类
安装插件或擅⾃修改程序。
不同的数据库版本数据库导出导⼊,⽐如MySQL4.1的数据在导出的语句包含了MySQL4.0没有的功能,像字符集的设定,这时如果将这些sql导⼊到MySQL4.0的时候就会产⽣sql语法错误。
解决:
仔细检查看到底是哪⾥的错误,将其修正,实在不⾏就⽤标准程序把出错的程序替换。
在数据库备份的时候要留意,如果不打算倒⼊到其他版本的mysql中则不⽤特殊考虑,反之要特殊的设定。使⽤DZ4.1的后台数据备份,可以按照提⽰去设定想要的格式。独⽴主机的也可以在到处的时候将其导出为mysql4.0的格式。
mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt databse > test.sql
⼗、Duplicate entry ‘xxx’ for key 1
翻译:插⼊ xxx 使索引1重复
分析:索引如果是primary unique这两两种,那么数据表的数据对应的这个字段就必须保证其每条记录的唯⼀性。否则就会产⽣这个错误。
⼀般发⽣在对数据库写操作的时候,例如Discuz!4.1论坛程序要求所有会员的⽤户名username必须唯⼀,即username的索引是unique,这时如果强⾏往cdb_members表⾥插⼊⼀个已有的username的记录就会发上这个错误,或者将⼀条记录的username更新 为已有的⼀个username。
改变表结构的时候也有可能导致这个错误。例如 Discuz!4.0论坛的数据库中cdb_members.username 的索引类型是index这个时候是允许有相同username的记录存在的,在升级到4.1的时候,因为要将username的索引由原来的index变 为unique。如果这时
cdb_members⾥存在有相同的username的记录,那么就会引发这个错误。
导出数据据时有时会因为⼀些原因(作者⽬前还不清楚)导致同⼀条记录被重复导出,那么这个备份数据在导⼊的时候出现这个错误是在所难免的了。
修改了auto_increment的值,致使“下⼀个 Autoindex”为⼀条已经存在的记录
解决: 两种思路,⼀是破坏掉唯⼀性的索引。⼆是把重复的数据记录⼲掉,只保留⼀条。很显然第⼀种思路是不可取的。那么按照⼆的思路我们得出以下⼏种解决⽅法,对应上⾯的i ii iii
按照错误提⽰⾥的信息到数据库中将重复的记录删除,仅保留⼀条即可。之后继续执⾏升级操作。
这种情况发⽣的概率很⼩,可以⽤⽂本编辑器打开备份⽂档,查重复的信息。将其多余的拿掉,仅保留⼀条即可。
查询出表中auto_increment最⼤的⼀条记录,设置auto_incerment⽐其⼤⼀即可。
PS:repaire table "表名“,可以暂时解决问题。
⼗⼀、 Duplicate key name ‘xxx’
翻译:索引名重复
分析:要创建的索引已经存在了,就会引发这个错误,这个错误多发⽣在升级的时候。可能是已经升
级过的,重复升级引起的错误。也有可能是之前⽤户擅⾃加的索引,刚好与升级⽂件中的所以相同了。
解决: 看看已经存在的索引和要添加的索引是否⼀样,⼀样的话可以跳过这条sql语句,如果不⼀样那么现删除已存在的所以,之后再执⾏。
⼗⼆、 Duplicate column name ‘xxx’
翻译:字段名xxx重复
分析:添加的字段xxx已经存在,多发⽣在升级过程中,与问题⼗⼆的产⽣是⼀样的。
解决: 看⼀下已经存在的字段是否和将要添加的字段属性完全相同,如果相同则可以跳过不执⾏这句sql,如果不⼀样则删除掉这个字段。之后继续执⾏升级程序。
⼗三、 Table ‘xxx’ already exists
翻译:数据表xxx已经存在
分析:xxx表已经存在于库中,再次试图创建这个名字的表就会引发这个错误。同样多发⽣在论坛的升级中。类似于问题⼗⼆。
解决: 看看已经存在的表是否和将要创建的表完全⼀样,⼀样的话可以跳过不执⾏这个sql,否则请将存在的表先删除,之后继续执⾏升级⽂件。
⼗四、 Can’t create database ‘xxx’. Database exists
翻译:不能创建数据库xxx,数据库已经存在
分析:⼀个mysql下⾯的数据库名称必须保证唯⼀性,否则就会有这个错误。
解决:把已经存在的数据库改名或者把将要创建的数据库改名,总之不让他们的名称冲突。
⼗五、 ⼩结(针对问题 11\12\13\14\15)
此类问题错误提⽰中都暗藏⼀个关键词duplicate(重复)
那么对于mysql数据库来说什么东西是不能重复的呢?
数据库 database
同⼀个数据库下数据表 table
同⼀个数据表下字段 column
同⼀个数据表下索引 key
同⼀个数据表在索引唯⼀(UNIQUE PRIMARY)的情况下记录中的这些字段不可以重复
⼗六、Unknown system variable ‘NAMES’
翻译:未知的系统变量NAMES
分析:Mysql版本不⽀持字符集设定,此时强⾏设定字符集就会出现这个错误。
解决: 将sql语句中的SET NAMES ‘xxx’ 语句去掉
⼗七、 Lost connection to MySQL server during query
翻译:MySQL服务器失去连接在查询期间
分析:远程连接数据库是有时会有这个问题。MySQL服务器在执⾏⼀条sql语句的时候失去了连接造成的。
解决: ⼀般不需要怎么去处理,如果频繁的出现那么考虑改善硬件环境。
⼗⼋、User ‘red’ has exceeded the ‘max_updates’ resource (current value: 500)
翻译:msql⽤户red已经超过了’max_updates’(最⼤更新次数),‘max_questions’(最⼤查询次
数),‘max_connections’(最⼤连接数),当前设定为500
分析:在mysql数据库的下有⼀个库为mysql,它其中有⼀个表为user这⾥⾯的纪录每⼀条都对应为⼀个mysql⽤户的授权。其中字段max_questions max_updates max_connections分别记录着最⼤查询次数 最⼤更新数 最⼤连接数,当⽬前的任何⼀个参数⼤于任何⼀个设定的值就会产⽣这个错误。
解决: 独⽴主机⽤户可以直接修改授权表。修改完之后重启mysql或者跟新授权表,进⼊mysql提⽰符下执⾏
FLUSH PRIVILEGES;
记得后⾯要有分号’;’
虚拟主机的⽤户如果总是出现这个问题可空间商协商解决。
⼗九、Too many connections (1040)链接过多
翻译:达到最⼤连接数
问题分析:
连接数超过了mysql设置的值,与max_connections 和wait_timeout 都有关系。wait_timeout的值越⼤,连接的空闲等待就越长,这样就会造成当前连接数越⼤
解决⽅法:在linux中下载mysql时冲突是什么
1.虚拟主机⽤户请联系空间商优化 MySQL 服务器的配置;
2.独⽴主机⽤户请联系服务器管理员优化 MySQL 服务器的配置,可参考:
修改 MySQL 配置⽂件 my.ini 或者 myf 中的参数:
max_connections= 1000
wait_timeout = 10
修改后重启 MySQL ,如果经常性的报此错误,请做⼀下服务器的整体优化。
⼆⼗、There is no such grant defined for user ‘%s’ on host ‘%s’
错误编号:1141
问题分析:
MySQL 当前⽤户⽆权访问数据库。
解决⽅法:
1、虚拟主机⽤户请联系空间商,确认给你提供的帐号是否有授权数据库的权限。
2、独⽴主机⽤户请联系服务器管理员,确认给您提供的数据库帐号是否有管理此数据库的权限。
⼆⼗⼀、Error on rename of ‘%s’ to ‘%s’ (errno: %d)
error.:1025
问题分析:
请检查⼀下您的程序是否有修改数据库表名的语句。
解决⽅法:
1.请检查您的程序中哪些地⽅需要修改数据库表名;
2.如果您的实际应⽤确实需要修改到数据库表名的话,请联系空间商或者服务器管理员给您开放修改库名的权限和服务器本⾝是否正常。
⼆⼗⼆、Error reading file ‘%s’ (errno: %d)
error.:1023
问题分析:
数据库⽂件不能被读取。
解决⽅法:
1.虚拟主机⽤户请联系空间商查看数据库是否完好。
2.独⽴主机⽤户请联系服务器管理员检查⼀下 MySQL 本⾝是否正常, MySQL 是否可以读取⽂件,Linux ⽤户可以检查⼀下 MySQL 的数据库⽂件的属主是否正确以及本⾝的⽂件是否损坏。
⼆⼗三、Host ‘*****’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’
error.:1129
问题分析:
数据库出现异常,请重启数据库。
解决⽅法:
1. 由于存在很多连接错误,主机’****'被屏蔽,虚拟主机⽤户请联系空间商处理,独⽴主机⽤户请联系服务器管理员,在 MySQL 的命
令控制台下执⾏’mysqladmin flush-hosts’解除屏蔽即可,或者重启 MySQL 数据库
⼆⼗四、dropping database (can’t delete ‘%s’, errno: %d)
error.:1009
问题分析:
不能删除数据库⽂件,导致删除数据库失败。
解决⽅法:
1.检查您使⽤的数据库管理帐号是否有权限删除数据。
2.检查数据库是否存在。
⼆⼗五、Got error 28 from table handler
error.:1030
问题分析:
数据库所在磁盘空间已满。
解决⽅法:
1.虚拟主机⽤户请联系空间商增加 MySQL 所在的磁盘空间或者清理⼀些⽆⽤⽂件;
2.独⽴主机⽤户请联系服务器管理员增加 MySQL 所在的磁盘空间或者清理⼀些⽆⽤⽂件
⼆⼗六、Can’t create a new thread; if you are not out of available memory, you can consult the manual for a possible OS-dependent bug。
error.:11/35
问题分析:
数据库服务器问题,数据库操作⽆法创建新线程。⼀般是两个原因:
1.服务器系统内存溢出。
2.环境软件损坏或系统损坏。
解决⽅法:
1.虚拟主机⽤户请联系下空间商数据库服务器的内存和系统是否正常。
2.独⽴主机⽤户请联系服务器管理员检查服务器的内存和系统是否正常,如果服务器内存紧张,请检查⼀下哪些进程消耗了服务器的内存,同时考虑是否增加服务器的内存来提⾼整个的负载能⼒。
⼆⼗七、Error: Client does not support authentication protocol requested by server; consider upgrading MySQL client error.:1251
问题分析:
如果你升级 MySQL 到 4.1 以上版本后遇到以上问题,请先确定你的 MySQL Client 是 4.1 或者更⾼版
本( Windows 下有问题你就直接跳到下⾯看解决⽅法了,因为 MySQL 在 Windows 是 client 和 server ⼀起装上了的)。
解决⽅法:
1. Windows 平台
主要是改变连接 MySQL 的帐户的加密⽅式,MySQL 4.1/5.0 是通过 PASSWORD 这种⽅式加密的。可以通过以下两种⽅法得到解决:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。