Como restaurar as configurações de replicação do mysql completamente, sem reinstalá-lo?

2
  1. Eu configurei a replicação do mysql adicionando referências a binlogs, relay logs etc em my.cnf
  2. reiniciou o mysql, funcionou.
  3. Eu queria alterá-lo, então excluí todos os arquivos relacionados ao log binário, incluindo log-bin.index,
  4. instruções binlog removidas de my.cnf
  5. servidor reiniciado, funciona
  6. definir mestre para '', limpar os registros principais desde agora (), redefinir escravo, parar escravo, parar mestre.
  7. agora, para configurar a replicação novamente, adicionei instruções binlog ao servidor. Mas então eu acerto esse problema quando estou reiniciando com:

    sudo mysqld
    

(a única maneira de ver os erros de inicialização do mysql)

Eu recebo este erro:

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

Porque, de fato, esse arquivo não existe! (Eu apaguei, enquanto tentava configurar um novo sistema de replicação) Hmm, se eu mudar a linha de configuração para:

log-bin-index = log-bin.index

Eu recebo um erro diferente:

[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

Na primeira vez que configurei a replicação neste sistema, não precisei criar este arquivo. Eu fiz a mesma coisa - adicionei referências a um arquivo anteriormente inexistente e o mysql o criou. O mesmo com os logs de retransmissão, etc.

Eu não sei porque o mysql insiste em tentar ler a pasta antiga.

Devo reinstalar o pacote inteiro novamente? Isso parece um exagero.

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/

Atualização: Alterando todos os caminhos / etc / mysql / var / xxx no log binário & relay log statements para local de alguma forma resolveu o problema.

Eu pensei que era o apparmor causando isso no começo, mas quando eu adicionei / etc / mysql / * rw, na configuração do apparmor e reiniciei, ainda não consegui ler o caminho completo.

    
por fastmultiplication 11.07.2012 / 09:36

2 respostas

2

Primeiro, reinstalar o mysql não é uma solução real. Especialmente se você quer dizer remover e instalar os pacotes - isso não afetará os arquivos em seu diretório de dados e seu problema não mudará.

Em segundo lugar, você nunca deve ter que tocar em arquivos binlog no disco - excluí-los do sistema de arquivos não é o caminho certo para gerenciá-los. Existem comandos no mysql que removerão logs antigos. O MySQL também deve manter o arquivo de índice, de modo que os arquivos no disco correspondam à lista de binlogs existentes que ele mantém. Consulte Limpar registros binários

Então a bagunça em que você está é porque você está fazendo suposições e tocando em arquivos que não deveria.

Este erro:

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

Não significa que não esteja lá; Erro 13 significa "Permissão negada" O que provavelmente significa que o mysql não pode gravar em /etc/mysql/var/

Tudo o que você precisa fazer agora é corrigir as permissões em /etc/mysql/var/ Algo como: chown mysql:mysql /etc/mysql/var; chmod 0775 /etc/mysql/var

Se não houver um arquivo .index e nenhum binlogs, o mysql iniciará do zero e criará os arquivos necessários. Remova todos os arquivos desse diretório.

    
por 13.07.2012 / 08:25
0

/etc/mysql/var/ não parece ser um caminho correto, você deve verificar sua configuração datadir . Deve ser algo como /var/lib/mysql

    
por 11.07.2012 / 10:27