Вчера я работал над сценарием оболочки для выполнения некоторых довольно сложных операций вставки таблиц в базу данных MySQL. Естественно, я оставлял окно mysql
клиентской оболочки открытым для запуска describe
команд, примеров запросов и удаления строк теста между циклами тестирования.
Да, это было в рабочей производственной базе данных.
В тот момент, когда я закончил с моим кодированием, я попросил коллегу просмотреть мою работу перед запуском сценария для обработки записей партии. Мы просмотрели все, он согласился, что это выглядело правильно, и я запустил сценарий. Нет проблем.
Затем я вернулся к своей живой оболочке, вытащил строку из истории, изменил предложение where
, чтобы посмотреть на полученные вставки, и нажал [Enter] ...
... к сожалению, я не посмотрел всю команду, которую редактировал! Это было delete
утверждение, а не select
.
по электронной почте Ой.
Хорошо, я знаю, что мог бы установить другой сервер СУБД, восстановить для него дамп этой БД и провести на нем все свои испытания. Все мы знаем, что это было бы безопаснее и дисциплинированнее. Мы также все знаем, что иногда целесообразнее работать в реальном магазине. (В этом случае риски несколько ниже, чем вы могли бы ожидать ... рассматриваемая БД используется для пакетной обработки, и мы смогли восстановить из резервной копии, которая была всего лишь 20 минут, в течение 10 минут после delete
).
Однако возникает вопрос: есть ли какая-либо опция (или какой-либо патч) для клиентской оболочки mysql
, которая будет доступна только для чтения? Есть ли возможность изменить то, что он хранит в своей интерактивной истории? (Что-то, что помечало бы delete
и drop table
и аналогично «опасные» операторы как «запрашивать подтверждение перед повторным выполнением?». Имеет ли клиент mysql
нечто похожее на функцию bash
HISTIGNORE
?
Что является более безопасным способом выполнить такую работу (если не работать над совершенно отдельной пробной копией БД)?