Название: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: k291 от 22 Апреля 2018, 03:38:07 Имеется резервный сервер Ubuntu+radius+Mikrotik. БР реплицируется по Master-Slave(резервный сервер).
Настраивают радиус по инструкции. При запросе с Mikrotik`a, ответ: Цитировать rad_recv: Access-Request packet from host 217.10.55.66 port 55867, id=216, length=129 Threads: total/active/spare threads = 5/0/5 Waking up in 0.9 seconds. Thread 4 got semaphore Thread 4 handling request 0, (1 handled so far) NAS-Port-Type = Ethernet NAS-Port = 2206959593 Calling-Station-Id = "1:e4:8d:8c:b8:c6:83" Framed-IP-Address = 10.0.1.82 Called-Station-Id = "dhcp_1_24" User-Name = "E4:8D:8C:B8:C6:83" User-Password = "" NAS-Identifier = "Sap" NAS-IP-Address = 217.10.55.66 # Executing section authorize from file /etc/freeradius/sites-enabled/nodeny +group authorize { rlm_sql (sql): Reserving sql socket id: 4 [sql] expand: call radcheck('%{User-Name}') -> call radcheck('E4:8D:8C:B8:C6:83') rlm_sql_mysql: MYSQL check_error: 1305 received rlm_sql_getvpdata: database query error [sql] SQL query error; rejecting user rlm_sql (sql): Released sql socket id: 4 ++[sql] = fail +} # group authorize = fail Using Post-Auth-Type Reject WARNING: Unknown value specified for Post-Auth-Type. Cannot perform requested action. # Executing group from file /etc/freeradius/sites-enabled/nodeny Delaying reject of request 0 for 1 seconds Going to the next request Thread 4 waiting to be assigned a request Все делаю правильно, повторял действия по инструкции несколько раз. Ответ один и тотже. Сервер MASTER, настроен по аналогии, но все работает как надо. Подскажите, что не так? Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: Cell от 22 Апреля 2018, 16:47:16 ну проверьте mysql клиентом с этого таза вызов
call radcheck('E4:8D:8C:B8:C6:83'); Пишет же что в нем ошибка sql Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: k291 от 23 Апреля 2018, 03:20:55 Пробовал.
Вот ответ: Код: mysql> CALL radreply('E4:8D:8C:B8:C6:83', 'dhcp_1_24'); Код: mysql> SELECT get_ip_by_tag('1', 'dhcp_1_saperka24'); Код: ps aux | grep radi При при таком запросе с консоли, Radius не выдает ошибок: Код: root@vps:~# radtest E4:8D:8C:B8:C6:83 '' 127.0.0.1 0 hardpass5 Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: k291 от 23 Апреля 2018, 04:00:26 Пробовал перезалить базу вручную через консоль, взяв с рабочего сервера. Результат тот же.
Пере создавал процедуру, проблема осталась. У человека с форума была подобная проблема, причина в кодировке. Менял кодировку, вручную писал правила. Не помогло. Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: ser970 от 23 Апреля 2018, 08:00:01 из радиуса
call radcheck('%{User-Name}') -> call radcheck('E4:8D:8C:B8:C6:83') и из консоли CALL radreply('E4:8D:8C:B8:C6:83', 'dhcp_1_24'); вам не кажется то разные ? попробуйте из консоли мускула call radcheck('E4:8D:8C:B8:C6:83'); Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: k291 от 24 Апреля 2018, 21:22:21 Вот вывод с резервного сервера, на котором ошибка:
Код: mysql> call radcheck('E4:8D:8C:B8:C6:83'); Код: mysql> call radcheck('E4:8D:8C:B8:C6:83'); Дело в том, что между центральным и резервным серверном, настроина репликация Master-Slave. + делал перенос дампа базы. А в ответ "PROCEDURE nodeny.radcheck does not exist" Пересоздал процедуру, теперь есть ответ на резервном. Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: ser970 от 24 Апреля 2018, 21:31:51 все зависит от тогда как настраивали и делали и зарворачивали бекап....
з.ы.ну так создайте процедуру ... Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: Redmen от 24 Апреля 2018, 21:43:05 если делал бекап скриптом из поставки с нодени, то он дампит только таблицы и въюхи!
вот инструкция : https://ruhighload.com/Как+настроить+mysql+master-slave+репликацию%3f (https://ruhighload.com/Как+настроить+mysql+master-slave+репликацию%3f) только перед 4. шагом слей дамп с мастера на слейв, я использую scp Код: scp /directory1/filename1 usern@destination_host:/directory2/filename2 Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: Redmen от 24 Апреля 2018, 21:47:26 или на мастеере сделай експорт всех функций и процедур, и импортируй их на слейве
перед импортом на слейве нужно выполнить Код: ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci; Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: ser970 от 24 Апреля 2018, 21:48:57 может проще было делать дамп с -R
Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: Redmen от 24 Апреля 2018, 22:10:09 тоже не мог сначала понять в чеп трабла, потом увидел отсутствие процедур - сделал.
затем ошибки мускула типа несовместимые кодировки для сравнения сейчас работает следущая схема: db1<=>db2->db3 master1<=>master2->slave3(delay 12h) 1 и 2 мастер мастер (основной сервер 1, второй на горячую замену) 3 - слейв с задержкой в 12 часов + ко всему мониторинг если упал 1, на его место стает 2, когда подняли первый, он бегом с восстанавливается, и лишь за тем он становится обратно 1; если мастера не упали а посыпались кретические таблицы но мускул работает, тут приходит на помощь слейв с задержкой = мониторинг трубит проблему и остонавливает репликацию на мастерах, и у вас есть 11.5 часов на поднятие мастеров с слейва (для быстроты слейв 3 стает мастером а мастер 1 стает слейвом) минус такой схемы = слейв пишет с мастер2, а что если он упадет ( но мастер2 резервный и не нагружений, поетому риск его падения минимален) успехов Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: k291 от 25 Апреля 2018, 23:08:44 Всем спасибо!
Действительно, при переносе БД не перенес процедуры. Помогло: Код: mysqldump --routines -R -u root -p nodeny > nodeny.sql Если надо перенести только процедуры и тригеры(Полезно когда таблица уже созданы): Код: mysqldump --routines -R --no-create-info --no-data --no-create-db --skip-opt -u root -p nodeny > nodeny_procedury.sql Импортируется дамп как обычная БД: Цитировать mysql -u root --password='hardpass' nodeny < nodeny.sql Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: ser970 от 25 Апреля 2018, 23:56:19 только
Цитировать mysqldump --routines -R -u root -p nodeny > nodeny.sql -R, --routines Dump stored routines (functions and procedures). это одно и тоже зачем два раза указывать ? и если куда то переносить надо то сразу и в архив где то так mysqldump -R -u root -p nodeny | gzip > nodeny.sql.gz Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: Redmen от 26 Апреля 2018, 08:53:42 Код: -R, --routines Dump stored routines (functions and procedures). Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: ser970 от 26 Апреля 2018, 10:27:56 можно сделать чуть красивее...
в my.cnf в секцию [mysqldump] routines=TRUE Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: k291 от 26 Апреля 2018, 22:14:46 А что Вы делаете, когда появляется ошибка:
Цитировать Last_Errno: 1032 Можно пропустит ошибку:Last_Error: Could not execute Update_rows event on table nodeny.auth_now; Can't find record in 'auth_now', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000228, end_log_pos 37949 Код: mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=37949; START SLAVE; Но пропускать не хорошо, можно что-то важное не реплицировать. На мастер и на свейв, auth_now одинаковые: Но разные id, start, last у IP и некоторое отсутствие данных в properties Цитировать mysql> DESCRIBE auth_now; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | ip | varchar(15) | NO | UNI | NULL | | | start | int(10) unsigned | NO | MUL | 0 | | | last | int(10) unsigned | NO | MUL | 0 | | | properties | text | NO | | NULL | | +------------+------------------+------+-----+---------+----------------+ Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: Redmen от 26 Апреля 2018, 22:41:44 для правильной репликации желательно полностью остановить мастер или лок бд.
1) на настроеном мастере: ресет мастер; лок таблес; шов мастер статус; 2) дамп бд, перенос на слейв, развертивание, запуск слейва 3) на мастере анлок бд это нужно для того что бы от мастер ресет и до анлок дб не производилось никаких записей в мастер, иначе ошибок не избежать, особенно с auth_now и auth_log т.к. в этих таблицах большая текучка данных (молчу про таблицы трафика) у нас при переносе бд (за 8 минут) на 15 тышь абонов, ошибок связаных с auth_now и auth_log (других ошибок не было) около 3 000, а так помог скриптик который скипал эти ошибки если они связаны были с auth_now или auth_log Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: Redmen от 26 Апреля 2018, 22:45:56 На мастер и на свейв, auth_now одинаковые: Но разные id, start, last у IP и некоторое отсутствие данных в properties если разные id то это уже другая запись Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: k291 от 28 Апреля 2018, 01:47:56 Большое спасибо! Помогло.
Ниже напиши инструкцию. Надо бы ее в wiki добавить. ________________________________________________________________________________________ Репликация Master-Slave с учетом постоянно активных таблиц auth_now и auth_log. -"это нужно для того что бы от reset master; и до UNLOCK TABLES; не производилось никаких записей в мастер": ДЕЛАЕМ на МАСТЕР: Шаг 1: Включаем репликацию на центральном сервере(Master): Код: nano /etc/mysql/mysql.conf.d/mysqld.cnf Цитировать server-id = 1 - цифра должна быть уникальной. На мастере 1, на слейве 2 и т.д. log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = nodeny - указываем БД резерва.можно за комментировать, чтобы резервировать все базы binlog_do_db = example1 - указываем БД1 резерва.можно за комментировать, чтобы резервировать все базы bind-address = 217.10.20.1- надо указывать адрес внешнего интерфейса, инача не откроется порт наружу(в интернет) Код: /etc/init.d/mysql restart Шаг 2: Права на репликацию Далее необходимо создать профиль пользователя, из под которого будет происходить репликация. Для этого запускаем консоль: Код: mysql -u root --password='hardpass' Далее создаем и назначаем права пользователю для реплики: Код: GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password'; Перезагружаем Мастер БД: Код: reset master; Блокируем изменения в БД: Код: USE nodeny; Смотрим статус Мастера: Код: SHOW MASTER STATUS; Шаг 3: Дамп базы Заходим через другую консоль, делаем дамп БД архивируем: По умолчанию переносится только таблица и структура, для переноса процедур и тригеров надо добавить -R Код: cd /var/backups && ДЕЛАЕМ на СЛЕЙВ: Шаг 4. Настройка Слейва Код: nano /etc/mysql/mysql.conf.d/mysqld.cnf Цитировать server-id = 2 - цыфра должна быть уникальной. На местере 1, на слейве 2 и т.д. log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = nodeny - указываем БД резерва.можно за комментировать, чтобы резервировать все базы binlog_do_db = example1 - указываем БД1 резерва.можно за комментировать, чтобы резервировать все базы Шаг 5: Качаем БД с мастера на слейв и разархивируем: Код: wget my-sayt.net/htdocs/nodenyBD_280418.tar.gz && Шаг 5.1: Создание базы на слейве В консоли mysql на Слейве создаем базу с таким же именем, как и на Мастере: Код: mysql -u root --password='hardpass' После этого загружаем дамп (из bash): Код: mysql -u root --password='hardpass' nodeny < nodeny.sql Шаг 6. Запуск Слейва Код: mysql -u root --password='hardpass' Включаем репликацию на Слейв, указать параметры подключения к мастеру. В консоли mysql на Слейве необходимо выполнить запрос: Код: CHANGE MASTER TO MASTER_HOST='217.10.20.1',MASTER_USER='slave_user', MASTER_PASSWORD='password'; После этого запускаем репликацию на Слейве: Код: START SLAVE; Осталось: Возвращаемся в консоль mysql на Мастер: Разблокируем БД: Код: UNLOCK TABLES; ______________________________________________________________________ Пометки: START SLAVE; - запуск слейва STOP SLAVE; - если надо остановить SHOW SLAVE STATUS\G - статус репликации # Должны быть значения Yes в: # Slave_IO_Running: Yes # Slave_SQL_Running: Yes иначе смотри какая ошибка. Ошибку можно пропустить, но лучше этого не делать: mysql> STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=25037950; START SLAVE; Где 25037950 номер ошибки. Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: Redmen от 28 Апреля 2018, 14:02:24 bind-address = 217.10.20.1- надо указывать адрес внешнего интерфейса, иначе не откроется порт наружу(в интернет) кроме того нужно проверить параметр skip-networking и закоментировать при наличии bind-address = 0.0.0.0 // так откроются для любого внешнего адреса а сам доступ к базе ограничить правами юзеров, тогда можно организовать схему мастер - мульти-слейв(мастер) а так инструкция хорошая Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: k291 от 01 Мая 2018, 11:29:00 ради теста, выключил mysql на слейве на 20минут. При запуске получил ошибки:
Цитировать Last_SQL_Error: Could not execute Write_rows event on table nodeny.pays; Duplicate entry '25089' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000008, end_log_pos 78911415 Цитировать Last_SQL_Error: Could not execute Update_rows event on table nodeny.auth_now; Can't find record in 'auth_now', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000001, end_log_pos 11512 Я предполагаю, что будут вечные проблемы с таблицами подобной auth_now. Как вы решили данную проблему? Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: Redmen от 04 Мая 2018, 08:12:44 у нас нет такой проблемы.
Название: Re: Ubuntu(БД репликация Master-Slave)+radius+Mikrotik - database query error Отправлено: k291 от 05 Июня 2018, 10:30:47 Периодически выскакивает ошибка:
Цитировать Last_Errno: 1051 Из за этого, останавливается репликация.Last_Error: Error 'Unknown table 'nodeny.X2018_3_22'' on query. Default database: 'nodeny'. Query: 'DROP TABLE `X2018_3_22` /* generated by server */' Решение: Чтобы автоматически пропускать ошибки, делаем: nano /etc/mysql/mysql.conf.d/mysqld.cnf в секцию [mysqldump] slave-skip-errors=1062,1032,1051 1032 - 1051 - отсутствует таблица 1062 - Такая ошибка в Mysql происходит по причине того, что на реплике уже существует запись, которая пришла с мастера. Перезагружаем mysql |