Биллинговая система Nodeny
26 Ноября 2024, 10:00:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: radius sql ошибка  (Прочитано 6866 раз)
Sidius
Постоялец
***

Карма: 0
Offline Offline

Сообщений: 130


Просмотр профиля
« : 06 Августа 2013, 22:46:03 »

Код:
rlm_sql (sql): Reserving sql socket id: 27
rlm_sql (sql): Released sql socket id: 31
Sending Accounting-Response of id 73 to 127.0.0.1 port 23746
rlm_sql_mysql: MYSQL check_error: 1213 received
rlm_sql (sql): Couldn't update SQL accounting ALIVE record - Deadlock found when trying to get lock; try restarting transaction
rlm_sql_mysql: MYSQL check_error: 1213 received
rlm_sql_mysql: Cannot store result
rlm_sql_mysql: MySQL error 'Deadlock found when trying to get lock; try restarting transaction'
rlm_sql (sql): Released sql socket id: 28
rlm_sql (sql): Released sql socket id: 30
Sending Accounting-Response of id 208 to 127.0.0.1 port 22213
rlm_sql (sql): Released sql socket id: 29
Sending Accounting-Response of id 115 to 127.0.0.1 port 31041
rlm_sql (sql): Released sql socket id: 27


Из-за чего это может происходить?

при этом в логе мпд выпадает
Код:
Aug  6 23:45:29 access mpd: [vlan41-202] RADIUS: rad_send_request for user 'bodya' failed: No valid RADIUS responses received
Aug  6 23:45:30 access mpd: [vlan39-129] RADIUS: rad_send_request for user 'zg-010' failed: No valid RADIUS responses received
Aug  6 23:45:30 access mpd: [vlan5-170] RADIUS: rad_send_request for user 'IVAN' failed: No valid RADIUS responses received

увеличение num_sql_socks в sql.conf радиус сервера эффекта не дает.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #1 : 06 Августа 2013, 23:59:29 »

Я думаю надо отталкиваться от Deadlock found when trying to get lock; try restarting transaction
Транзакции не менял?
Записан
Sidius
Постоялец
***

Карма: 0
Offline Offline

Сообщений: 130


Просмотр профиля
« Ответ #2 : 07 Августа 2013, 07:00:21 »

Ничего не менял. Походу это как-то связано с моим постом по-поводу мпд и разных ип у клиентов.
Записан
sever
Пользователь
**

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #3 : 26 Января 2017, 09:08:03 »

Периодически в логе радиуса вижу

Код:
Thu Jan 26 09:02:04 2017 : Error: rlm_sql_mysql: MySQL error 'Deadlock found when trying to get lock; try restarting transaction'
Thu Jan 26 09:02:04 2017 : Error: [sql] Couldn't update SQL accounting ALIVE record - Deadlock found when trying to get lock; try restarting transaction
Thu Jan 26 09:02:04 2017 : Error: rlm_sql_mysql: Cannot store result
Thu Jan 26 09:02:04 2017 : Error: rlm_sql_mysql: MySQL error 'Deadlock found when trying to get lock; try restarting transaction'
Thu Jan 26 09:02:04 2017 : Error: [sql] Couldn't update SQL accounting ALIVE record - Deadlock found when trying to get lock; try restarting transaction
Thu Jan 26 09:02:04 2017 : Error: rlm_sql_mysql: Cannot store result
Thu Jan 26 09:02:04 2017 : Error: rlm_sql_mysql: MySQL error 'Deadlock found when trying to get lock; try restarting transaction'
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #4 : 26 Января 2017, 09:40:44 »

Я уже писал, что проблема в функции get_ip - mysql не оптимизированно выполняет sql, надо помочь ему:

Код:
DROP FUNCTION IF EXISTS `get_ip`;
DELIMITER $$
CREATE FUNCTION `get_ip` ( user_id INTEGER UNSIGNED )  RETURNS VARCHAR(15) NO SQL
BEGIN
    DECLARE user_ip VARCHAR(15);
    DECLARE real_ip VARCHAR(15);

    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id AND type='static' LIMIT 1;
    IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF;

    UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 300
    WHERE id = (SELECT id FROM (
        (
          SELECT id, uid FROM ip_pool
          WHERE uid = 0 AND type = 'dynamic' AND realip = IF(real_ip>0,1,0)
          LIMIT 1
        ) UNION (
         SELECT id, uid FROM ip_pool
          WHERE uid = user_id AND type = 'dynamic' AND realip = IF(real_ip>0,1,0)
          LIMIT 1
        )
    ) AS tbl ORDER BY uid DESC LIMIT 1);

    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id LIMIT 1;
    RETURN user_ip;
END$$
DELIMITER ;
Записан
sever
Пользователь
**

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #5 : 26 Января 2017, 15:39:58 »

Код:
[quote author=Efendy link=topic=2308.msg30719#msg30719 date=1485416444]
Я уже писал, что проблема в функции get_ip - mysql не оптимизированно выполняет sql, надо помочь ему:


Спасибо, fixed.
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!