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