MySQL: Ошибка репликации — Got fatal error 1236 from master when reading data from binary log

В категории Подсказки от 25 мая, 2021. Автор admin

После аварийной перезагрузки mysql-сервера, исполняющего роль master, может сломаться репликация. А на slave после выполнения show slave status\G можно лицезреть следующую ошибку:

Slave_IO_Running: No
Slave_SQL_Running: Yes
......
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size; the first event 'mysql-bin.000034' at 988867715, the last event read from '/db/mysql/mysql-bin.000034' at 4, the last byte read from '/db/mysql/mysql-bin.000034' at 4.'

Смотрим позицию, до которой дошел slave:

[slave]$ echo "show slave status \G" | mysql -u root -p | grep -E "[[:space:]]Master_Log_File|Read_Master_Log_Pos"
Master_Log_File: mysql-bin.000034
Exec_Master_Log_Pos: 988867715

Смотрим последнюю позицию, которая реально присутствует в этом бинлоге мастера:

[master]$ mysqlbinlog /db/mysql/mysql-bin.000034 | tail -n 12
'/*!*/;
# at 988777276
#180425  8:57:41 server id 1  end_log_pos 988777362 CRC32 0x3172f95b     Query    thread_id=8036410    exec_time=0    error_code=0
SET TIMESTAMP=1524635861/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
COMMIT
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

И видим, что последняя позиция — 988777362. В то время как slave пытается исполнить позицию 988867715, которая, очевидно, дальше, чем 988777362. Вывод – надо «отмотать» slave немного назад:

[slave] mysql> stop slave;
[slave] mysql> change master to master_log_file='mysql-bin.000034', master_log_pos=988777362;
[slave] mysql> start slave;


Ну и далее show slave status\G нам говорит, что slave начал догонять master.

Тэги: , , ,

Восстановление MySQL таблиц

В категории Подсказки от 18 августа, 2019. Автор admin

Приведу пример простой проверки таблиц всех баз данных используя mysqlcheck:

mysqlcheck -u root -p -A

Где опция -u определяет имя пользователя под которым выполняется подключение к MySQL, -p для запроса пароля, -A для проверки таблиц всех баз данных.

Пример восстановления конкретной базы данных:

mysqlcheck -u root -p -r db_name

Пример восстановления конкретной таблицы в указанной базе данных:
mysqlcheck -u root -p -r db_name table_name

Больше »

Тэги:

Как узнать размер баз данных в MySQL

В категории Подсказки от 10 марта, 2018. Автор admin

SELECT table_schema "DB Name", Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables  GROUP BY table_schema;

+———————+—————+
| DB Name            | DB Size in MB |
+———————+—————+
| cards              |           0.0 |
| info               |         267.3 |
| information_schema |           0.0 |
| mysql              |           0.6 |
| quickdat           |        3214.9 |
| quickdat_notif     |          65.7 |
| scgraf             |        9783.9 |
| test               |           0.0 |
+———————+—————+
8 rows in set (4.70 sec)

Тэги: ,