首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何完全重置mysql的复制设置,而不重新安装它?

如何完全重置mysql的复制设置,而不重新安装它?
EN

Server Fault用户
提问于 2012-07-11 07:36:33
回答 2查看 14.7K关注 0票数 2
  1. 我通过在my.cnf中添加对绑定日志、中继日志等的引用来设置mysql复制
  2. 重新启动mysql,它成功了。
  3. 我想要更改它,所以我删除了所有与binlog相关的文件,包括log-bin.index,
  4. 从my.cnf中删除binlog语句
  5. 重新启动服务器,工作
  6. 将母版设置为“”,从现在()开始清除主日志,重置从,停止从,停止主。
  7. 现在,为了再次设置复制,我向服务器添加了binlog语句。但是当我重新开始的时候,我遇到了这个问题: sudo mysqld

(查看mysql启动错误的唯一方法)

我知道这个错误:

代码语言:javascript
复制
/usr/sbin/mysqld: File '/etc/mysql/var/log-bin.index' not found (Errcode: 13)

因为实际上,这个文件不存在!(我在尝试设置新的复制系统时删除了它),如果我将配置行更改为:

代码语言:javascript
复制
log-bin-index = log-bin.index

我得到了一个不同的错误:

代码语言:javascript
复制
[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:

代码语言:javascript
复制
[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的配置并重新启动它时,它仍然无法读取完整的路径。

EN

回答 2

Server Fault用户

发布于 2012-07-13 06:25:22

首先,重新安装mysql并不是真正的解决方案。特别是如果您的意思是删除和安装软件包-这将不会触及您的数据目录中的文件,您的问题不会改变。

第二,您不应该接触磁盘上的binlog文件--将它们从文件系统中删除并不是管理它们的正确方法。mysql中有删除旧日志的命令。MySQL还必须维护索引文件,因此磁盘上的文件与它保存的现有绑定日志列表相匹配。请参阅清除二进制日志

所以你陷入困境是因为你在做假设和接触你不该做的文件。

此错误:

代码语言:javascript
复制
/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文件,也没有绑定日志,mysql将从头开始并创建它需要的文件。删除该目录中的任何文件。

票数 2
EN

Server Fault用户

发布于 2012-07-11 08:27:18

/etc/mysql/var/似乎不是正确的路径,您应该检查您的datadir设置。应该像/var/lib/mysql一样

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/406652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档