fix: DB接続を事前に行い、エラーを抑制
This commit is contained in:
parent
b480424354
commit
0c00074380
@ -17,7 +17,7 @@ def exec():
|
||||
# 事前処理(共通処理としては空振りする)
|
||||
_pre_exec()
|
||||
|
||||
#メイン処理
|
||||
# メイン処理
|
||||
# MySQL接続情報を作成する
|
||||
my_cnf_file_content = f"""
|
||||
[client]
|
||||
@ -34,23 +34,40 @@ def exec():
|
||||
|
||||
os.chmod(my_cnf_path, 0o444)
|
||||
|
||||
# DBへの接続エラーを早期に検出するため、事前にMySQLサーバーに接続
|
||||
mysql_pre_process = subprocess.Popen(
|
||||
['mysql', f'--defaults-file={my_cnf_path}', '-P', f"{environment.DB_PORT}",
|
||||
environment.DB_SCHEMA, '-N', '-e', 'SELECT 1;'],
|
||||
stderr=subprocess.PIPE
|
||||
)
|
||||
|
||||
_, error = mysql_pre_process.communicate()
|
||||
if mysql_pre_process.returncode != 0:
|
||||
logger.error(
|
||||
f'MySQLサーバーへの接続に失敗しました。{"" if error is None else error.decode("utf-8")}')
|
||||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||||
|
||||
# 復元対象のダンプファイルを特定
|
||||
s3_file_path = environment.DUMP_FILE_S3_PATH
|
||||
|
||||
# aws s3 cpコマンドを実行してdumpファイルをローカルにダウンロードする
|
||||
s3_cp_process = subprocess.Popen(['aws', 's3', 'cp', s3_file_path, './dump.gz'], stderr=subprocess.PIPE)
|
||||
s3_cp_process = subprocess.Popen(
|
||||
['aws', 's3', 'cp', s3_file_path, './dump.gz'], stderr=subprocess.PIPE)
|
||||
_, error = s3_cp_process.communicate()
|
||||
if s3_cp_process.returncode != 0:
|
||||
logger.error(f'`aws s3 cp`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
|
||||
logger.error(
|
||||
f'`aws s3 cp`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
|
||||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||||
# S3コマンドの標準エラーはクローズしておく
|
||||
s3_cp_process.stderr.close()
|
||||
|
||||
# gzipコマンドを実行してdumpファイルを解凍する
|
||||
gzip_process = subprocess.Popen(['gunzip', '-c', './dump.gz'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
gzip_process = subprocess.Popen(
|
||||
['gunzip', '-c', './dump.gz'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
# mysqlコマンドを実行し、dumpを復元する
|
||||
mysql_process = subprocess.Popen(
|
||||
['mysql', f'--defaults-file={my_cnf_path}', '-P', f"{environment.DB_PORT}", environment.DB_SCHEMA],
|
||||
['mysql', f'--defaults-file={my_cnf_path}', '-P',
|
||||
f"{environment.DB_PORT}", environment.DB_SCHEMA],
|
||||
stdin=gzip_process.stdout, stderr=subprocess.PIPE
|
||||
)
|
||||
# gzipの標準出力をmysqlに接続したため、標準出力をクローズする
|
||||
@ -58,9 +75,10 @@ def exec():
|
||||
|
||||
_, error = mysql_process.communicate()
|
||||
if mysql_process.returncode != 0:
|
||||
logger.error(f'コマンド実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
|
||||
logger.error(
|
||||
f'コマンド実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
|
||||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||||
|
||||
|
||||
# 事後処理(共通処理としては空振りする)
|
||||
_post_exec()
|
||||
|
||||
@ -70,19 +88,21 @@ def exec():
|
||||
except Exception as e:
|
||||
logger.exception(f'ダンプ復元スクリプト中に想定外のエラーが発生しました :{e}')
|
||||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||||
|
||||
|
||||
|
||||
def _pre_exec():
|
||||
"""
|
||||
ダンプ復元 事前処理
|
||||
共通機能としては事前処理を実装しない。
|
||||
共通機能としては事前処理を実装しない。
|
||||
事前処理が必要なダンプ復元処理を実装する場合、当ロジックをコピーする。
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
def _post_exec():
|
||||
"""
|
||||
ダンプ復元 事後処理
|
||||
共通機能としては事後処理を実装しない。
|
||||
共通機能としては事後処理を実装しない。
|
||||
事後処理が必要なダンプ復元処理を実装する場合、当ロジックをコピーする。
|
||||
"""
|
||||
pass
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user