パイソン。 MySQL データベースの作成バックアップを自動化します。

王林
リリース: 2024-07-18 21:53:21
オリジナル
1103 人が閲覧しました

Python. Automating creation backups of MySQL database.

このスクリプトは、MySQL データベースのバックアップの作成、復元、宛先 MySQL サーバーでのデータベースとユーザーの作成の管理を自動化します。

import subprocess
import datetime
import sys
import os

def check_and_create_database(host, port, username, password, database):
    # Command to check if the database exists
    check_database_command = f"mysql -sN --host={host} --port={port} --user={username} --password={password} -e \"SELECT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '{database}')\" 2>/dev/null"

    # Execute the command
    output = subprocess.check_output(check_database_command, shell=True)

    # If the output contains b'1', the database exists
    if b'1' in output:
        subprocess.run(check_database_command, shell=True, check=True)
        print(f"Database '{database}' already exists.")
        sys.exit(1)
    else:
        # If the command fails, the database does not exist
        print(f"Database '{database}' does not exist. Creating...")

        # Command to create the database
        create_database_command = f"mysql --host={host} --port={port} --user={username} --password={password} -e 'CREATE DATABASE {database}' 2>/dev/null"
        subprocess.run(create_database_command, shell=True)

def check_and_create_user(host, port, username, password, database, new_username, new_password):
    # Command to check if the user exists
    check_user_command = f"mysql -sN --host={host} --port={port} --user={username} --password={password} -e \"SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '{new_username}')\" 2>/dev/null"

    # Execute the command
    output = subprocess.check_output(check_user_command, shell=True)

    # If the output contains b'1', the user exists
    if b'1' in output:
        print(f"User '{new_username}' already exists.")
        sys.exit(1)
    else:
        # The user does not exist, create it
        print(f"User '{new_username}' does not exist. Creating...")

        # Command to create the user and grant privileges
        create_user_command = f"mysql --host={host} --port={port} --user={username} --password={password} -e \"CREATE USER '{new_username}'@'%' IDENTIFIED BY '{new_password}'; GRANT ALL PRIVILEGES ON {database}.* TO '{new_username}'@'%'; FLUSH PRIVILEGES;\" 2>/dev/null"
        subprocess.run(create_user_command, shell=True)

def backup_mysql_database(host, port, username, password, database, backup_path):

    # Check if the backup directory exists
    if not os.path.exists(backup_path):
        print(f"Error: Backup directory '{backup_path}' does not exist.")
        sys.exit(1)

    # Create a filename for the backup with the current date and time
    timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    backup_file = f"{backup_path}/{database}_{timestamp}.sql"

    # Command to create a database backup using mysqldump
    dump_command = f"mysqldump --no-tablespaces --host={host} --port={port} --user={username} --password={password} {database} > {backup_file} 2>/dev/null"

    # Execute the mysqldump command
    subprocess.run(dump_command, shell=True)

    return backup_file

def restore_mysql_database(host, port, username, password, database, backup_file):
    # Command to restore a database from a backup using mysql
    restore_command = f"mysql --host={host} --port={port} --user={username} --password={password} {database} < {backup_file} 2>/dev/null"

    # Execute the mysql command
    subprocess.run(restore_command, shell=True)

def main():
    # Connection parameters to the source MySQL database
    source_host = "127.0.0.1"
    source_port = "3309"
    source_username = "my_user"
    source_password = "my_password"
    source_database = "my_database"

    # Connection parameters to the target MySQL database
    target_host = "127.0.0.1"
    target_port = "3309"
    new_username = "new_username"
    new_password = "new_password"
    target_database = "my_database_two"

    target_username = "root"
    target_password = "root_password"

    # Path to save the backup locally
    backup_path = "my_dbs_dumps"

    # Check if source_database is different from target_database
    if source_database == target_database:
        print("Error: Source database should be different from target database.")
        sys.exit(1)

    # Check and create the target database if it does not exist
    check_and_create_database(target_host, target_port, target_username, target_password, target_database)

    # Check and create the target user if it does not exist
    check_and_create_user(target_host, target_port, target_username, target_password, target_database, new_username, new_password)

    # Create a backup of the MySQL database
    backup_file = backup_mysql_database(source_host, source_port, source_username, source_password, source_database, backup_path)
    print(f"Database backup created: {backup_file}")

    # Restore the database on the target server from the backup
    restore_mysql_database(target_host, target_port, target_username, target_password, target_database, backup_file)
    print("Database backup restored on the target server.")

if __name__ == "__main__":
    main()
ログイン後にコピー

データベースの確認と作成:
この関数は、MySQL サーバー上にデータベースが存在するかどうかを確認します。データベースが存在しない場合は、データベースが作成されます。確認または作成するには、ホスト、ポート、ユーザー名、パスワード、データベース名などのパラメーターが必要です。

check_and_create_user:
データベース関数と同様に、この関数は MySQL サーバー上にユーザーが存在するかどうかを確認します。ユーザーが存在しない場合は、ユーザーを作成し、特定のデータベースに権限を付与します。また、ホスト、ポート、ユーザー名、パスワード、データベース名、新しいユーザー名、新しいパスワードなどのパラメーターも受け取ります。

backup_mysql_database:
この関数は、mysqldump を使用して MySQL データベースのバックアップを実行します。ホスト、ポート、ユーザー名、パスワード、データベース名、バックアップ ファイルを保存するパスなどのパラメーターを受け取ります。

restore_mysql_database:
この機能は、バックアップ ファイルから MySQL データベースを復元します。ホスト、ポート、ユーザー名、パスワード、データベース名、バックアップ ファイルへのパスなどのパラメーターを受け取ります。

メイン:
これがスクリプトの主な機能です。接続の詳細、データベース名、バックアップ パスなど、ソースおよびターゲットの MySQL データベースのパラメータを設定します。次に、ソース データベースとターゲット データベースが異なることを確認するチェックを実行し、ターゲット データベースとユーザーが存在しない場合は作成し、ソース データベースのバックアップを作成し、最後にバックアップをターゲット データベースに復元します。

さらに、スクリプトはサブプロセス モジュールを使用して MySQL 操作用のシェル コマンド (mysql、mysqldump) を実行し、エラー処理と出力リダイレクト (2>/dev/null) を実行して不要な出力を抑制します。

MySQL データベースを使用していて自動化を作成したい場合は、このコードが役に立ちます。

このコードは、MySQL データベースを管理するための自動化スクリプトを作成するための優れた開始テンプレートを表します。

dmi@dmi-laptop:~/my_python$ python3 mysql_backup_restore.py 
Database 'my_database_two' does not exist. Creating...
User 'new_username' does not exist. Creating...
Database backup created: my_dbs_dumps/my_database_2024-05-13_20-05-24.sql
Database backup restored on the target server.
dmi@dmi-laptop:~/my_python$ 
ログイン後にコピー

ask_dima@yahoo.com

以上がパイソン。 MySQL データベースの作成バックアップを自動化します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート