昨日、MySQL データベースへの適度に複雑なテーブルの挿入を実行するシェル スクリプトに取り組んでいました。当然のことながら、コマンドを実行したり、サンプル クエリを実行したり、テスト サイクル間でテスト行を削除したりするために、mysql
クライアント シェル ウィンドウを開いたままにしていました。describe
はい、これはライブの本番データベース上にありました。
コーディングが完了した時点で、スクリプトを実行してバッチ エントリを処理する前に、同僚に自分の作業を確認するように依頼しました。私たちはすべてを検討し、彼はそれが彼にとって正しいように見えることに同意し、私はスクリプトを開始しました. 問題ない。
次に、ライブ シェルに戻り、履歴から 1 行を取り出し、where
句を変更して結果の挿入を確認し、[Enter]を押しました...
...残念ながら、編集中のコマンド全体を見ていませんでした! delete
ではなく、ステートメントでしたselect
。
おっと。
わかりました。別の DBMS サーバーをセットアップし、この DB のダンプをそこに復元して、そこですべてのテストを行うことができたはずです。これがより安全で、より規律あるものだったことは誰もが知っています。また、ライブストアで作業する方が便利な場合があることもわかっています。(この場合、リスクは予想よりもやや低くなります...問題のDBはバッチ処理に使用され、わずか20分経過したバックアップから10分以内に復元できましたdelete
)。
ただし、これは疑問を思い起こさせます:mysql
クライアント シェルに読み取り専用にするオプション (またはパッチ) はありますか? インタラクティブ履歴に保存するものを変更するオプションはありますか? (同様に「危険な」ステートメントを「再実行する前に確認を求めるプロンプト」としてマークする何か?delete
クライアントには機能に似たものがありますか?drop table
mysql
bash
HISTIGNORE
この種の作業を行うためのより安全な方法は何ですか (DB の完全に別の開発用コピーで作業する以外に)?