mysqld: File './binlog.~rec~' not found 问题解决处理

本文针对MySQL启动时出现的找不到*.pid文件及权限错误等问题进行了详细分析,并提供了具体的解决步骤。通过对.err文件的清理和调整binlog文件的权限,成功解决了MySQL启动过程中遇到的问题。

之前搭建了mysql主从同步服务器,之前启动正常,但今天在重启了服务器后,发现一直报
mysql pid mysqld_safe mysqld from pid file  hostname.pid ended
这实际是个错误,说明mysql启动时找*.pid文件发生错误。这时要去.err文件里去找错误
但你的.err文件不删,不是每次启动时的错误信息都追加到这个文件,所以要删除这个文件。
mysql启动时,日志会自动打印到.err文件里。这样也便于观察启动时的问题。
再删除了.err文件时,日志开始提示某参数无法识别,再修改参数拼写后,又报如下
mysqld: File './binlog.index' not found (Errcode: 13 - Permission denied)
还可以参考的问题文章 http://blog.itpub.net/29773961/viewspace-1846448/

mysqld: File './binlog.~rec~' not found (Errcode: 13 - Permission denied)
上面两种错误的原因都和日志文件权限有关,于是查看binlog文件权限
-rw-r----- 1 mysql   190 Nov  7 15:26 binlog.000001
-rw-r----- 1 mysql  2827 Nov 13 13:40 binlog.000002
-rw-r----- 1 mysql   190 Nov 16 16:24 binlog.000003
-rw-r----- 1 mysql   230 Nov 16 19:05 binlog.000004
-rw-r----- 1 mysql   190 Nov 18 09:58 binlog.000005
-rw-r----- 1 mysql   230 Nov 18 09:59 binlog.000006
-rw-r----- 1 mysql   190 Nov 18 13:41 binlog.000007
-rw-r----- 1 mysql   230 Nov 18 13:41 binlog.000008
-rw-r----- 1 mysql   190 Nov 18 13:42 binlog.000009
-rw-r----- 1 mysql   230 Nov 18 13:42 binlog.000010
-rw-r----- 1 mysql   190 Nov 18 13:45 binlog.000011
-rw-r----- 1 mysql   190 Nov 20 14:45 binlog.000012
-rw-r----- 1 mysql   190 Nov 20 14:45 binlog.000013
-rw-r----- 1 mysql   208 Nov 20 14:45 binlog.index
里面没有mysql组,这可能是之前有人执行权限处理语句,导致了误操作
这样解决问题的方法就简单了,直接执行


解决mysql启动找不到/tmp/mysql.sock问题
启动mysql时显示:/tmp/mysql.sock 不存在的解决方法


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/750077/viewspace-2147739/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/750077/viewspace-2147739/

