Eu tenho o seguinte problema. Eu tive uma configuração bem-sucedida da réplica mestre (baseada em linha). Está funcionando há 2-3 horas. Depois que o bin-log foi girado -> o arquivo mysql-bin.index foi corrompido no mestre.
Aqui mostra os logs principais;
mostrar logs mestre\G
*************************** 1. row ***************************
Log_name: mysql-bin.000001
File_size: 27682022
*************************** 2. row ***************************
Log_name: mysqld Ver 5.1.73-5-beget-log for debian-linux-gnu on x86_64 ((LTD BeGet))
File_size: 0
*************************** 3. row ***************************
Log_name: or its affiliates
File_size: 0
*************************** 4. row ***************************
Log_name: or its affiliates. All rights reserved.
File_size: 0
4 rows in set (0.00 sec)
Arquivo de configuração do mysql no master:
cat /etc/mysql/my.cnf | grep -v -E "^$" | grep -v -E "^#"
[mysqld]
event_scheduler = 1
interactive_timeout = 30
set-variable = wait_timeout=30
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /home/mysql
tmpdir = /home/tmpfs
server_id = 1
log-bin = mysql-bin
binlog-do-db = somedb
binlog-format = row
skip-external-locking
bind-address = 0.0.0.0
default-character-set = UTF8
innodb_file_per_table = 1
max_allowed_packet = 128M
thread_stack = 512K
thread_cache_size = 64
myisam-recover = BACKUP
thread_concurrency = 48
max_user_connections = 100
max_connections = 200
back_log = 500
join_buffer_size = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 8M
sort_buffer_size = 4M
myisam_sort_buffer_size = 512M
query_cache_limit = 4M
query_cache_size = 128M
tmp_table_size = 5000M
max_heap_table_size = 5000M
key_buffer = 128M
max_connect_errors = 65000
max_error_count = 65000
key_buffer_size = 102M
open_files_limit = 1040000
table_open_cache = 10000
table_definition_cache = 100000
O arquivo mysql-bin.index contém a saída de mysqld --help
show slave status tem os seguintes erros:
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 4
Relay_Log_File: mysqld-relay-bin.000003
Relay_Log_Pos: 152
Relay_Master_Log_File: mysql-bin.000002
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
Last_SQL_Errno: 0
Last_SQL_Error:
Versão do mysql:
mysql -V
mysql Ver 14.14 Distrib 5.1.73, for debian-linux-gnu (x86_64) using readline 5.1
Não encontrei nada de estranho no log de erros. Na verdade, não sei como depurar isso. Qualquer ajuda será apreciada.
Ok, respondendo minha própria pergunta. É um bug que descobrimos no servidor MySQL. Simplificando, tivemos a verificação do nagios que parecia
mysqld --verbose --help 2>&1 >&-
Ok, aqui está o problema, stdout está fechado. E o mysql imprime a saída para o arquivo de índice que é aberto antes.
Abrimos bug para este caso: https://bugs.launchpad.net/percona-server/+bug/1401547
A correção foi fácil, basta remover >&-, para que não fechemos o stdout, mas ainda é um comportamento estranho.