合 MySQL数据库常见错误及解决方案
Tags: MySQL
- MySQL无法重启问题解决Warning: World-writable config file ‘/etc/my.cnf’ is ignored
- Can't connect to MySQL server on 'localhost' (10061)
- Unknown MySQL Server Host 'localhosadst' (11001)
- Access denied for user: 'roota@localhost' (Using password: YES)
- Access denied for user: 'red@localhost' to database 'newbbs'
- No Database Selected
- Can't open file: 'xxx_forums.MYI'. (errno: 145)
- Table 'test.xxx_sessions' doesn't exist
- Unknown column 'column_name' in 'field list'
- You have an error in your SQL syntax
- Duplicate entry 'xxx' for key 1
- Duplicate key name 'xxx'
- Duplicate column name 'xxx'
- Table 'xxx' already exists
- Can't create database 'xxx'. Database exists
- 小结(针对问题 11\12\13\14\15)
- Unknown system variable 'NAMES'
- Lost connection to MySQL server during query
- User 'red' has exceeded the 'max_updates' resource (current value: 500)
- Too many connections (1040)链接过多
- There is no such grant defined for user '%s' on host '%s'
- Error on rename of '%s' to '%s' (errno: %d)
- Error reading file '%s' (errno: %d)
- Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
- dropping database (can't delete '%s', errno: %d)
- Got error 28 from table handler
- 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: Client does not support authentication protocol requested by server; consider upgrading MySQL client
- Error: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
- Can't connect to MySQL server on 'localhost'
- Lost connection to MySQL server during query
- Got a packet bigger than 'max_allowed_packet' bytes
- Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行)
- 主从复制报错类型
- MySQL安装过程中的报错
- 数据库密码忘记的问题
- truncate 删除数据,导致自动清空自增 ID,前端返回报错 not found
- 阿里云 MySQL 的配置文件
- 数据库总会出现中文乱码的情况
- 使用 binlog_format=statement 这种格式,跨库操作,导致从库丢失数据,用户访问导致出现错误数据信息
- MySQL 数据库连接超时的报错
- can't open file (errno:24)
MySQL无法重启问题解决Warning: World-writable config file ‘/etc/my.cnf’ is ignored
原因:
今天帮朋友维护服务器,在关闭数据库的命令发现mysql关不了,提示Warning: World-writable config file '/etc/my.cnf' is ignored ,大概意思是权限全局可写,任何一个用户都可以写。mysql担心这种文件被其他用户恶意修改,所以忽略掉这个配置文件。这样mysql无法关闭。
1 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的权限
1 2 | [root@ttlsa ~]# ls -l /etc/my.cnf -rwxrwxrwx 1 root root 4878 Jul 30 11:31 /etc/my.cnf |
权限777,任何一个用户都可以改my.cnf,存在很大的安全隐患.
解决方案:
修复MySQL问题,my.cnf设置为用户可读写,其他用户不可写
1 | chmod 644 /etc/my.cnf |
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服务器才能使更新生效
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 造成的,引起这种情况可能的原因:有:
1、服务器非正常关机,数据库所在空间已满,或一些其它未知的原因:,对数据库表造成了损坏。
2、类 unix 操作系统下直接将数据库文件拷贝移动会因为文件的属组问题而产生这个错误。
解决方案:
1、修复数据表
可以使用下面的两种方式修复数据表:(第一种方法仅适合独立主机用户)
1)使用 myisamchk ,MySQL 自带了专门用户数据表检查和修复的工具 —— myisamchk 。更改当前目录到 MySQL/bin 下面,一般情况下只有在这个下面才能运行 myisamchk 命令。常用的修复命令为:myisamchk -r 数据文件目录/数据表名.MYI;
2)通过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进入到某一个表中后,点击“操作”,在下方的“表维护”中点击“修复表”即可。
注意:以上两种修复方式在执行前一定要备份数据库。
2、修改文件的属组(仅适合独立主机用户)
复制数据库文件的过程中没有将数据库文件设置为 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是相同的,所以解决方法也一样。