Skip to content


Ошибка mysql: Got fatal error 1236 from master

После аварийного рестарта mysql-сервера, исполняющего роль master-а, на slave-е вылезла вот такая проблемка:

[ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size', Error_code: 1236

Ну и процесс репликации, естественно, остановился.

Как можно догадаться из сообщения об ошибке, slave захотел выполнить команды из такого места бинлога, которого на мастере не оказалось после рестарта последнего (наверное, потому, что часть бинлога не успела записаться на диск мастера за мгновение до того, как он был перезагружен по питанию).

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

[slave]$ echo "show slave status \G" | mysql | grep -E "[[:space:]]Master_Log_File|Read_Master_Log_Pos"
  Master_Log_File: s10-bin.000253
  Exec_Master_Log_Pos: 783374391

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

[master]$ mysqlbinlog s10-bin.000253 | tail -n 9
/*!*/;
# at 783367615
#150704 18:12:45 server id 62 end_log_pos 783367646 CRC32 0x2be04f67 Xid = 22088173
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

И видим, что последняя позиция - 783367646. В то время как slave пытается исполнить позицию 783374391, которая, очевидно, дальше, чем 783367646. Вывод – надо "отмотать" slave немного назад:

[slave] mysql> stop slave;
[slave] mysql> change master to master_log_pos=783367646;
[slave] mysql> start slave;

В логе видим:

[Note] 'CHANGE MASTER TO executed'. Previous state master_host='10.10.10.10', master_port= 3306, master_log_file='s10-bin.000253', master_log_pos=783374391, master_bind=''. New state master_host='10.10.10.10', master_port= 3306, master_log_file='s10-bin.000253', master_log_pos=783367646, master_bind=''.
[Note] Slave I/O thread: connected to master '[email protected]:3306',replication started in log 's10-bin.000253' at position 783367646

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

Happy end.

P.S. Альтерантивным вариантом посмотреть бинлог является команда SHOW BINLOG EVENTS. Например:

mysql> show binlog events in 's9-bin.000125' from 24084942 limit 10;
+---------------+----------+-------------+-----------+-------------+------------------+
| Log_name      | Pos      | Event_type  | Server_id | End_log_pos | Info             |
+---------------+----------+-------------+-----------+-------------+------------------+
| s9-bin.000125 | 24084942 | Write_rows  |         8 |    24085025 | table_id: 244461 |
| s9-bin.000125 | 24085025 | Update_rows |         8 |    24086045 | table_id: 244461 |
| s9-bin.000125 | 24086045 | Write_rows  |         8 |    24086128 | table_id: 244461 |
| s9-bin.000125 | 24086128 | Update_rows |         8 |    24086518 | table_id: 244461 |
| s9-bin.000125 | 24086518 | Write_rows  |         8 |    24086600 | table_id: 244461 |
| s9-bin.000125 | 24086600 | Update_rows |         8 |    24086876 | table_id: 244461 |
| s9-bin.000125 | 24086876 | Write_rows  |         8 |    24087008 | table_id: 244461 |
| s9-bin.000125 | 24087008 | Update_rows |         8 |    24087138 | table_id: 244461 |
| s9-bin.000125 | 24087138 | Write_rows  |         8 |    24087221 | table_id: 244461 |
| s9-bin.000125 | 24087221 | Update_rows |         8 |    24087611 | table_id: 244461 |
+---------------+----------+-------------+-----------+-------------+------------------+
10 rows in set (0.00 sec)

Posted in Howto.

Tagged with , .


Как получить список всех IPv4-сетей автономной системы

Описание алгоритма решения задачи "получить список всех сетей организации, если известен один IP-адрес".

1. Забиваем в гугл запрос "show ip bgp regex looking glass", находим какой-нибудь looking glass, поддерживающий команду "show ip bgp regex" и не обрезающий вывод. Например lg.as48972.net

2. Выясняем номер автономной системы с помощью команды whois или на каком-нибудь веб-сервисе. Для примера возьмем IP-адрес 46.219.4.0 одного из киевских провайдеров:

$ whois 46.219.4.0 | grep origin
origin:         AS31148

Итак, номер автономной системы провайдера Freenet (O3) - 31148.

3. Далее идем на найденный looking glass и в качестве аргумента указываем номер AS со знаком доллара на конце (если знак доллара не указать, то отобразятся еще и сети организаций, для которых AS 31148 является транзитной, что нам в данном случае не нужно):

Поиск всех префиксов заданной AS

Как найти все блоки адресов, принадлежащие организации

4. Жмем кнопку "Execute" и получаем длинный список примерно такого вида (приведен не полностью), где в самом левом столбце и перечислены искомые блоки адресов:

BGP table version is 0, local router ID is 95.130.232.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
 
   Network          Next Hop            Metric LocPrf Weight Path
* i46.219.1.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.2.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.3.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.4.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.5.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
*>i46.219.6.0/24    77.222.66.177                  90      0 16243 21219 31148 i
* i                 77.222.66.181                  90      0 16243 21219 31148 i
* i46.219.7.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.8.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.9.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.10.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.11.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.12.0/24   77.222.66.181                  90      0 16243 21011 31148 i
*>i                 77.222.66.177                  90      0 16243 21011 31148 i
* i46.219.13.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.14.0/24   77.222.66.181                  90      0 16243 21011 31148 i
*>i                 77.222.66.177                  90      0 16243 21011 31148 i
* i46.219.15.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.16.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.17.0/24   77.222.66.181                  90      0 16243 21011 31148 i
*>i                 77.222.66.177                  90      0 16243 21011 31148 i
* i46.219.18.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.19.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.20.0/24   77.222.66.181                  90      0 16243 15772 28761 31148 i
*>i                 77.222.66.177                  90      0 16243 15772 28761 31148 i
* i46.219.21.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.22.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.23.0/24   77.222.66.181                  90      0 16243 21011 31148 i

Если номер AS четрыхзначный, то может потребоваться поиграться с аргументом запроса, добавив экранированный обратным слешем пробел пред номером AS. То есть вписать в поле нечто такое: "\ 31148$" (чтобы не отображались те автономные системы, номер которых содержит номер нашей как подстроку).

Posted in Howto.

Tagged with .


repoquery: поиск rpm-пакета, содержащего известный файл

Сегодня буду краток.

Есть такая часто возникающая задача – найти пакет, если не знаем его имени, но знаем имя какого-то бинарника, входящего в его состав.

Например, нужен бинарник phpize. Команда locate следов его присутствия не обнаружила даже после updatedb, "yum search" тоже не помогает. Значит, нужно установить пакет yum-utils, а затем делать так:

$ repoquery -q --file /*phpize
php-devel-0:5.3.3-40.el6_6.x86_64
php-devel-0:5.3.3-38.el6.x86_64

Немного поэкспериментировав, понял, что есть более краткая форма:

$ repoquery -f *phpize
php-devel-0:5.3.3-40.el6_6.x86_64
php-devel-0:5.3.3-38.el6.x86_64

Voilà!

Posted in *nix.

Tagged with , .


Запрет использования нашего редиректора левыми сайтами

В большинстве популярных CMS из SEO-соображений (или для логирования переходов с сайта на другие сайты) имеется специальный скрипт-перенаправлялка, с помощью которого публикуемые в user-generated-content внешние ссылки автоматом преобразуется во внутренние. Работает такой скрипт просто – заставляет веб-сервер вернуть ответ с HTTP-статусом 30x (301, 302 или 303) и с передачей броузеру URL-а для перехода в HTTP-заголовке "Location:". На моем сайте такой скрипт живет по адресу "/go/".

Недавно на мой apache httpd стали приходить многочисленные зловредные запросы вот такого примерно вида (access-лог пишется в формате combined):

87.104.60.5 - - [06/May/2015:13:29:54 +0300] "GET /go/url=http://www.salmon.ro/christina/archives/000021.html HTTP/1.1" 303 - "http://davischiropracticinc.com/rd/?dku=http://redirect.rankey.com/redirect.html?site_url=avz.org.ua/go/url=http://www.salmon.ro/christina/archives/000021.html" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16"

87.104.60.5 - - [06/May/2015:13:29:54 +0300] "GET /go/url=http://www.salmon.ro/christina/archives/000021.html HTTP/1.1" 303 - "http://shop.monard.se/redirector.php?url=http://www.lugnet.com/jump.cgi?http://avz.org.ua/go/url=http://www.salmon.ro/christina/archives/000021.html" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16"

87.104.60.5 - - [06/May/2015:13:29:54 +0300] "GET /go/url=http://www.salmon.ro/christina/archives/000021.html HTTP/1.1" 303 - "http://www.guchol.net/redirect.php?url=http://www.christiancinema.com/catalog/redirect.php?action=url&goto=avz.org.ua/go/url=http://www.salmon.ro/christina/archives/000021.html" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16"

Так как такие запросы обычно приходят большими пачками, то в это время load average резко растет, сервер начинает ощутимо тормозить и посетители моего сайта не могут нормально им пользоваться. Очевидно, что какая-то редиска использует нас в каких-то своих гнусных целях. Это, конечно же, нужно пресечь. Сделать это можно с помощью следующих директив модуля mod_rewrite (для случая, если наш защищаемый сайт имеет домен avz.org.ua):

RewriteCond %{HTTP_REFERER} !^http://(www\.)?avz\.org\.ua/.*
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?google\.com.*
RewriteCond %{HTTP_REFERER} !^$
RewriteRule go/url=.* - [F]

Это означает, что если обращение к нашему редиректору происходит не с нашего сайта И не с гугловой выдачи И с не пустым HTTP-заговком Referer, то такие обращения блокируются, выдавая HTTP status code 403 (Forbidden) вместо кода 30x. Выдать 403 сразу на уровне апача намного быстрее, чем передавать запрос на обработку интерпретатору PHP.

Posted in Web-apps.

Tagged with , .