繁体   English   中英

MySQL 5.1 / phpMyAdmin - 记录CREATE / ALTER语句

[英]MySQL 5.1 / phpMyAdmin - logging CREATE/ALTER statements

是否可以通过phpMyAdmin记录在MySQL服务器上发出的CREATE / ALTER语句? 我听说它可以用触发器完成,但我似乎无法在任何地方找到合适的代码。 我想将这些语句记录到表中,最好使用发布时间的时间戳。 有人可以为我提供一个示例触发器,使我能够完成此任务吗?

我想记录这些语句,以便我可以轻松地将更改与另一个MySQL服务器同步。

有一个phpMyAdmin 补丁 ,它提供了可配置的日志记录,只有一些简单的代码修改。

我们在我的工作中做了这个,然后我进一步调整它以按日登录文件夹,记录IP地址和其他一些东西,它很有效。

感谢@Unreason的链接,我无法回想起我发现它的位置。

这是一个脚本,可以为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权限,然后您可以为该用户记录所有内容,而您不必担心详细信息(对于示例 - 代理识别以下服务器命令 ,其中仅检查查询)

安装代理是直截了当的,当你测试它时你可以运行它

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完全忽略了端口并通过套接字连接,这让我困惑了几分钟)

您的问题的答案将属于MySQL服务器日志中列出的一个

如果您只想获取CREATE / ALTER语句,我会使用常规查询日志 但是您必须手动解析文件。 请注意此方法引发的安全问题。

在您的方案中,复制似乎是一种矫枉过正。

触发器不是有效选项,因为它们仅在SELECT,UPDATE和INSERT级别支持,而不是ALTER / CREATE。

编辑1:

查询日志将是最佳选择,但正如您在繁忙的服务器上提到的那样,日志会导致相当大的效率损失。 我所知道的另一个替代方案是MySQL Proxy

我认为最好的办法是在这里查看存储过程和函数的使用,以便对数据库进行更改。 这样你可以看看手动记录数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM