Вот скрипт, который будет делать то, что вы хотите для mysql-proxy (проверьте ссылку на официальный документ, как установить прокси).
Для регистрации запросов вы можете использовать что-то простое, например
function string.starts(String,Start)
return string.sub(String,1,string.len(Start))==Start
end
function read_query( packet )
if string.byte(packet) == proxy.COM_QUERY then
local query = string.lower(string.sub(packet, 2))
if string.starts(query, "alter") or string.starts(query, "create") then
-- give your logfile a name, absolute path worked for me
local log_file = '/var/log/mysql-proxy-ddl.log'
local fh = io.open(log_file, "a+")
fh:write( string.format("%s %6d -- %s \n",
os.date('%Y-%m-%d %H:%M:%S'),
proxy.connection.server["thread_id"],
query))
fh:flush()
end
end
end
Сценарий был принят с здесь , поиск по «простой регистрации».
Это не заботится о результатах - даже если запрос вернул ошибку, он был бы зарегистрирован (есть пример «более настраиваемой регистрации», который является лучшим кандидатом для ведения производственной регистрации).
Кроме того, вы можете использовать другой подход, если он применим для вас - определить разных пользователей в вашей базе данных и предоставить права DDL только определенному пользователю, тогда вы можете регистрировать все для этого пользователя, и вам не придется беспокоиться о подробности (например - прокси распознает следующие серверные команды , из которых он проверяет только Query)
Установка прокси проста, когда вы тестируете его, вы можете запустить его с помощью
mysql-proxy --proxy-lua-script=/path/to/script.lua
По умолчанию он работает на порту 4040, поэтому протестируйте его с
mysql -u user -p -h 127.0.0.1 -P 4040
(убедитесь, что вы не обходите прокси; например, в моем дистрибутиве mysql -u user -p -h localhost -P 4040
полностью проигнорировал порт и подключился через сокет, что оставило меня озадаченным на несколько минут)