如何完全重置mysql的复制设置,无需重新安装?

  1. 我通过在my.cnf中添加对binlog,中继日志等的引用来设置mysql复制
  2. 重新启动MySQL,它的工作。
  3. 我想改变它,所以我删除了所有binlog相关的文件,包括log-bin.index,
  4. 从my.cnf中删除了binlog语句
  5. 重新启动服务器,工作
  6. 将master设置为'',从现在开始清除主日志(),复位slave,停止slave,停止master。
  7. 现在,为了再次设置复制,我添加了binlog语句到服务器。 但是当我重新启动时遇到这个问题:

    sudo mysqld 

(唯一的方法来看到MySQL的启动错误)

我得到这个错误:

 /usr/sbin/mysqld: File '/etc/mysql/var/log-bin.index' not found (Errcode: 13) 

因为确实,这个文件不存在! (我删除它,而试图build立一个新的复制系统)嗯,如果我改变configuration行:

 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 

我第一次在这个系统上设置复制,我不需要创build这个文件。 我做了同样的事情 – 添加引用到以前不存在的文件,并创build它。 跟继电器logging一样

我不知道为什么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 / xxxpath更改为本地已经解决了问题。

我原以为这是造成它,但是当我添加/ etc / mysql / * rw,apparmor的configuration,并重新启动它,仍然无法读取完整的path。

首先,重新安装MySQL不是一个真正的解决scheme。 特别是如果你的意思是删除和安装软件包 – 这将不会触及你的数据目录中的文件,你的问题不会改变。

其次,你不应该碰到磁盘上的binlog文件 – 从文件系统中删除它们不是正确的方式来pipe理它们。 有在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 chown mysql:mysql /etc/mysql/var; chmod 0775 /etc/mysql/var

如果没有.index文件,并且没有binlogs,mysql就会从头开始创build它需要的文件。 删除该目录中的任何文件。

/etc/mysql/var/似乎不是一个正确的path,你应该检查你的datadir设置。 它应该是/var/lib/mysql