- 我通过在 my.cnf 中添加对 binlog、中继日志等的引用来设置 mysql 复制
- 重新启动mysql,成功了。
- 我想改变它,所以我删除了所有 binlog 相关文件,包括 log-bin.index,
- 从 my.cnf 中删除 binlog 语句
- 重启服务器,正常运行
- 将主服务器设置为'',清除自现在以来的主服务器日志(),重置从服务器,停止从服务器,停止主服务器。
现在,为了再次设置复制,我向服务器添加了 binlog 语句。但是当我使用以下命令重新启动时,我遇到了这个问题:
sudo mysqld
(查看mysql启动错误的唯一方法)
我收到此错误:
/usr/sbin/mysqld: File '/etc/mysql/var/log-bin.index' not found (Errcode: 13)
因为实际上,这个文件不存在!(我在尝试设置新的复制系统时删除了它)嗯,如果我将配置行更改为:
log-bin-index = log-bin.index
我收到一个不同的错误:
[ERROR] Can't generate a unique log-filename /etc/mysql/var/bin.(1-999)
[ERROR] MSYQL_BIN_LOG::open failed to generate new file name.
[ERROR] Aborting
我第一次在此系统上设置复制时,不需要创建此文件。我做了同样的事情 - 添加了对以前不存在的文件的引用,然后 mysql 创建了它。中继日志等也是如此。
我不知道为什么 mysql 坚持尝试读取旧文件夹。
我是否应该重新安装整个软件包?这似乎有点过头了。
我的my.cnf:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
bind-address = IP
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
table_cache = 64
sort_buffer =64K
net_buffer_length =2K
query_cache_limit = 1M
query_cache_size = 16M
slow_query_log_file = /etc/mysql/var/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
expire_logs_days = 10
max_binlog_size = 100M
server-id = 3
log-bin = /etc/mysql/var/bin.log
log-slave-updates
log-bin-index = /etc/mysql/var/log-bin.index
log-error = /etc/mysql/var/error.log
relay-log = /etc/mysql/var/relay.log
relay-log-info-file = /etc/mysql/var/relay-log.info
relay-log-index = /etc/mysql/var/relay-log.index
auto_increment_increment = 10
auto_increment_offset = 3
master-host = HOST
master-user = USER
master-password=PWD
replicate-do-db = DBNAME
collation_server=utf8_unicode_ci
character_set_server=utf8
skip-character-set-client-handshake
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash
[myisamchk]
key_buffer_size = 16M
sort_buffer_size = 8M
[mysqlhotcopy]
interactive-timeout
!includedir /etc/mysql/conf.d/
更新:将 binlog 和中继日志语句中的所有 /etc/mysql/var/xxx 路径更改为本地已在某种程度上解决问题。
我起初以为是 apparmor 造成的,但是当我将 /etc/mysql/* rw 添加到 apparmor 的配置并重新启动它时,它仍然无法读取完整路径。
答案1
首先,重新安装 mysql 并不是真正的解决方案。特别是如果您指的是删除并安装软件包 —— 这不会影响数据目录中的文件,您的问题也不会改变。
其次,您永远不必触碰磁盘上的 binlog 文件——从文件系统中删除它们并不是管理它们的正确方法。mysql 中有一些命令可以删除旧日志。MySQL 还必须维护索引文件,因此磁盘上的文件与其保留的现有 binlog 列表相匹配。请参阅清除二进制日志
所以,您陷入困境是因为您做出了假设并触碰了不该触碰的文件。
此错误:
/usr/sbin/mysqld: File '/etc/mysql/var/log-bin.index' not found (Errcode: 13)
并不意味着它不存在;错误 13 表示“权限被拒绝”,这可能意味着 mysql 无法写入/etc/mysql/var/
您现在真正需要做的就是修复/etc/mysql/var/
以下权限:
chown mysql:mysql /etc/mysql/var; chmod 0775 /etc/mysql/var
如果没有 .index 文件,也没有 binlogs,mysql 将从头开始并创建所需的文件。删除该目录下的所有文件。
答案2
/etc/mysql/var/
似乎不是正确路径,您应该检查您的datadir
设置。它应该是类似/var/lib/mysql