Ошибки работы с БД

Замечания и пожелания по развитию ПО, а также вопросы эксплуатации
Правила форума
Здесь место для дискуссии о:
- замеченных недостатках в ПО PEGAS,
- пожеланиях по дальнейшему развитию АРМ и сервера.
- вопросах эксплуатации ПО PEGAS.
При "неожиданном завершении программы" просьба прикреплять к сообщению файл дампа сформированного программой.
fisher

Ошибки работы с БД

Непрочитанное сообщение fisher »

При попытке создания реплики (в соседнем форуме) предоставлял доступ к БД основного сервера. Ошибка на реплике заключалась в отсутсвии функции в базе.
Видимо это случайно произошло у Алексея (я в основной базе однозначно ничего не трогал, кроме снятия дампов), но сегодня я обнаружил такую же ошибку и на основном сервере, причём судя по логам ошибки начали идти после его вчерашнего вмешательства. Винить никого не собираюсь, но необходимо вернуть основной сервер в нормальную работу. Помогите пожалуйста. Пишу здесь. так как база smk30 "принадлежит" PEGAS, значит его разработчикам проще будет разобраться с ним.
Ошибки звучит примерно так:
SQL: error 1305('FUNCTION smk30.UPDCNTR does not exist') on query 'UPDATE `mdk_m1m_line` SET `upd_counter`=UPDCNTR() WHERE `domain_id`=10 AND `id`='D:10 A:4.8 T1:23.0 Inv:4809 T2:1.0''
Попытка добавить командой

Код: Выделить всё

CREATE FUNCTION  `smk30`.`UPDCNTR`() RETURNS bigint(20)
BEGIN
   DECLARE curr_max BIGINT;
   SELECT IFNULL(MAX(upd_counter), 0) + 1 INTO curr_max FROM `smk30`.`locals`;
   UPDATE `smk30`.`locals` SET upd_counter=curr_max;
   IF ROW_COUNT()=0 THEN INSERT INTO `smk30`.`locals` VALUES(curr_max);
   END IF;
   RETURN curr_max;
 END;
к успеху не привела. Точнее команда заканчивается ошибкой в синтаксисе.
mysql> CREATE FUNCTION `smk30`.`UPDCNTR`() RETURNS bigint(20)
-> BEGIN
-> DECLARE curr_max BIGINT;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '' at
line 3
Версия MySQL на основном сервере - рекомендованная вами
mysql> SELECT VERSION();
+-------------------------+
| VERSION() |
+-------------------------+
| 5.0.67-community-nt-log |
+-------------------------+
1 row in set (0.00 sec)
Доступ к базе предоставлю в личку.
fisher

Re: Ошибки работы с БД

Непрочитанное сообщение fisher »

При попытке инициализировать новую базу, конфигуратор так же "поперхнулся" на создании функции. Видимо с момента создания этой функции в синтаксисе MySQL что-то изменилось. Так что дамповые бекапы базы smk30 теперь бестолковы. :(
Кто решит созать новый серве тоже спотыкнутся...
Конфигуратор.PNG
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Шитов Алексей

Re: Ошибки работы с БД

Непрочитанное сообщение Шитов Алексей »

fisher писал(а):При попытке создания реплики (в соседнем форуме) предоставлял доступ к БД основного сервера.
На основной базе я ничего не правил, да и на slave не удалось.
Ситуация подробно описана на оф. сайте (http://dev.mysql.com/doc/refman/5.0/en/ ... gging.html). Т.к. UPDCNTR() вносит изменения в базу (увеличивает счётчик в таблице 'locals'), mysql считает её небезопасной со всеми вытекающими...
Предлагаемое решение - установить глобальную переменную log_bin_trust_function_creators в 1.
fisher

Re: Ошибки работы с БД

Непрочитанное сообщение fisher »

установил в ON
mysql> SHOW VARIABLES LIKE '%function%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON |
+---------------------------------+-------+
1 row in set (0.00 sec)
Не помогло :(
Правда ошибка теперь сменилась на 1307-ую.
Конфигуратор.PNG
UPD: Оппа... на 5.0.67 при создании БД (тестовую) ошибка не проявилась. Осталось только перенести на текущую...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
fisher

Re: Ошибки работы с БД

Непрочитанное сообщение fisher »

Фух... основной отремонтировал. Правда немного "через коленку", но зато заработало.
Спасибо.
Ещё бы "приручить" эту функцию к версии 5.1.хх .... чтобы реплику запустить, а то ведь она теперь споткнулась на этой функции :(

Кстати, конфигуратор не проверяет наличие данной функции в базе и говорит, что с базой всё ОК.

Собственно, тема закрыта.
Ответить