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

OracleDBAのMySQLバックアップを実行および管理する方法

    Oracleデータベースからオープンソースへの移行には、多くの利点があります。所有コストの低下は魅力的であり、多くの企業が移行することを余儀なくされています。同時に、DevOps、SysOps、またはDBAは、ビジネスニーズに対応するために厳格なSLAを維持する必要があります。

    別のデータベース、特にオープンソースへのデータ移行を計画する際の重要な懸念事項の1つは、データの損失を回避する方法です。誰かが誤ってデータベースの一部を削除したり、誰かがDELETEクエリにWHERE句を含めるのを忘れたり、誤ってDROP TABLEを実行したりすることは、それほど遠くありません。問題は、そのような状況からどのように回復するかです。

    そのようなことが起こる可能性があり、起こる可能性があります。それは避けられませんが、その影響は悲惨なものになる可能性があります。誰かが言ったように、「バックアップが失敗するまで、それはすべて楽しくてゲームです」。最も価値のある資産を危険にさらすことはできません。期間。

    新しいテクノロジーに精通していない場合、未知への恐れは当然です。実際、Oracle Recovery Manager(RMAN)が提供するOracleデータベース・ソリューション、信頼性、および優れた機能に関する知識は、あなたやあなたのチームが新しいデータベース・システムに移行することを思いとどまらせる可能性があります。私たちは知っているものを使用するのが好きなので、現在のソリューションが機能するときに移行する理由。チームまたは個人が新しいテクノロジーについて確信していなかったために保留にされたプロジェクトの数を誰が知っていますか?

    論理バックアップ(exp / imp、expdp / impdb)

    MySQLのドキュメントによると、論理バックアップは「実際のデータファイルをコピーせずにテーブルの構造とデータを再現するバックアップ」です。この定義は、MySQLとOracleの両方の世界に適用できます。論理バックアップを使用する「理由」と「時期」も同じです。

    論理バックアップは、どのデータが変更されるかがわかっている場合に適したオプションであるため、必要な部分のみをバックアップできます。時間と複雑さの観点から、潜在的な復元を簡素化します。また、中小規模のデータセットの一部を移動して別のシステム(多くの場合、別のデータベースバージョン)にコピーして戻す必要がある場合にも非常に便利です。 Oracleは、expやexpdpなどのエクスポートユーティリティを使用してデータベースデータを読み取り、オペレーティングシステムレベルでファイルにエクスポートします。次に、インポートユーティリティimpまたはimpdpを使用して、データをデータベースにインポートして戻すことができます。

    Oracle Export Utilitiesには、エクスポートする必要のあるデータを選択するための多くのオプションがあります。 mysqlで同じ数の機能を見つけることは間違いありませんが、ほとんどのニーズはカバーされており、残りは追加のスクリプトまたは外部ツールで実行できます(mydumperを確認してください)。

    MySQLには、非常に基本的な機能を提供するツールのパッケージが付属しています。それらは、mysqldump、mysqlpump(並列化をネイティブにサポートする最新バージョンのmysqldump)、およびデータをフラットファイルに抽出するために使用できるMySQLクライアントです。

    以下に、それらの使用方法のいくつかの例を示します。

    データベース構造のみをバックアップ

    mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql

    バックアップテーブルの構造

    mysqldump --no-data --single- transaction -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql

    特定の行をバックアップする

    mysqldump -h localhost --single- transaction -u root -ppassword mydatabase table_name --where="date_created='2019-05-07'" > table_with_specific_rows_dump.sql

    テーブルのインポート

    mysql -u username -p -D dbname < tableName.sql

    上記のコマンドは、エラーが発生した場合にロードを停止します。

    mysqlクライアントから直接データをロードする場合、エラーは無視され、クライアントは続行します

    mysql> source tableName.sql

    出力をログに記録するには、

    を使用する必要があります
    mysql> tee import_tableName.log

    以下のリンクで説明されているすべてのフラグを見つけることができます:

    • https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
    • https://dev.mysql.com/doc/refman/8.0/en/mysqlimport.html
    • https://dev.mysql.com/doc/refman/8.0/en/mysql.html

    異なるデータベースバージョン間で論理バックアップを使用する場合は、適切な照合設定が行われていることを確認してください。次のステートメントを使用して、特定のデータベースのデフォルトの文字セットと照合を確認できます。

    USE mydatabase;
    SELECT @@character_set_database, @@collation_database;

    collat​​ion_databaseシステム変数を取得する別の方法は、SHOWVARIABLESを使用することです。

    SHOW VARIABLES LIKE 'collation%';

    mysqlダンプの制限により、出力を変更しなければならないことがよくあります。このような変更の例として、一部の行を削除する必要がある場合があります。幸い、復元する前に、標準のテキストツールを使用して出力を表示および変更できる柔軟性があります。 awk、grep、sedなどのツールが友達になることができます。以下は、ダンプファイルから3行目を削除する方法の簡単な例です。

    sed -i '1,3d' file.txt

    可能性は無限大。これは、データがバイナリ形式で記述されているため、Oracleでは見られないものです。

    論理mysqlを実行するときに考慮する必要があることがいくつかあります。主な制限の1つは、並列処理とオブジェクトロックの純粋なサポートです。

    論理バックアップに関する考慮事項

    このようなバックアップを実行すると、次の手順が実行されます。

    • LOCKTABLEテーブル。
    • SHOWCREATETABLEテーブル。
    • SELECT*FROMテーブルINTOOUTFILE一時ファイル。
    • 一時ファイルの内容をダンプファイルの最後に書き込みます。
    • テーブルのロックを解除する

    デフォルトでは、mysqldumpの出力にはルーチンとイベントが含まれていません。--routinesフラグと--eventsフラグを明示的に設定する必要があります。

    もう1つの重要な考慮事項は、データの保存に使用するエンジンです。うまくいけば、最近のほとんどのプロダクションシステムはInnoDBと呼ばれるACID準拠のエンジンを使用しています。古いエンジンのMyISAMは、一貫性を確保するためにすべてのテーブルをロックする必要がありました。これは、読み取りロック付きのフラッシュテーブルが実行されたときです。残念ながら、MySQLサーバーの実行中にMyISAMテーブルの一貫したスナップショットを保証する唯一の方法です。これにより、UNLO​​CKTABLESが実行されるまでMySQLサーバーが読み取り専用になります。

    InnoDBストレージエンジンのテーブルには、-single-transactionオプションを使用することをお勧めします。次に、MySQLはチェックポイントを生成します。これにより、ダンプは、着信変更を受信しながら、チェックポイントの前にすべてのデータをキャプチャできます。

    mysqldumpの--single-transactionオプションは、READLOCKを使用したFLUSHTABLESを実行しません。これにより、mysqldumpは、ダンプされるすべてのテーブルに対してREPEATABLEREADトランザクションを設定します。

    mysqldumpのバックアップは、Oracleツールのexp、expdpよりもはるかに低速です。 Mysqldumpはシングルスレッドツールであり、これが最も重大な欠点です。小さなデータベースではパフォーマンスは問題ありませんが、データセットが数十ギガバイトに増えるとすぐに受け入れられなくなります。

    • 一貫したスナップショットを使用してトランザクションを開始します。
    • データベーススキーマとテーブルごとに、ダンプは次の手順を実行します。
      • SHOWCREATETABLEテーブル。
      • SELECT*FROMテーブルINTOOUTFILE一時ファイル。
      • 一時ファイルの内容をダンプファイルの最後に書き込みます。
    • コミット。

    物理バックアップ(RMAN)

    幸い、論理バックアップの制限のほとんどは、PerconaXtrabackupツールを使用して解決できます。 Percona XtraBackupは、最も人気のあるオープンソースのMySQL / MariaDBホットバックアップソフトウェアであり、InnoDBおよびXtraDBデータベースのノンブロッキングバックアップを実行します。これは、MySQLデータディレクトリとその下のファイルの正確なコピーで構成される物理バックアップカテゴリに分類されます。

    これは、OracleRMANのような同じカテゴリのツールです。 RMANはデータベースソフトウェアの一部として提供されます。XtraBackupは個別にダウンロードする必要があります。 Xtrabackupはrpmおよびdebパッケージとして利用可能であり、Linuxプラットフォームのみをサポートします。インストールは非常に簡単です:

    $ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-XtraBackup-80-8.0.4-1.el7.x86_64.rpm
    $ yum localinstall percona-XtraBackup-80-8.0.4-1.el7.x86_64.rpm

    XtraBackupは、バックアッププロセス中にデータベースをロックしません。大規模なデータベース(100 GB以上)の場合、mysqldumpと比較してはるかに優れた復元時間を提供します。復元プロセスでは、バックアップファイルからMySQLデータを準備してから、ターゲットノードの現在のデータディレクトリに置き換えるか切り替えます。

    Percona XtraBackupは、起動時にログシーケンス番号(LSN)を記憶し、データファイルを別の場所にコピーすることで機能します。データのコピーには時間がかかり、ファイルが変更されている場合は、さまざまな時点でのデータベースの状態が反映されます。同時に、XtraBackupは、トランザクションログ(別名REDOログ)ファイルを監視するバックグラウンドプロセスを実行し、そこから変更をコピーします。トランザクションログはラウンドロビン方式で書き込まれ、しばらくすると再利用できるため、これは継続的に実行する必要があります。 XtraBackupは、実行開始以降、データファイルに変更が加えられるたびにトランザクションログレコードを必要とします。

    XtraBackupをインストールすると、最終的に最初の物理バックアップを実行できます。

    xtrabackup --user=root --password=PASSWORD --backup --target-dir=/u01/backups/

    MySQL管理者が行うもう1つの便利なオプションは、別のサーバーへのバックアップのストリーミングです。このようなストリームは、次の例のように、xbstreamツールを使用して実行できます。

    優先ポート(この例では1984)の外部サーバーでリスナーを起動します

    nc -l 1984 | pigz -cd - | pv | xbstream -x -C /u01/backups

    バックアップを実行して外部ホストに転送する

    innobackupex --user=root --password=PASSWORD --stream=xbstream /var/tmp | pigz  | pv | nc external_host.com 1984

    お気づきかもしれませんが、復元プロセスは2つの主要なステップに分かれています(Oracleと同様)。手順が復元(コピーバック)および回復(ログの適用)されます。

    XtraBackup --copy-back --target-dir=/var/lib/data
    innobackupex --apply-log --use-memory=[values in MB or GB] /var/lib/data

    違いは、バックアップが作成された時点までしかリカバリを実行できないことです。バックアップ後に変更を適用するには、手動で行う必要があります。

    ポイントインタイムリストア(RMANリカバリ)

    Oracleでは、データベースのリカバリを実行するときにRMANがすべての手順を実行します。これは、SCNまたは時間に対して、あるいはバックアップデータセットに基づいて実行できます。

    RMAN> run
    {
    allocate channel dev1 type disk;
    set until time "to_date('2019-05-07:00:00:00', 'yyyy-mm-dd:hh24:mi:ss')";
    restore database;
    recover database; }

    mysqlでは、バイナリログ(Oracleのアーカイブログと同様)mysqlbinlogからデータを抽出するために実行する別のツールが必要です。 mysqlbinlogは、バイナリログを読み取り、それらをファイルに変換できます。私たちがしなければならないことは

    基本的な手順は次のとおりです

    • 完全バックアップを復元する
    • 増分バックアップを復元する
    • リカバリの開始時刻と終了時刻を特定するため(バックアップの終了と、残念ながらテーブルを削除する前の位置番号である可能性があります)。
    • 必要なビングログをSQLに変換し、新しく作成されたSQLファイルを適切な順序で適用します。必ず1つのmysqlbinlogコマンドを実行してください。
      > mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

    バックアップの暗号化(Oracle Wallet)

    Percona XtraBackupを使用して、xbstreamオプションを使用してローカルバックアップまたはストリーミングバックアップを暗号化または復号化し、バックアップに別の保護レイヤーを追加できます。 --encrypt-keyオプションと--encryptkey-fileオプションの両方を使用して、暗号化キーを指定できます。暗号化キーは、

    のようなコマンドで生成できます
    $ openssl rand -base64 24
    $ bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1

    この値は、暗号化キーとして使用できます。 --encrypt-keyを使用したinnobackupexコマンドの例:

    $ innobackupex --encrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1” /storage/backups/encrypted

    復号化するには、適切な--encrypt-keyとともに--decryptオプションを使用するだけです:

    $ innobackupex --decrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1”
    /storage/backups/encrypted/2019-05-08_11-10-09/

    バックアップポリシー

    MySQL / MariaDBにも、Perconaのツールにも、バックアップポリシー機能は組み込まれていません。 MySQLの論理バックアップまたは物理バックアップを管理する場合は、ClusterControlを使用できます。

    ClusterControlは、混合環境のユーザー向けの包括的なオープンソースデータベース管理システムです。 MySQLまたはMariaDBの高度なバックアップ管理機能を提供します。

    ClusterControlを使用すると、次のことができます。

    • バックアップポリシーを作成する
    • バックアップのステータス、実行、およびバックアップなしのサーバーを監視する
    • バックアップと復元を実行します(ポイントインタイムリカバリを含む)
    • バックアップの保持を制御する
    • バックアップをクラウドストレージに保存する
    • バックアップを検証します(スタンドアロンサーバーでの復元による完全なテスト)
    • バックアップを暗号化する
    • バックアップを圧縮する
    • その他多数
    ClusterControl:バックアップ管理

    バックアップをクラウドに保持する

    組織はこれまで、データを障害から保護する手段として
    テープバックアップソリューションを導入してきました。ただし、パブリッククラウドコンピューティングの出現により、従来利用可能だったものよりもTCOが低い新しいモデルも可能になりました。 DRソリューションのコストをその設計から抽象化することはビジネス上意味がないため、組織は可能な限り低いコストで適切なレベルの保護を実装する必要があります。

    クラウドはデータバックアップ業界を変えました。手頃な価格であるため、中小企業はすべてのデータをバックアップするオフサイトソリューションを利用できます(もちろん、データが暗号化されていることを確認してください)。 OracleとMySQLはどちらも、組み込みのクラウドストレージソリューションを提供していません。代わりに、クラウドベンダーが提供するツールを使用できます。ここでの例はs3です。

    aws s3 cp severalnines.sql s3://severalnine-sbucket/mysql_backups

    結論

    データベースをバックアップする方法はいくつかありますが、バックアップ戦略を決定する前にビジネスニーズを確認することが重要です。ご覧のとおり、MySQLとOracleのバックアップには多くの類似点があり、SLAを満たすことができれば幸いです。

    これらのコマンドを必ず練習してください。テクノロジーに慣れていないときだけでなく、DBMSが使用できなくなったときはいつでも、何をすべきかがわかります。

    MySQLの詳細については、ホワイトペーパー「MySQLおよびMariaDBのデータベースバックアップに関するDevOpsガイド」を確認してください。


    1. サブクエリを使用せずに最大シーケンスの行のみを選択する方法は?

    2. SQLServerを使用してvarchar列で非ASCII文字を検索する

    3. Oracleのすべてのテーブルのリストを取得しますか?

    4. SQLサーバーで日付をフロアする