Назад | Перейти на главную страницу

Как полностью сбросить настройки репликации mysql, не переустанавливая его?

  1. Я настроил репликацию mysql, добавив ссылки на бинлоги, журналы реле и т. Д. В my.cnf
  2. перезапустил mysql, все заработало.
  3. Я хотел изменить его, поэтому удалил все файлы, связанные с binlog, включая log-bin.index,
  4. удалены операторы binlog из my.cnf
  5. перезапустил сервер, работает
  6. установить для мастера значение '', очистить журналы мастера с настоящего момента (), сбросить ведомое устройство, остановить ведомое устройство, остановить ведущее устройство.
  7. Теперь, чтобы снова настроить репликацию, я добавил на сервер операторы 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/

Обновление: изменение всех путей / etc / mysql / var / xxx в операторах журнала binlog и relay log на локальные как-то решило проблему.

Сначала я думал, что это вызвано apparmor, но когда я добавил / etc / mysql / * rw, в конфигурацию apparmor и перезапустил его, он все еще не мог прочитать полный путь.

Во-первых, переустановка mysql - не лучшее решение. Особенно, если вы имеете в виду удаление и установку пакетов - это не коснется файлов в вашем каталоге данных, и ваша проблема не изменится.

Во-вторых, вам ни в коем случае не следует прикасаться к файлам binlog на диске - удаление их из файловой системы не является правильным способом управления ими. В mysql есть команды, которые удаляют старые журналы. MySQL также должен поддерживать индексный файл, чтобы файлы на диске соответствовали списку существующих журналов двоичных файлов, которые он хранит. Видеть Очистка двоичных журналов

Итак, беспорядок, в котором вы находитесь, заключается в том, что вы делаете предположения и касаетесь файлов, которых не должны.

Эта ошибка:

/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 просто начнет с нуля и создаст нужные файлы. Удалите все файлы в этом каталоге.

/etc/mysql/var/ не кажется правильным, вам следует проверить свой datadir настройка. Это должно быть что-то вроде /var/lib/mysql