我在 mySQL 4.1.20 上启用二进制日志时遇到问题
添加后
log-bin=/var/log/mysql/tts_db到my.cnf,mysql重新启动失败,mysqld.log中出现以下错误:
091112 03:36:37 mysqld 已启动 /usr/libexec/mysqld:未找到文件‘/var/log/mysql/tts_db.000001’(错误代码:13) 091112 3:36:37 [错误] 无法使用 /var/log/mysql/tts_db 进行日志记录(错误 13)。在 MySQL 服务器进程的整个持续时间内关闭日志记录。要再次打开它:修复原因,关闭 MySQL 服务器并重新启动它。 091112 3:36:37 [错误] 正在中止 091112 3:36:37 [注意] /usr/libexec/mysqld: 关闭完成 091112 03:36:37 mysqld 结束
当我查看并提出这个问题时,我可能偶然发现了答案,但我还是会检查一下——我直到明天早上才能重新启动服务器。mysql 目录 (/var/log/mysql) 由 root 拥有。这个问题是因为运行服务器的 mysql 用户没有在目录中创建文件的正确权限吗?
这是完整的 my.cnf(我知道 log-bin 已被注释掉 - 这是当前的)
[mysqld] 数据目录=/var/lib/mysql 套接字=/var/lib/mysql/mysql.sock 设置变量=本地文件=0 设置变量 = max_connections=130 长查询时间 = 1 日志慢查询=/var/log/mysql/mysql-slow.log # 默认使用旧密码格式以兼容 mysql 3.x # 客户端(使用 mysqlclient10 兼容包的客户端)。 旧密码=1 跳过 bdb # 我们不能跳过网络,因为 phpList 服务器位于不同的服务器上。 #跳过网络 设置变量 = innodb_thread_concurrency=2 表缓存 = 512 查询缓存大小 = 20M 密钥缓冲区大小 = 64M 线程缓存大小 = 10 tmp_table_size = 48M # 2009 年 11 月 11 日添加,以启用复制的二进制日志记录 服务器 ID = 1 #log-bin=/var/log/mysql/tts_db #expire-logs-days = 2 #max_binlog_size = 500M #binlog-do-db=tts_db #============================================================================== #mysql.server 部分 #============================================================================== # [mysql.服务器] 用户=mysql basedir=/var/lib #============================================================================== # mysqd_safe 部分 #============================================================================== # [mysqld_safe] 错误日志=/var/log/mysqld.log pid 文件=/var/run/mysqld/mysqld.pid 跳过 bdb 设置变量 = innodb_thread_concurrency=2 表缓存 = 512 查询缓存大小 = 20M 密钥缓冲区大小 = 64M 线程缓存大小 = 10 tmp_table_size = 48M 打开文件限制 = 4096
答案1
一般来说,在 Linux 系统上,错误号 13方法权限被拒绝或拒绝访问。
输出是什么
# ls -ld /var/log/mysql
# ls -l /var/log/mysql
这与您的 MySQL 用户匹配吗?
如果没有,建议的解决方案(提供 mysql 是您的 mysql 用户和 mysql 是您的组):
chown -R mysql:mysql /var/log/mysql
答案2
mysql 目录 (/var/log/mysql) 归 root 所有。这个问题是因为运行服务器的 mysql 用户没有在目录中创建文件的正确权限吗?
确切地说。mysqld
此时已放弃其 root 权限。因此datadir
,目录需要由以mysqld
身份运行的用户和组拥有,以便它创建必要的文件。