mysql数据库常见错误及解决方案

一、MySQL没法重启问题解决Warning: World-writable config file ‘/etc/my.cnf’ is ignoredphp

缘由:mysql

今天帮朋友维护服务器,在关闭数据库的命令发现mysql关不了,提示Warning: World-writable config file '/etc/my.cnf' is ignored ,大概意思是权限全局可写,任何一个用户均可以写。mysql担忧这种文件被其余用户恶意修改,因此忽略掉这个配置文件。这样mysql没法关闭。linux

2
3
4
[root@ttlsa ~]# service mysqld stop
Warning: World-writable config file '/etc/my.cnf' is ignored
Warning: World-writable config file '/etc/my.cnf' is ignored
MySQL manager or server PID file could not be found![FAILED]

查看my.cnf的权限sql

1
2
[root@ttlsa ~]# ls -l /etc/my.cnf
-rwxrwxrwx 1 root root 4878 Jul 30 11:31 /etc/my.cnf

权限777,任何一个用户均可以改my.cnf,存在很大的安全隐患.数据库

解决方案:windows

修复MySQL问题安全

1 [root@ttlsa ~]# chmod 644 /etc/my.cnf

my.cnf设置为用户可读写,其余用户不可写.服务器

二、Can't connect to MySQL server on 'localhost' (10061)session

缘由:不能链接到 localhost 上的mysqlsocket

解决方案:这说明“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)

缘由:

这种状况是不能打开 cdb_forums.MYI 形成的,引发这种状况可能的缘由有:

一、服务器非正常关机,数据库所在空间已满,或一些其它未知的缘由,对数据库表形成了损坏。

二、类 unix 操做系统下直接将数据库文件拷贝移动会由于文件的属组问题而产生这个错误。

解决方案:

一、修复数据表

可使用下面的两种方式修复数据表:(第一种方法仅适合独立主机用户)

1)使用 myisamchk ,MySQL 自带了专门用户数据表检查和修复的工具 —— myisamchk 。更改当前目录到 MySQL/bin 下面,通常状况下只有在这个下面才能运行 myisamchk 命令。经常使用的修复命令为:myisamchk -r 数据文件目录/数据表名.MYI;

2)经过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进入到某一个表中后,点击“操做”,在下方的“表维护”中点击“修复表”便可。

注意:以上两种修复方式在执行前必定要备份数据库。

二、修改文件的属组(仅适合独立主机用户)

1)复制数据库文件的过程当中没有将数据库文件设置为 MySQL 运行的账号可读写(通常适用于 Linux 和 FreeBSD 用户)。

八、Table 'test.xxx_sessions' doesn't exist

翻译:xxxxx表不存在

缘由:在执行sql语句时没有找到表,好比:SELECT * FROM xxx_members WHERE uid=’XX’ 这里若是表xxx_members不存在于$dbname库里,那么就会提示这个错误。具体可分为如下三种状况来讨论:

安装插件或者hack时修改了程序文件,而忘记了对数据库做相应的升级。

后台使用了不彻底备份,导入数据时没有导入到已经安装了相应版本的论坛的数据库中。

解决方案: 一样对症下药,不一样的缘由不一样的处理方法。

仔细对照插件做者提供的安装说明,把遗漏的对数据库的操做补上,若是仍然不能解决问题,那么应该怀疑该插件的可用性了。去咨询一下插件做者,或者将其卸载。

不要张冠李戴,多大的脚就穿多大的鞋。总之使得程序文件和数据库配套便可.

九、Unknown column 'column_name' in 'field list'

缘由:在执行sql语句是出现了指定表中没有的字段名称,就会出现这个错误。具体致使的缘由可分为如下两种

安装插件或者hack时修改了程序文件,而忘记了对数据库做相应的升级。

程序文件和数据库不配套,好比d2.5的数据库配置给d4.1的程序来用确定会出现这个错误。

解决方案: 致使的缘由和问题八的1和 3是相同的,因此解决方法也同样。

十、You have an error in your SQL syntax

缘由:论坛标准的程序是没有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语句,若是不同那么现删除已存在的因此,以后再执行。

