Mysql CLI - ジョブが失敗しても実行を続行

Mysql CLI - ジョブが失敗しても実行を続行

次のコードを検討してください。

    mysql -u root -p << MYSQL
        drop user '${test}'@'localhost';
        drop database ${test};

        create user '${test}'@'localhost' identified by '${psw}';
        create database ${test};
        GRANT ALL PRIVILEGES ON ${test}.* TO ${test}@localhost;
    MYSQL

最初のコマンドの場合、コードは次のエラーを出力しますdrop user '${test}'@'localhost';

エラー1396(HY000): "${test}"@"localhost"のDROP USER操作が失敗しました。


私の質問

このエラーが発生した場合に実行が中断されないように、プログラムがそれを無視するようにするにはどうすればよいですか。

たとえば、プログラムを次のように実行するにはどうすればよいですか?

「すでにユーザーがいる場合は${test}削除し、存在しない場合は新規作成してください。」

もちろん、データベースインスタンスを処理する2番目のdropコマンドにも同じ問題があります。

答え1

使用IF EXISTSお尻:

DROP USER IF EXISTS '${test}'@'localhost';

存在しないアカウントを削除しようとするとエラーが発生します。この句が指定されると、IF EXISTSステートメントは存在しない指定された各ユーザーに対してエラーではなく警告を生成します。

https://dev.mysql.com/doc/refman/5.7/en/drop-user.html

答え2

あなたもできますmysqlツールを強制的に使用するすべてのコマンドのエラーを無視します。

スクリプトの一部のステートメントでエラーが発生してもスクリプトを実行し続けるには、--forceコマンドラインオプションを使用する必要があります。

つまりmysql --force -u root -p << ...

関連情報