MySQL Errcode: 17

本文解决了MySQL在创建临时文件时遇到的错误问题,通过更改临时文件目录至其他磁盘分区,成功避免了错误的发生。

服务器安装的MySQL总是会在一段时间之后停止服务。如果只是从表现来看,很难定位问题。最好的办法是查看日志。打开err文件,发现每过一段时间,就会打印一条错误信息:

\bin\mysqld-nt: Can't create/write to file 'C:\WINDOWS\TEMP\ib88' (Errcode: 17)

InnoDB: Error: unable to create temporary file; errno: 17

看来是InnoDB在创建临时文件的时候出现了错误。但这个目录的权限设置是没有问题的,当前用户可以对其进行读写。

MySQL的官方网站这样解决这个问题:

If you get an error of the following type for some queries, it means that MySQL cannot create a temporary file for the result set in the temporary directory:

Can't create/write to file '\\sqla3fe_0.ism'.

The preceding error is a typical message for Windows; the Unix message is similar.

One fix is to start mysqld with the --tmpdir option or to add the option to the [mysqld] section of your option file. For example, to specify a directory of C:\temp, use these lines:

[mysqld]
tmpdir=C:/temp

The C:\temp directory must exist and have sufficient space for the MySQL server to write to. See Section 4.2.3.3, “Using Option Files”.

Another cause of this error can be permissions issues. Make sure that the MySQL server can write to the tmpdir directory.

时间紧迫,我也没有闲情去琢磨发生此问题的原因了。在另一个盘下创建了temp临时目录,并在my.ini中添加:

[mysqld]
tmpdir=e:/temp

已经运行了12个小时,MySQL没有出现类似错误。或许,问题已经解决。

### 解决方案概述 MySQL 报错 `Errcode: 13 - Permission denied` 是由于权限不足导致的,通常发生在尝试读取或写入某些目录或文件时。以下是针对该问题的具体分析和解决方案。 --- #### **确认错误场景** 根据描述,错误可能出现在以下几个方面: - MySQL 容器无法访问 `/etc/mysql/conf.d/` 目录。 - 数据目录 (`datadir`) 或其他相关路径的权限不正确。 - 文件系统的安全模块(如 AppArmor 或 SELinux)限制了 MySQL 对某些文件的访问[^5]。 --- #### **具体解决方法** ##### 方法一:调整容器内的目录权限 如果使用 Docker 部署 MySQL,则需要确保宿主机上的挂载目录具有正确的权限。执行以下命令来更改目录所有权: ```bash sudo chown -R mysql:mysql /path/to/host/mounted/directory ``` 其中,`/path/to/host/mounted/directory` 是你在运行容器时通过 `-v` 参数映射到容器内部的路径。例如,如果你将宿主机的 `/data/mysql` 映射到了容器中的 `/var/lib/mysql`,则应修改 `/data/mysql` 的权限[^4]。 --- ##### 方法二:检查并修复配置文件路径 当 MySQL 尝试加载 `/etc/mysql/conf.d/` 下的配置文件时发生权限拒绝,可以采取以下措施: 1. 确认 `/etc/mysql/conf.d/` 是否存在以及是否有内容。 2. 修改其权限以允许 MySQL 用户访问: ```bash sudo chmod 755 /etc/mysql/conf.d/ sudo chown -R root:root /etc/mysql/conf.d/ ``` 注意:虽然推荐将此目录归属于 `root` 用户,但也需确保 MySQL 能够正常读取它[^1]。 --- ##### 方法三:处理数据目录权限 对于本地安装而非 Docker 场景下的 MySQL 实例,验证数据存储位置是否设置了适当的安全属性。操作如下: 1. 查找默认的数据目录位置,在 my.cnf 中定位 datadir 设置项; ```ini [mysqld] datadir=/var/lib/mysql ``` 2. 应用合适的权限设定至上述指定区域: ```bash sudo chmod 700 /var/lib/mysql sudo chown -R mysql:mysql /var/lib/mysql sudo chgrp -R mysql /var/lib/mysql ``` 完成这些步骤后再重新启动服务以便生效变化[^4]: ```bash sudo systemctl restart mysqld ``` --- ##### 方法四:排查操作系统级防护干扰 有时即使手动修正了所有可见层面的许可状况仍无济于事,这可能是由 Linux 上启用的应用程序装甲(AppArmor)或者强制访问控制(MAC)框架SELinux引起的问题。可以通过临时禁用来测试效果: 关闭AppArmor: ```bash sudo aa-disable /usr/sbin/mysqld ``` 停用SELinux模式切换成permissive状态而不完全卸载掉功能: ```bash setenforce 0 ``` 假如以上任一步骤解决了原初遇到的情况,那么就需要进一步定制化规则而不是简单粗暴地移除保护层[^5]. --- ### 总结 综上所述,面对 MySQL 出现 Errcode 13 错误的时候可以从多个角度切入寻找根源所在,并依据实际情况选用恰当的办法予以应对。无论是调整外部共享资源还是深入探究内核策略都不可或缺。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值