Previous Entry Share Next Entry
mysqlbinlog и большой запрос.
Рысь
eking_go wrote in ru_mysql
Есть 2 сервера (x64, Mysql 5.1.73-1-log (Debian)), поломалась репликация, нужно вытащить проблемный запрос, но он очень большой :(

[Подробности...]Вот так (на мастере) - не получается:
mysqlbinlog --no-defaults -v --start-position=21153090 --stop-position=21153091 /var/log/mysql/bin.000134

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#141224  4:28:48 server id 2  end_log_pos 106   Start: binlog v 4, server v 5.1.73-1-log created 141224  4:28:48
BINLOG '
0BaaVA8CAAAAZgAAAGoAAAAAAAQANS4xLjczLTEtbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 21153090
#141224  4:37:55 server id 2  end_log_pos 21153118      Intvar
SET INSERT_ID=8006867/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;


На слейве:

# mysql --defaults-file=/etc/mysql/debian.cnf -e " show slave status \G;" | grep Log
              Master_Log_File: bin.000166
          Read_Master_Log_Pos: 6508252
               Relay_Log_File: mysqld-relay-bin.000377
                Relay_Log_Pos: 21153229
        Relay_Master_Log_File: bin.000134
          Exec_Master_Log_Pos: 21153090
              Relay_Log_Space: 3321769837


Как еще можно его получить?

  • 1
Возьмите range между start-position и stop-position побольше. Они не по единице инкрементируются, а на большие значения.

Вот пример из моего лога в вакууме:


# at 440
#141220 13:34:35 server id 1 end_log_pos 512 CRC32 0x62121a06 Query thread_id=1 exec_time=0 error_code=0
SET TIMESTAMP=1419078875/*!*/;
BEGIN
/*!*/;
# at 512
#141220 13:34:35 server id 1 end_log_pos 557 CRC32 0x92e8c4fe Table_map: `test`.`t1` mapped to number 70
# at 557
#141220 13:34:35 server id 1 end_log_pos 597 CRC32 0x2a574860 Write_rows: table id 70 flags: STMT_END_F

BINLOG '
22yVVBMBAAAALQAAAC0CAAAAAEYAAAAAAAEABHRlc3QAAnQxAAEDAAH+xOiS
22yVVB4BAAAAKAAAAFUCAAAAAEYAAAAAAAEAAgAB//4BAAAAYEhXKg==
'/*!*/;
### INSERT INTO `test`.`t1`
### SET
### @1=1
# at 597
#141220 13:34:35 server id 1 end_log_pos 628 CRC32 0xa6f6cd61 Xid = 11
COMMIT/*!*/;
# at 628


Это один запрос вида insert into t1 values(1); Range тут, как вы видите, 440 - 628

ПРи указании большего интервала получаю ошибку :(

mysqlbinlog --no-defaults -v --start-position=21153080 --stop-position=21153091 /var/log/mysql/bin.000134
ERROR: Error in Log_event::read_log_event(): 'Event too big', data_len: -1709640919, event_type: 108
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
ERROR: Could not read entry at offset 21153080: Error in log format or read error.
#141224 4:28:48 server id 2 end_log_pos 106 Start: binlog v 4, server v 5.1.73-1-log created 141224 4:28:48
BINLOG '
0BaaVA8CAAAAZgAAAGoAAAAAAAQANS4xLjczLTEtbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

--start-position=21153090 --stop-position=21153118

вы отматываете начало и не попадаете на предыдущий эвент, от этого и Error in log format

Edited at 2014-12-24 12:25 pm (UTC)

mysqlbinlog --no-defaults -v --start-position=21153090 --stop-position=21153118 /var/log/mysql/bin.000134
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#141224 4:28:48 server id 2 end_log_pos 106 Start: binlog v 4, server v 5.1.73-1-log created 141224 4:28:48
BINLOG '
0BaaVA8CAAAAZgAAAGoAAAAAAAQANS4xLjczLTEtbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 21153090
#141224 4:37:55 server id 2 end_log_pos 21153118 Intvar
SET INSERT_ID=8006867/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

Там все равно нет запроса:( Значит он в следующем файле лога?

можно попробовать увеличить stop-position еще, а можно просто не указывать:

mysqlbinlog --no-defaults -v --start-position=21153090 /var/log/mysql/bin.000134 | less


запрос там должен быть, просто stop-position ограничивает глубину просмотра

с какой ошибкой, кстати, реплика поломалась?

Edited at 2014-12-24 01:59 pm (UTC)

Спасибо большое! Получилось!

> с какой ошибкой, кстати, реплика поломалась?

Да тут все ясно и решаемо, по глупости: Error 'Column 'p' cannot be null' on query.

  • 1
?

Log in