?一般发生在对数据库写操作的时候,例如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 “表名“,可以暂时解决问题。
11、 Duplicate key name ‘xxx’
翻译:索引名重复
?分析:要创建的索引已经存在了,就会引发这个错误,这个错误多发生在升级的时候。可能是已经升级过的,重复升级引起的错误。也有可能是之前用户擅自加的索引,刚好与升级文件中的所以相同了。
?解决: 看看已经存在的索引和要添加的索引是否一样,一样的话可以跳过这条sql语句,如果不一样那么现删除已存在的所以,之后再执行。
12、 Duplicate column name ‘xxx’
翻译:字段名xxx重复
?分析:添加的字段xxx已经存在,多发生在升级过程中,与问题十二的产生是一样的。
?解决: 看一下已经存在的字段是否和将要添加的字段属性完全相同,如果相同则可以跳过不执行这句sql,如果不一样则删除掉这个字段。之后继续执行升级程序。
13、 Table ‘xxx’ already exists
翻译:数据表xxx已经存在
?分析:xxx表已经存在于库中,再次试图创建这个名字的表就会引发这个错误。同样多发生在论坛的升级中。类似于问题十二。
?解决: 看看已经存在的表是否和将要创建的表完全一样,一样的话可以跳过不执行这个sql,否则请将存在的表先删除,之后继续执行升级文件。
14、 Can’t create database ‘xxx’. Database exists
翻译:不能创建数据库xxx,数据库已经存在
?分析:一个mysql下面的数据库名称必须保证唯一性,否则就会有这个错误。
?解决:把已经存在的数据库改名或者把将要创建的数据库改名,总之不让他们的名称冲突。
15、 小结(针对问题 11\12\13\14\15)
?此类问题错误提示中都暗藏一个关键词duplicate(???复)
?那么对于mysql数据库来说什么东西是不能重复的呢?
?数据库 database
同一个数据库下数据表 table
同一个数据表下字段 column
同一个数据表下索引 key
同一个数据表在索引唯一(UNIQUE PRIMARY)的情况下记录中的这些字段不可以重复
16、Unknown system variable ‘NAMES’
翻译:未知的系统变量NAMES
分析:Mysql版本不支持字符集设定,此时强行设定字符集就会出现这个错误。
?解决: 将sql语句中的SET NAMES ‘xxx’ 语句去掉
17、 Lost connection to MySQL server during query
翻译:MySQL服务器失去连接在查询期间
?分析:远程连接数据库是有时会有这个问题。MySQL服务器在执行一条sql语句的时候失去了连接造成的。
?解决: 一般不需要怎么去处理,如果频繁的出现那么考虑改善硬件环境。
18、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;
记得后面要有分号’;’
虚拟主机的用户如果总是出现这个问题可找空间商协商解决。
19、Too many connections (1040)链接过多
?翻译:达到最大连接数
?问题分析:
?连接数超过了mysql设置的值,与max_connections 和wait_timeout 都有关系。wait_timeout的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大
?解决方法:
1.虚拟主机用户请联系空间商优化 MySQL 服务器的配置;
2.独立主机用户请联系服务器管理员优化 MySQL 服务器的配置,可参考:
?修改 MySQL 配置文件 my.ini 或者 my.cnf 中的参数:
max_connections= 1000
?wait_timeout = 10
修改后重启 MySQL ,如果经常性的报此错误,请做一下服务器的整体优化。