1三、 Duplicate column name 'xxx'

翻译:字段名xxx重复

缘由:添加的字段xxx已经存在,多发生在升级过程当中,与问题十二的产生是同样的。

解决方案: 看一下已经存在的字段是否和将要添加的字段属性彻底相同,若是相同则能够跳过不执行这句sql,若是不同则删除掉这个字段。以后继续执行升级程序。

1四、 Table 'xxx' already exists

翻译:数据表xxx已经存在

缘由:xxx表已经存在于库中,再次试图建立这个名字的表就会引起这个错误。一样多发生在论坛的升级中。相似于问题十二。

解决方案: 看看已经存在的表是否和将要建立的表彻底同样,同样的话能够跳过不执行这个sql,不然请将存在的表先删除,以后继续执行升级文件。

1五、 Can't create database 'xxx'. Database exists

翻译:不能建立数据库xxx,数据库已经存在

缘由:一个mysql下面的数据库名称必须保证惟一性,不然就会有这个错误。

解决方案:把已经存在的数据库更名或者把将要建立的数据库更名,总之不让他们的名称冲突。

1六、 小结(针对问题 11\12\13\14\15)

此类问题错误提示中都暗藏一个关键词duplicate(重复)

那么对于mysql数据库来讲什么东西是不能重复的呢?

数据库 database

同一个数据库下数据表 table

同一个数据表下字段 column

同一个数据表下索引 key

同一个数据表在索引惟一(UNIQUE PRIMARY)的状况下记录中的这些字段不能够重复

1七、Unknown system variable 'NAMES'

翻译:未知的系统变量NAMES

缘由:Mysql版本不支持字符集设定,此时强行设定字符集就会出现这个错误。

解决方案: 将sql语句中的SET NAMES ‘xxx’ 语句去掉

1八、 Lost connection to MySQL server during query

翻译:MySQL服务器失去链接在查询期间

缘由:远程链接数据库是有时会有这个问题。MySQL服务器在执行一条sql语句的时候失去了链接形成的。

解决方案: 通常不须要怎么去处理,若是频繁的出现那么考虑改善硬件环境。

1九、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;

记得后面要有分号’;’

虚拟主机的用户若是老是出现这个问题可找空间商协商解决。

20、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 ,若是常常性的报此错误,请作一下服务器的总体优化。

20、There is no such grant defined for user '%s' on host '%s'

错误编号:1141

缘由:

MySQL 当前用户无权访问数据库。

解决方案:

一、虚拟主机用户请联系空间商,确认给你提供的账号是否有受权数据库的权限。

二、独立主机用户请联系服务器管理员,确认给您提供的数据库账号是否有管理此数据库的权限。

2一、Error on rename of '%s' to '%s' (errno: %d)

error.:1025

缘由:

请检查一下您的程序是否有修改数据库表名的语句。

解决方案:

1.请检查您的程序中哪些地方须要修改数据库表名;

2.若是您的实际应用确实须要修改到数据库表名的话,请联系空间商或者服务器管理员给您开放修改库名的权限和服务器自己是否正常。

2二、Error reading file '%s' (errno: %d)

error.:1023

缘由:

数据库文件不能被读取。

解决方案:

1.虚拟主机用户请联系空间商查看数据库是否无缺。

2.独立主机用户请联系服务器管理员检查一下 MySQL 自己是否正常, MySQL 是否能够读取文件,Linux 用户能够检查一下 MySQL 的数据库文件的属主是否正确以及自己的文件是否损坏。

2三、Host '*****' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

error.:1129

缘由:

数据库出现异常,请重启数据库。

解决方案:

1. 因为存在不少链接错误,主机'****'被屏蔽,虚拟主机用户请联系空间商处理,独立主机用户请联系服务器管理员,在 MySQL 的命令控制台下执行'mysqladmin flush-hosts'解除屏蔽便可,或者重启 MySQL 数据库

