SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.10.2008 11:56:28

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Аудит в MySQL

Необходимо отслеживать все изменения в структуре базы данных, желательно средствами mysql. В идеале писать скрипт чтобы применив его можно было откатиться в первоначальный вариант. Если встроенными средствами нельзя, то как это можно реализовать?

Спасибо.

Неактивен

 

#2 28.10.2008 21:59:36

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Аудит в MySQL

Встроенных средств нет. Есть варианты:
1. триггеры before update, before delete на кажой таблице и в дополнение поле lastmodified типа TIMESTAMP. Триггеры должны сохранять старую строчку в архивную таблицу.

2. binary log, но чтобы откатиться нужно восстановить бэкап и выполнить бинлог до заданного момента времени

Неактивен

 

#3 17.11.2008 13:17:26

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Аудит в MySQL

Насчет первого варианта:

нашел такое решение.

Что скажете?

Неактивен

 

#4 17.11.2008 13:19:51

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Аудит в MySQL

Fader написал:

нашел такое решение.

Что скажете?

Нормальное решение. Так как код небольшой, то можно будет и поправить при необходимости.

Неактивен

 

#5 17.11.2008 13:27:48

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Аудит в MySQL

Немного смущает что в заголовке проскакивает "Transaction". Подходит ли это решение для MyISAM?
И как это все скажется на производительности? Продакшен всетки...

Отредактированно Fader (17.11.2008 13:28:23)

Неактивен

 

#6 17.11.2008 13:37:45

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Аудит в MySQL

Не проверял, но по идее должно работать для MyISAM.

На производительности скажется самым прямым образом - фактически число операций на изменение данных удваивается.

Неактивен

 

#7 17.11.2008 17:41:40

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Аудит в MySQL

А что за CREATE OR REPLACE ? Первый раз вижу.
Это с какой версии?

Неактивен

 

#8 17.11.2008 18:09:08

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Аудит в MySQL

Похоже вместо OR REPLACE нужно писать ключевое слово TRIGGER  smile

Неактивен

 

#9 18.11.2008 12:11:03

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Аудит в MySQL

При попытке выполнить:


-- MySQL
CREATE PROCEDURE `add_tblAudit`(IN pUserId VARCHAR(50), IN pTableName VARCHAR(50), IN pFieldName VARCHAR(50), IN pOldValue LONGTEXT, IN pNewValue LONGTEXT)
BEGIN
INSERT INTO `tblAudit` (`UserName`, `TableName`, `FieldName`, `OldValue`, `NewValue`)
VALUES (pUserName, pTableName, pFieldName, pOldValue, pNewValue);
RETURN LAST_INSERT_ID() AS `AuditId`;
END;$$
 


Получаю ошибку:
RETURN is only allowed in a FUNCTION

не заменять же PROCEDURE -> FUNCTION smile

Подскажите как поправить корректно

Отредактированно Fader (18.11.2008 12:19:50)

Неактивен

 

#10 18.11.2008 12:20:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Аудит в MySQL

Потому, что ключевое слово RETURN допустимо только в функциях.

Напишите SELECT вместо RETURN.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson