【发布时间】:2009-10-07 18:25:40
【问题描述】:
昨天我正在编写一个 shell 脚本来执行一些中等复杂的表插入到 MySQL 数据库。自然地,我打开了一个 mysql 客户端 shell 窗口以运行 describe 命令、示例查询以及在测试周期之间删除我的测试行。
是的,这是在实时生产数据库中。
在我完成编码时,我请一位同事在运行脚本来处理批处理条目之前检查我的工作。我们审查了所有内容,他同意这对他来说是正确的,然后我取消了剧本。没问题。
然后我回到我的 live shell,从历史记录中拉出一行,更改 where 子句以查看生成的插入,然后点击 [Enter] ...
...不幸的是,我没有查看我正在编辑的整个命令!这是一个delete 声明而不是select。
哎呀。
好的,所以我知道我可以设置一个不同的 DBMS 服务器,将此 DB 的转储恢复到该服务器并在其上完成所有测试。我们都知道,这样会更安全、更有纪律。我们也都知道,有时在现场商店工作更方便。 (在这种情况下,风险比您预期的要低一些……有问题的数据库用于批处理,我们能够在delete 的 10 分钟内从仅 20 分钟的备份中恢复)。
然而,这让我想到了一个问题:mysql 客户端 shell 是否有一些选项(或一些补丁)可以使其只读?是否有一些选项可以修改它在交互历史中存储的内容? (将delete 和drop table 标记为“危险”语句的东西会标记为“在重新执行之前提示验证?”mysql 客户端是否具有类似于bashHISTIGNORE 功能的东西?
什么是做这种工作的更安全的方法(没有开发完全独立的数据库副本)?
【问题讨论】:
标签: mysql workflow mysql-management