2四、dropping database (can't delete '%s', errno: %d)

error.:1009

缘由:

不能删除数据库文件,致使删除数据库失败。

解决方案:

1.检查您使用的数据库管理账号是否有权限删除数据。

2.检查数据库是否存在。

2五、Got error 28 from table handler

error.:1030

缘由:

数据库所在磁盘空间已满。

解决方案:

1.虚拟主机用户请联系空间商增长 MySQL 所在的磁盘空间或者清理一些无用文件;

2.独立主机用户请联系服务器管理员增长 MySQL 所在的磁盘空间或者清理一些无用文件

2六、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.独立主机用户请联系服务器管理员检查服务器的内存和系统是否正常,若是服务器内存紧张,请检查一下哪些进程消耗了服务器的内存,同时考虑是否增长服务器的内存来提升整个的负载能力。

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 这种方式加密的。能够经过如下两种方法获得解决:

1) mysql->SET PASSWORD FOR 'some_user'@'some_host'=OLD_PASSWORD('new_password');

2) mysql->UPDATE mysql.user SET Password=OLD_PASSWORD('new_password') WHERE Host='some_host' AND User='some_user';

2. Linux/Unix 平台

Linux 平台下首先肯定是否安装过 MySQL 的客户端,这个用 rpm 安装很简单,Linux 代码为:

rpm -ivh MySQL-client-4.1.15-0.i386.rpm

而后在编译 php 的时候要加上:

--with-mysql=/your/path/to/mysql

通常状况下均可以解决。若是还出现这种错误,能够按照下面的方法来作:

mysql->SET PASSWORD FOR 'some_user'@'some_host'=OLD_PASSWORD('new_password');

mysql->UPDATE mysql.user SET Password=OLD_PASSWORD('new_password') WHERE Host='some_host' AND User='some_user';

2九、Error: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

error.:2002

缘由:

出现这个错误通常状况下是由于下面两个缘由:

1.MySQL 服务器没有开启。

2.MySQL 服务器开启了,但不能找到 socket 文件。

解决方案:

1.虚拟主机用户,请联系空间商确认数据库是否正常启动。

2.独立主机用户,请检查一下 MySQL 服务是否已经开启,没有开启,请启动 MySQL 服务;若是已经开启,而且是 Linux 系统,请检查一下 MySQL 的 socket 的路径,而后打开 config.inc.php 找到

$dbhost = 'localhost'; 在 hostname 后面加冒号‘:’和 MySQL 的 socket 的路径。

好比 MySQL 服务器为 localhost

MySQL 的 socket 的路径为 /tmp/mysql.sock

那么就改为以下:

$dbhost = 'localhost:/temp/mysql.sock';

30、Can't connect to MySQL server on 'localhost'

error.:2003

缘由:

MySQL 服务没有启动,通常是在异常的状况下 MySQL 没法启动致使的,好比无可用的磁盘空间,my.ini 里 MySQL 的 basedir 路径设置错误等。

解决方案:

1.检查磁盘空间是否还有剩余可用空间,尽可能保持有足够的磁盘空间可用。

2.检查 my.ini 里的 basedir 等参数设置是否正确,而后从新启动下 MySQL 服务。

3一、Lost connection to MySQL server during query

error.:2013

缘由:

数据库查询过程当中丢失了与 MySQL 服务器的链接。

解决方案:

1.请确认您的程序中是否有效率很低的程序,好比某些插件,能够卸载掉插件,检查一下服务器是否正常;

2.服务器自己资源紧张,虚拟主机用户请联系空间商确认,独立主机用户请联系服务器管理员,检查一下服务器是否正常。

3二、Got a packet bigger than \'max_allowed_packet\' bytes

错误编号:1153

缘由:调整了 Mantis 的上传附件的大小却没有调整 MySQL 的配置文件。

解决方案:

一、独立主机用户请按照如下方法调整:

查找 MySQL 的配置文件(my.cnf 或者 my.ini)

在 [mysqld] 部分添加一句(若是存在,调整其值就能够):

max_allowed_packet=10M

重启 MySQL 服务就能够了。这里设置的是 10MB。

二、虚拟主机用户请联系空间商调整此参数。

相关文章
相关标签/搜索