西安数据恢复中心
首页 | 联系方式 | 加入收藏 | 设为首页

服务项目

站内搜索

联系方式

办公地址:西安市未央区未央路130号(市图书馆旁)
联系电话: 18091827330

当前位置:主页 > 硬盘维修资料 > 正文

MySQL无法创建文件/写入文件

编辑::西安硬盘维修中心-硬盘修复厂家-移动硬盘维修-西安硬盘修复公司  更新时间:2019-10-08  字号:
摘要:如果对某些查询遇到下述类型的错误,它意味着MySQL不能为临时目录下的结果集创建临时文件: 无法创建/写入文件\\sqla3fe_0.ism。 前述错误是Windows平台上的典型消息,Unix平台上的消息与

如果对某些查询遇到下述类型的错误,它意味着MySQL不能为临时目录下的结果集创建临时文件:

无法创建/写入文件'\\sqla3fe_0.ism'。

前述错误是Windows平台上的典型消息,Unix平台上的消息与之类似。

一种更正方式是使用“--tmpdir”选项启动mysqld,或在选项文件的[mysqld]部分增加该选项。例如,要想指定目录C:\temp,可使用:

[mysqld]
tmpdir=C:/temp

目录C:\temp必须存在,并有足够的空间允许MySQL写入它。

该错误的另一个原因可能是许可事宜。请确认MySQL服务器能够写入tmpdir目录。

此外,还用使用perror检查错误代码。服务器无法写入表的一个原因是文件系统已满。

shell> perror 28
错误代码28:磁盘上无剩余空间。

 命令不同步

如果遇到“命令不同步”错误,将无法在你的客户端代码中运行该命令,你正在以错误顺序调用客户端函数。

例如,如果你正使用mysql_use_result(),并打算在调用mysql_free_result()之前执行新查询,就会出现该问题。如果你试图执行两次查询,但并未在两次查询之间调用mysql_use_result()或mysql_store_result(),也会出现该问题。

 忽略用户

如果遇到下述错误,表示当启动mysqld时或重新加载授权表时,在用户表中发现具有非法密码的账户。

发现用户'some_user'@'some_host'密码错误:忽略用户。

作为其结果,许可系统将简单忽略账户。

在下面的介绍中,指明了可能的原因和问题的更正措施:

1.    或许,你正打算用旧的用户表运行新版本的mysqld。执行mysqlshow mysql user检查Password(密码)列是否短于16个字符,通过该方式可检查该问题。如果结果是肯定的,可运行脚本/add_long_password脚本更正该问题。

2.    账户具有旧的密码(8字符长),而且未使用“--old-protocol”选项启动mysqld。更新用户表中的账户,使之具有新的密码,或使用“--old-protocol”选项重启mysqld

3.    在用户表中未使用PASSWORD()函数指定了密码。使用mysql用新密码更新用户表中的账户,务必使用PASSWORD()函数:

4.           mysql> UPDATE user SET Password=PASSWORD('newpwd')
5.               -> WHERE User='some_user' AND Host='some_host';

表tbl_name不存在

如果遇到下述错误之一,通常意味着当前数据库中不存在具有给定名称的表:

表'tbl_name'不存在
无法找到文件:'tbl_name' (errno: 2)

在某些情况下,表或许存在,但未正确引用它:

·         由于MySQL使用目录和文件来保存数据库和表,如果它们位于区分文件名大小写的文件系统上,数据库和表名也区分文件大小写。

·         即使对于不区分大小写的文件系统,如Windows,在查询内对给定表的所有引用必须使用相同的大小写。

可以使用SHOW TABLES检查位于当前数据库中的表。

 无法初始化字符集

如果存在字符集问题,可能会遇到下述错误:

MySQL连接失败:无法初始化字符集charset_name。

导致该错误的原因:

·         字符集为多字节字符集,但客户端不支持该字符集。在该情况下,需要使用“--with-charset=charset_name”或“--with-extra-charsets=charset_name”选项运行configure以重新编译客户端。

所有的标准MySQL二进制文件均是采用“--with-extra-character-sets=complex”编译的,能够支持所有的多字节字符集。

·         字符集是未编译到mysqld中的简单字符集,而且字符集定义文件不在客户端预期的位置。

在该情况下,需要采取下述方法之一解决问题:

1.    重新编译客户端,使之支持字符集。

2.    为客户端指定字符集定义文件所在的目录。对于很多客户端,可使用“--character-sets-dir”选项完成该任务。

3.    将字符集定义文件复制到客户端预期的位置。

文件未找到

如果遇到“ERROR '...'未发现(errno: 23)”,“无法打开文件:... (errno: 24)”,或来自MySQL的具有errno 23或errno 24的其它错误,它表示未为MySQL服务器分配足够的文件描述符。你可以使用perror实用工具来了解错误编号的含义:

shell> perror 23
错误代码23:文件表溢出
shell> perror 24
错误代码24:打开文件过多
shell> perror 11
错误代码11:资源暂时不可用

这里的问题是,mysqld正试图同时打开过多的文件。你可以通知mysqld不要一次打开过多文件,或增加mysqld可用文件描述符的数目。

要想通知mysqld将一次打开的文件控制在较小的数目上,可降低table_cache系统变量的值(),从而减少表高速缓冲(默认值为64)。降低max_connections的值也能降低打开文件的数目(默认值为100)。

要想更改mysqld可用的文件描述符的数目,可在mysqld_safe上使用“--open-files-limit”选项或设置(自MySQL 3.23.30开始)open_files_limit系统变量。设置这些值的最简单方式是在选项文件中增加1个选项。如果mysqld的版本较低,不支持设置打开文件的数目,可编辑mysqld_safe脚本。在脚本中有1个注释掉的行ulimit -n 256。你可以删除‘#’字符取消对该行的注释,更改数值256,以设置mysqld可用的文件描述符数目。

“--open-files-limit”和ulimit能够增加文件描述符的数目,但最高不能超过操作系统限制的数目。此外还有1个“硬”限制,仅当以根用户身份启动mysqld_safemysqld时才能覆盖它(请记住,在该情况下,还需使用“--user”选项启动服务器,以便在启动后不再以根用户身份继续运行)。如果需要增加操作系统限制的对各进程可用文件描述符的数目,请参阅系统文档。

注释:如果运行tcsh shell,ulimit不工作!请求当前限制值时,tcsh还能通报不正确的值。在该情况下,应使用sh启动mysqld_safe。


上一篇:FileVault解密的案例

下一篇:MySQL如何确定导致问题的原因

分享到: