raksmart活动促销

分享

写回答

发帖

最新 Discuz!论坛常见数据库问题分析及解决方案2

互联网出海创业 互联网出海创业 2114 人阅读 | 1 人回复

发表于 2008-12-28 15:06:47 | 显示全部楼层 |阅读模式

十三、 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'


QUOTE:
翻译:未知的系统变量NAMES
分析:Mysql版本不支持字符集设定,此时强行设定字符集就会出现这个错误。
解决:将sql语句中的SET NAMES ‘xxx’ 语句去掉
十九、 Warning: main(./include/db_.class.php) [function.main]: failed to open stream: No such file or directory in /export/www_site/eqdkp/bbs/install.php on line 417翻译:打开文件(./include/db_.class.php)失败,不是一个文件和目录在/export/www_site/eqdkp/bbs/install.php 417行
分析:
大家仔细看就明白了,标准程序里根本没有 ./include/db_.class.php 这个文件。Install.php和include/common.inc.php 两个文件的调用可能会引起这个错误 require_once DISCUZ_ROOT.'./include/db_'.$database.'.class.php';include './include/db_'.$database.'.class.php'; 这两句分别是common.inc.php和install.php文件中的程序语句,这里当$database = ‘’;那么就会产生上面的错误。

在极特殊可能由于一些未知的原因造成config.inc.php没有被读取成功。
解决:
问题分析清楚了,解决起来很容易,打开./config.inc.php配置好$database
如果config.inc.php确实已经配置正确,请重启web服务器。
二十、 Lost connection to MySQL server during query
翻译:MySQL服务器失去连接在查询期间
分析:远程连接数据库是有时会有这个问题。MySQL服务器在执行一条sql语句的时候失去了连接造成的。
解决:一般不需要怎么去处理,如果频繁的出现那么考虑改善硬件环境。
二十一、halt(DISCUZ_ROOT./include/db_mysql_error.inc.php): failed to open stream: No such file or directory in d:\usr\www\html\discuz_new\include\db_mysql.class.php on line 117翻译:同问题十三
分析:凡是此类(failed to open stream)都是一样的问题,即找不到指定的文件或者无法打开。对于这个问题一般出现在restore.php的使用中,大家注意看 DISCUZ_ROOT./include.db_mysql.inc.php 似乎很熟悉,其实这个根本不是一个合法的地址,程序中的DISCUZ_ROOT是要被它的值所代替,但由于根本就没有定义DISCUZ_ROOT这个常量,所以DISCUZ_ROOT被当成了字符串直接来用了。
解决:一般情况使用restore.php恢复备份数据是不会有错误产生的,但是如果他的备份本身是由问题的。比如问题十一 。那么只要在restore.php前面添加对DISCUZ_ROOT的定义即可,具体如下:
   define(‘DISCUZ_ROOT’, ‘./’);
二十二、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;
     记得后面要有分号’;’
      虚拟主机的用户如果总是出现这个问题可找空间商协商解决。
二十三、链接过多,请联系空间商
翻译:达到最大连接数
分析:连接数超过了mysql设置的值 max_connections 和wait_timeout 都有关系。wait_timeout的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。
解决:修改my.ini的max_connections 和wait_timeout 前者调大后者调小一些。

回答|共 1 个

sevenstar

发表于 2009-7-10 12:41:52 | 显示全部楼层

您需要登录后才可以回帖 登录 | 注册

本版积分规则