<think>首先,用户的问题是关于MySQL的错误:"mysqld File './mysql-bin.~rec~' not found Permission denied error fix"。这是一个权限问题,具体是MySQL在尝试访问二进制日志文件时被拒绝。 从系统级指令来看: - 所有行内数学表达式必须用$...$,但这里没有数学内容,所以不需要。 - 独立公式用$$...$$,但问题中没有数学公式。 - LaTeX语法正确:确保任何公式都正确。 - 使用中文回答。 - 生成相关问题:在回答结束后,生成相关问题。 - 引用标识:在回答中引用的段落末尾添加引用标识,如[^1]。 用户提供的引用包括: - 引用[1]: 关于MySQL启动失败的问题。 - 引用[2]: 关于主从配置错误和配置文件位置问题。 - 引用[3]: 关于找不到消息文件的错误。 - 引用[4]: 关于Perl和DLL的错误。 用户意图是解决权限问题,具体是访问mysql-bin日志文件时的权限被拒绝。 关键点: - 错误是"File './mysql-bin.~rec~' not found Permission denied"。这表示MySQL服务器在尝试读取或写入二进制日志文件时,由于权限不足而失败。 - 可能的原因: - MySQL进程(通常以mysql用户运行)没有权限访问数据目录或日志文件。 - 文件或目录的所有权不正确。 - 文件路径错误或文件不存在。 解决方案步骤: 1. 检查文件路径:确认二进制日志文件的位置是否正确。通常,二进制日志存储在MySQL的数据目录中。 2. 检查所有权和权限:确保MySQL数据目录和文件的所有权属于mysql用户(或运行MySQL的用户)。 3. 修复权限:使用chown和chmod命令更改所有权和权限。 4. 检查配置文件:确保MySQL配置文件(如my.cnf)中指定的日志路径正确。 5. 重启MySQL服务:在更改后重启服务。 参考用户提供的引用: - 从引用[2],它提到了配置文件的位置([mysqld] vs [mysqld_safe]),这可能相关,因为如果日志路径配置错误,会导致问题。 - 引用[1]和[3]是关于启动错误,但不是很直接相关。 - 引用[4]是关于DLL的,不相关。 所以,回答应该包括: - 解释错误原因。 - 逐步解决方案。 - 确保使用中文。 - 在回答后生成相关问题。 结构回答: 1. **引言**:解释错误。 2. **原因分析**:简要说明为什么发生。 3. **解决方案步骤**:详细步骤。 4. **验证**:如何确认问题解决。 5. **相关问题**:生成相关问题。 生成相关问题: - 基于主题,如MySQL权限管理、二进制日志配置等。</think>### MySQL权限问题解决:文件访问权限被拒绝错误 您遇到的错误`mysqld File './mysql-bin.~rec~' not found Permission denied`是MySQL在尝试访问二进制日志文件时权限不足的常见问题。这通常发生在MySQL服务进程(通常以`mysql`用户身份运行)无法读取或写入数据目录中的文件时。二进制日志(如`mysql-bin.~rec~`)用于记录数据库变更,如果权限配置不当,会导致启动失败或操作中断。以下是逐步解决方案,基于常见原因和最佳实践。参考配置文件和权限管理是关键[^2]。 #### 错误原因分析 - **核心问题**:MySQL服务进程(`mysqld`)缺少对数据目录或日志文件的访问权限。常见原因包括: - 文件或目录所有权未分配给`mysql`用户。 - 目录权限设置过严(如不是`755`或`770`)。 - 配置文件(如`my.cnf`)中日志路径错误,导致文件无法创建。 - SELinux或AppArmor等安全模块限制访问(在Linux系统中常见)。 - **相关背景**:MySQL二进制日志(如`mysql-bin`系列文件)存储在数据目录下(默认为`/var/lib/mysql`或自定义路径)。如果权限错误,MySQL无法创建或更新这些文件,引发`Permission denied`错误[^1][^2]。 #### 解决方案步骤 以下步骤需在MySQL服务器上以root权限执行(使用`sudo`或直接root用户)。请按顺序操作,并在每个步骤后验证是否解决。 1. **检查文件路径和所有权** - 确认二进制日志文件的位置。默认路径在MySQL数据目录中。运行命令查看当前配置: ```bash mysql -e "SHOW VARIABLES LIKE 'datadir';" # 查看数据目录路径 mysql -e "SHOW VARIABLES LIKE 'log_bin_basename';" # 查看二进制日志基础路径 ``` - 如果输出类似`/var/lib/mysql`,则日志文件应在此目录下(如`/var/lib/mysql/mysql-bin.~rec~`)。 - 检查文件所有权:确保数据目录及其内容归`mysql`用户所有(MySQL默认运行用户)。使用命令: ```bash ls -ld /var/lib/mysql # 替换为您的实际路径 ``` - 正确所有权示例:`drwxr-x--- 2 mysql mysql ...`(用户和组均为`mysql`)。 - 如果所有权错误(如归`root`所有),修复命令: ```bash sudo chown -R mysql:mysql /var/lib/mysql # 递归更改所有权 ``` 2. **修复目录和文件权限** - MySQL需要数据目录的读写权限。推荐权限为`750`或`770`: ```bash sudo chmod -R 750 /var/lib/mysql # -R表示递归处理 ``` - 如果目录下有敏感文件,可仅设置日志文件权限: ```bash sudo find /var/lib/mysql -name "mysql-bin*" -exec chmod 660 {} \; # 设置日志文件为可读写 ``` - **重要提示**:避免使用过宽权限(如`777`),这会引入安全风险。 3. **检查并修正配置文件** - MySQL配置文件(如`/etc/my.cnf`或`/etc/mysql/my.cnf`)中日志路径配置错误是常见原因。确保: - 日志路径(如`log-bin`)在`[mysqld]`部分下,而非`[mysqld_safe]`或其他部分(错误配置会导致路径无效)[^2]。 - 示例正确配置(在`my.cnf`中): ```ini [mysqld] datadir=/var/lib/mysql log-bin=/var/lib/mysql/mysql-bin # 确保路径存在且可访问 server_id=1 # 主从配置时需设置,但单机也建议添加 ``` - 如果路径自定义(如`log-bin=/custom/path/mysql-bin`),确保该路径存在且权限正确: ```bash sudo mkdir -p /custom/path # 创建路径(如果不存在) sudo chown mysql:mysql /custom/path sudo chmod 750 /custom/path ``` 4. **处理安全模块限制(如SELinux/AppArmor)** - 在Linux系统中,SELinux或AppArmor可能阻止MySQL访问目录。临时禁用测试: ```bash sudo setenforce 0 # 临时禁用SELinux(重启后失效) ``` - 如果错误消失,则需永久调整: - SELinux:添加目录上下文: ```bash sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?" # 允许MySQL访问 sudo restorecon -Rv /var/lib/mysql # 应用更改 ``` - AppArmor:编辑`/etc/apparmor.d/usr.sbin.mysqld`,添加路径权限: ```ini /var/lib/mysql/** rwk, # 允许读写 ``` 5. **重启MySQL服务并验证** - 应用更改后重启服务: ```bash sudo systemctl restart mysqld # 或 sudo service mysql restart ``` - 检查错误是否解决: - 查看日志:`sudo tail -f /var/log/mysql/error.log`(无`Permission denied`提示即成功)。 - 运行测试命令:`mysql -e "SHOW MASTER STATUS;"`(应正常显示二进制日志信息)。 #### 预防措施 - **定期维护**:使用工具如`mysqlcheck`检查数据库一致性。 - **备份配置**:修改`my.cnf`前备份文件(`sudo cp /etc/my.cnf /etc/my.cnf.bak`)。 - **权限原则**:遵循最小权限原则,避免MySQL进程以root运行[^1][^2]。 如果以上步骤无效,请提供更多上下文(如操作系统、MySQL版本和完整错误日志),以便进一步诊断。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值