sql >> データベース >  >> RDS >> Mysql

LinuxのコマンドラインからMySQLデータベースをバックアップする方法

    生活のあらゆる側面の現在の技術的進化により、データは金や銀よりも貴重になっています。データを取得、拡大、保護できれば、データの神になることから一歩離れることができます。それでも、eコマース、燃料、輸送、食品業界などの生活面を管理する大企業は、避けられない崩壊から身を守るためにデータ保護に依存しています。

    今のところ、データを失うことは生命保険を失うことに似ています。したがって、使用しているデータベース管理システムはバックアップ指向である必要があります。 MySQL管理者または増大するデータを扱うユーザーの場合は、頻繁なバックアップ自動化計画の実装を検討する必要があります。理由?データハッキングの被害者になったり、誤ってデータを変更したりする可能性があります。

    このような状況は、特にデータベースのバックアップ計画がない場合に、容赦のないデータ侵害につながる可能性があります。投資したMySQLユーザーまたは管理者の場合、この記事はデータベースのバックアップの問題を解決するためにここにあります。 2つの目標を達成します。まず、「mysqldump」を介したデータベースのエクスポートの実装について理解します。最後に、「crontab」を使用すると、自動化によってこのプロセス全体がどのように簡単になるかについて説明します。

    データバックアップディレクトリを準備する

    LinuxはMySQLデータのバックアップ先をユーザーに推奨しないため、適切なバックアップ場所を選択するのはあなた次第です。たとえば、このチュートリアルガイドでは、「/ var /www_my_backups/」のバックアップディレクトリで作業します。 MySQLデータバックアップメカニズムを理解するために、このアプローチのみを検討しています。理想的には、すべての重要なデータのバックアップをオフサイドサーバーで実行することをお勧めします。

    次のようなターミナルコマンドを使用して、ローカルマシンに優先バックアップディレクトリを作成できます。

     $ sudo mkdir / var / www_my_backups / 

    使用しているLinuxで動作するバックアップマシンに、rootアクセスまたはsudo権限が付与されていることを確認してください。作成したバックアップディレクトリへの所有者アクセス権がない場合、mysqldumpテストの実行中にアクセス許可エラーが発生します。次のコマンドは、現在アクティブなシステムユーザーと、作成されたバックアップフォルダの所有権を持っている場合の詳細を一覧表示する必要があります。

     $ sudo chown $(whoami):$(whoami)/ var / www_my_backups / 

    mysqldumpクライアントユーティリティ

    このMySQLツールは論理バックアップを実行します。その結果、いくつかのSQLステートメントセットが作成され、実行時に元のデータベーステーブルデータとオブジェクト定義が再作成されます。さらに、1つまたは複数のMySQLデータベースダンプがバックアップされるか、セカンダリSQLデータベースサーバーに転送されます。

    標準のmysqldumpコマンドは、次のコマンド構文で表されます。

     $ mysqldump -u [mysql_username] -p [mysql_password] [mysql_database_name]> /path/to/[mysql_dump_file_name].sql 
    • -u [mysql_username]: MySQLデータベースの特権ユーザーを表します。このユーザーは、データベースダンプ操作を実行できる必要があります。
    • -p [mysql_password]: MySQLデータベースのユーザーパスワードを表します。 「-p」と「[mysql_password]」の間にスペースを追加しないでください。
    • [mysql_dump_file_name]: MySQLデータベースの名前を表します。
    • >: 出力ダンプの宛先を指します
    • /path/to/[mysql_dump_file_name].sql: 関連するダンプファイルのパスの場所を指します。必要に応じて、このダンプファイル[mysql_dump_file_name]にカスタム名を付けることができます。

    このチュートリアルガイドに進む前に、「-p[mysql_password]」について言及する価値のあることがあります。この記事ガイドでは、その使用法をいくつかのMySQLダンプの例に関連付けることに焦点を当てていますが、特に共有ネットワークで実際のMySQLバックアップダンプを処理する場合は、直接使用しないでください。

    実行中のダンプは、「ps ax」などの二次元コマンドでハイジャックされ、関連するデータベースのユーザー名とパスワードが明らかになります。ただし、場所「〜/ .my.cnf」を使用してMySQLデータベースのパスワードを保存すると、指定されたダンプコマンドで「-p[mysql_password]」を使用する必要がなくなります。このダンプコマンドがcronジョブを介して実行されている場合、コマンドオプション「–defaults-extra-file =/ path / to / .my.cnf」は、mysqldumpコマンドがデータベースパスワードの場所を指すようにする必要があります。

    いくつかのMySQLデータベースのバックアップ例

    mysqldumpコマンドを使用してMySQLデータベースデータをバックアップできるいくつかのユーザーシナリオを考えてみましょう。

    すべてのデータベースのバックアップ

    mysqldumpコマンドでコマンドオプション「–all-databases」を使用すると、Linuxシステム上のすべてのMySQLデータベースダンプが処理されます。たとえば、次のコマンドは、すべてのMySQLデータベースを既存の「/ var /www_my_backups/」ファイルにダンプする方法を示しています。このLinuxシステムのユーザーは、rootであるか、sudo特権を持っている必要があります。

    私たちの場合、そしてあなたの理解のために、私たちはダンプファイルに「all-databases.sql」という名前を付けましたが、あなたはあなたの好みの他の名前を使うことができます。すべてのデータベースを扱っているため、ルートMySQLアカウントユーザーである必要があります。

     $ mysqldump -u root -p [mysql_password] --all-databases> /var/www_my_backups/all-databases.sql 

    1つのデータベースのバックアップ

    重要なMySQLデータベースが1つだけの場合、mysqldumpコマンドを使用してバックアップを作成するには、「[mysql_database]」コマンドオプションを実際の名前に置き換える必要があります。ダンプファイル名は、このデータベースの名前「[mysql_database] .sql」をとることができるため、後でトレースして復元するのが簡単になります。必要に応じて、別のカスタムダンプファイル名を使用することもできます。

    このコマンド例はrootユーザーを使用して実装されていますが、対象のデータベースにアクセスできる他のユーザーは実行可能なオプションです。

     $ mysqldump -u root -p [mysql_password] [mysql_database_name]> /var/www_my_backups/[mysql_database_name].sql 

    複数のデータベースのバックアップ

    たぶんあなたはあなたがバックアップしたい特定のMySQLデータベースの選択を持っています。この場合、「[mysql_database_name]」コマンドオプションが複数回表示され、それぞれのケースがバックアップするデータベースの名前に関連付けられます。 mysqldumpコマンドでこれらのデータベースの名前の間隔を空けることを忘れないでください。ダンプファイル「[mysql_database_name].sql」も、覚えやすい一意の名前に関連付ける必要があります。

     $ mysqldump -u root -p [mysql_password] [mysql_database_1_name] [mysql_database_2_name]> /var/www_my_backups/ [mysql_databases_1_2_names] .sql 

    単一のテーブルのバックアップ

    バックアップルーチンが特定のデータベーステーブルの後にのみある場合、そのバックアップを作成するには、mysqldumpコマンドのコマンドオプションとしてデータベース名とデータベーステーブル名の両方を含める必要があります。ダンプファイルには、ターゲットデータベーステーブルと同じ名前を付けることができます。 [mysql_database_table_name].sql。

     $ mysqldump -u root -p [mysql_password] [mysql_database_name] [mysql_database_table_name]> /var/www_my_backups/ [mysql_databases_table_name] .sql 

    複数のテーブルのバックアップ

    多くの特定のMySQLデータベーステーブルをバックアップする場合は、選択したすべてのデータベーステーブル名を、これらのテーブルをホストするデータベース名の後に記載する必要があります。ターゲットのダンプファイルは、[mysql_database_tables_1_2_names] .sql

    のような名前をとることができます。
     $ mysqldump -u root -p [mysql_password] [mysql_database_name] [mysql_database_table_1_name] [mysql_database_table_2_name]> /var/www_my_backups/[mysql_databases_tables_1_2_names].sql 

    リモートデータベースのバックアップ

    この実装例も簡単です。 MySQLデータベースダンプコマンドには、「-h」コマンドオプションの後にリモートマシンのホスト名または関連するIPアドレスを含める必要があります。その後、他のすべての通常のデータベースバックアップコマンド構文に従う必要があります。

     $ mysqldump -h [remote_computer_ip_or_hostname] -u root -p [mysql_password] [mysql_database_name]> /var/www_my_backups/ [remote_mysql_database_name] .sql 

    このmysqldumpコマンドを調整して、すでに説明した他のデータベースバックアップのケース(複数のデータベースまたはテーブルを使用したMySQLバックアップなど)を処理できます。

    圧縮に関連付けられたデータベースのバックアップ

    データバックアップを圧縮に関連付けたい場合は、「| gzip -c>” mysqldumpコマンドオプションを使用して、gzip出力をパイプできます。

     $ mysqldump -u root -p [mysql_password] [mysql_database_name] | gzip -c> /var/www_my_backups/[mysql_database_name].sql.gz 

    MySQLデータベースが巨大で、圧縮の進行状況を追跡したい場合は、次の例に示すように、常に冗長オプションの実装を検討してください。

     $ mysqldump -u root -p [mysql_password] [mysql_database_name] | gzip -c --verbose> /var/www_my_backups/[mysql_database_name].sql.gz 

    MySQLデータベースの復元

    MySQLデータベースのバックアップが完了したら、次は何をしますか?慎重に保護したデータにどのようにアクセスしますか?データを復元するには、次のMySQL復元構文に準拠する必要があります。

     $ mysql -u [mysql_username] -p [mysql_password] [mysql_database_name]  

    お気づきかもしれませんが、このデータベース復元コマンドとデータベースバックアップコマンドの唯一の違いは、「mysqldump」オプションの代わりに「mysql」オプションを使用し、「>」オプションの代わりに「<」オプションを使用することです。

    MySQLバックアップの自動化

    Linuxオペレーティングシステムには、MySQLRDBMSのようなデータベース管理者にとって貴重ないくつかの便利なサービスが装備されています。これらのサービスの1つはcronサービスです。自動化されたコマンドのスケジューリングに効果的です。これらのコマンドは、作成されると、crontabcronテーブルに割り当てられます。次のコマンドを使用してcrontabにアクセスできます。

     $ sudo crontab -e 

    プロンプトが表示された場合、このコマンドは、その実行をテキストエディターに関連付けて、nanoテキストエディターを選択することができます。

    「/tmp/crontab.LVY6A9/crontab」のような名前のファイルが開きます。このcrontabファイルの下部に、実行可能なcronスケジュールを適切なMySQLダンプコマンドと一緒に入力します。以下に示す例は、毎日のデータベースバックアップにgzip圧縮を使用することを実装しています。場合によっては、バックアップ用に大きな.sqlファイルがスケジュールされていることがあります。 gzipを使用すると、バックアップストレージの前にそのようなファイルが適切なサイズに縮小されます。バックアップメモリ​​の管理に役立ちます。

     00 03 * * * mysqldump -u root -p [mysql_password] [mysql_database_name] | gzip -c> /var/www_my_backups/[mysql_database_name].sql.gz 

    コマンドオプション「0003***」は、次のように解釈できます。午前3時から24時間ごとに、それに続くmysqldumpコマンドが実行されてデータベースがバックアップされます。このバックアッププロセスの開始前に現在存在していたデータベースバックアップファイルは上書きされます。あなたの場合、crontabを介してデータベースのバックアップ自動化が実行されているのを確認するために24時間後に待つ必要はありません。

    crontabファイルの「0003***」オプションを「0200***」のように編集すると、わずか2分でバックアッププロセスが自己初期化されます。または、時間が22:30の場合、「34 22 ***」でファイルを編集すると、22:34にデータベースのバックアッププロセスが初期化されます。このコマンドを実行可能にするために、このcrontabファイルを閉じる前に保存(Ctrl + X)することを忘れないでください。

    設定した分が経過すると、cronジョブが実行されます。次に、作成したバックアップフォルダを端末に一覧表示すると、作成した.sql.gzバックアップファイルが存在するはずです。

     $ ls -l / var / www_my_backups / 

    結果の出力は次のようになります。

     -rw-r--r-- 1 root root 36M Jul 29 22:24 [mysql_database_name] .sql.gz 

    .sql.gz MySQLバックアップファイルの検出に問題がある場合は、crontab時間またはコマンド全体を校正してください。構文エラーがあるか、何かが欠落している可能性があります。または、システムのcronログが問題のある場所を示している可能性があります。

     $ sudo grep CRON / var / log / syslog 

    すべてが正しく機能していることを確認したら、crontabエントリを希望のデータベーススケジュールにリセットすることを忘れないでください。

    my.cnfを使用してMySQLデータベースのパスワードを保存する

    特に共有ネットワークでのmysqldumpコマンドの「-p[mysql_password]」オプションの欠点についてはすでに説明しました。 「〜/.my.cnf」ファイルにパスワードストレージを実装する方法について説明する必要があります。 cronを使用してデータベースのバックアップを自動化するユーザーは、「– defaults-extra-file =/ path / to/.my.cnf」コマンドオプションの実装を理解する必要があります。

    my.cnfファイルの編集

    Linuxシステムのホームディレクトリには、この隠しファイルが含まれています。それへの直接のシステムパスは「/home/your_username/.my.cnf」です。 nanoテキストエディタを使用してこのファイルを開きます。 「〜」オプションはホームディレクトリを指します。

     $ sudo nano〜/ .my.cnf 

    次の構文に従ってこの開いているファイルを編集して、MySQLデータベースのパスワードを正常に保存します。 「YOUR_DB_PASS」の部分は、実際のデータベースパスワードで変更する必要がある唯一のエントリです。これらの情報の詳細をファイルの下部に入力して保存します。

     [mysqldump] 
    password =YOUR_DB_PASS

    Ctrl+Xを使用してこのファイルを保存します。この「my.cnf」ファイルにもいくつかの権限設定が必要です。次のコマンドを実装します:

     $ sudo chmod 600〜/ .my.cnf 

    次に、「-p[mysql_password]」コマンドオプションを削除した新しいmysqldumpコマンドの再現を確認します。

     $ mysqldump -u root [mysql_database_name] | gzip -c> /var/www_my_backups/[mysql_database_name].sql.gz 

    ご覧のとおり、何も追加していません。削除したのは「-p[mysql_password]」コマンドオプションだけのようです。

    Crontabおよび–defaults-extrs-file

    データベースのバックアップを自動化することを好むユーザーの場合、「–defaults-extra-file」コマンドオプションを使用して「〜/.my.cnf」ファイルのデータベースパスワードを取得する必要があります。このアプローチにより、データベースユーザーとパスワードの信頼性を参照する必要がある場合にmysqldumpコマンドを簡単に実行できます。 「〜」記号を使用するだけでなく、my.cnfファイルへのパスを具体的に指定する必要があります。 crontabファイル内の次の実装を検討してください。

     30 22 * * * mysqldump --defaults-extra-file =/ home / system_username / .my.cnf -u root [mysql_database_name] | gzip -c> /var/www_my_backups/[mysql_database_name].sql.gz 

    この例では、crontabは毎日22:30に実行され、MySQLデータベースのバックアップされたgzip圧縮を作成します。

    最後のメモ

    この記事では、「/ var/www_my_backups」バックアップディレクトリに関するローカルデータベースのバックアップメカニズムについて説明しました。バックアッププロセスがどのように行われるかを理解したので、規模を拡大してオフサイトバックアップについて考え始める必要があります。ただし、より実用的なアプローチは、この「/ var/www_my_backups」バックアップディレクトリを指すSFTPアクセス構成を使用することです。

    このような構成を行うと、リモートサーバーを介してSFTP cronジョブを作成し、これらのローカルに保存されたデータベースファイルのコピーを取得して、夜間および毎日の保険保管に使用できます。

    このすばらしい記事ガイドを締めくくると、MySQLデータベースのバックアップシナリオ、データベースのバックアップの復元、およびデータベースのバックアップの自動化をマスターできるようになります。これで、信頼を飛躍させ、cronジョブを使用してMySQLデータベースのバックアップ自動化をスケジュールおよび処理することに自信を持つ必要があります。自動化スケジュールは、毎週および毎月にすることもできるため、毎日である必要はありません。


    1. ネストされたループクエリを親配列の結果に結合します-pg-promise

    2. .sql postgresqlバックアップから単一のテーブルを復元するにはどうすればよいですか?

    3. SQLAlchemyと複数のプロセスとの接続の問題

    4. MICROSECOND()の例– MySQL