MySQLデータベース移行クイックエクスポート大量データインポート

3754 ワード

データベースの移行は、わずかなデータではほとんど問題がありません.本番環境では、移行作業を行う必要がある場合があります.
  • ディスク容量が不足しています.たとえば、古いプロジェクトでは、選択した機種が必ずしもデータベースに適用されるわけではありません.時間が経つにつれて、ハードディスク(HDD)が不足する可能性があります.
  • ビジネスにボトルネックが発生.例えば、プロジェクトでは、すべての読み書き業務を単機で負担し、業務の圧力が増大し、重荷に耐えられない.IO圧力が許容範囲にある場合、読み書き分離方式が採用される.
  • マシンにボトルネックが発生.マシンのボトルネックは主にディスクIO能力、メモリ、CPUにある.この場合、ボトルネックに対していくつかの最適化を行う以外に、移行を選択するのは良い方案である.
  • プロジェクト改造.プロジェクトのデータベースによっては、異なるマシンルームにノードを追加したり、マシンを1つのマシンルームから別のマシンルームに移行したりする場合があります.例えば、同じサーバを業務別に共用し、サーバのストレスを軽減し、メンテナンスを容易にするために移行することもあります.

  • MySQLの移行には、通常3つの方法があります.
    1、データベースを直接エクスポートし、ファイルを新しいサーバーにコピーし、新しいサーバーにインポートする.
    2.サードパーティの移行ツールを使用する.
    3、データファイルとライブラリ表構造ファイルを直接新しいサーバーにコピーし、同じ構成のMySQLサービスの下にマウントする.
    第1の方案の利点:データファイルを再構築することができて、データファイルの占有スペースを減らして、互換性が最も良くて、エクスポートインポートはめったに問題が発生しなくて、需要が柔軟です.欠点:従来のエクスポートを使用してインポートするのに時間がかかります.
    第2のスキームの利点は、設定が完了した後、伝送が無人で、自動的に完了することである.欠点:柔軟性が足りず、設置が煩雑で、伝送時間が長く、異常後、異常の位置から伝送を継続することが難しい.
    第3のスキームの利点は、時間の消費が短く、ファイルがブレークポイントで転送され、操作手順が少ないことです.欠点:新しいサーバと古いサーバでは、MySQLのバージョンと構成が同じでなければなりません.不明な問題が発生する可能性があります.
    データベースの移行がビジネスのボトルネックやプロジェクトの改造など、データ・テーブル構造を変更する必要がある場合(パーティション・テーブルなど)は、最初の方法しか使用できません.
    MySQLのSELECT INTO OUTFILE、LOAD DATA INFILEでインポートデータをすばやくエクスポート
    LOAD DATA INFILE文は、テキストファイルからテーブルに高速で読み込まれます.MySQLの公式ドキュメントでも、一度に1つのデータを挿入するよりも20倍もパフォーマンスが高いことが説明されています.
    ユーザーが前後してSELECTを使用すると...INTO OUTFILEとLOAD DATA INFILEは、1つのデータベースから1つのファイルにデータを書き込み、ファイルからデータベースに読み込む場合、2つのコマンドのフィールドと行処理オプションが一致する必要があります.それ以外の場合、LOAD DATA INFILEではファイルの内容を正しく説明できません.
    以下はプロジェクトの例です.MySQLはwindowsプラットフォームからLinuxプラットフォームに移行し、データ総量は12 Gです.
    Windowsプラットフォームからのデータのエクスポート:
    tables.txtはデータテーブル名を保存するファイルで、ファイルからデータテーブル名を読み取ることで、すべてのテーブルをループしてエクスポートします.プロセス中にサブテーブルに撮影された場合、サブテーブルルールに基づいてエクスポートされたsql文とバッチコードを変更することができ、非常に柔軟です.
    @echo off & setlocal enabledelayedexpansion
    
    for /f %%i in (tables.txt) do ( set table=%%i
    	echo "dump table -- !table! --"
    	mysql -uroot -p12345678 codetc_old -e "SELECT * INTO OUTFILE 'F:/MySQL/Uploads/!table!.txt' FIELDS TERMINATED BY ',' FROM !table!"
    )
    pause
    
    

    Linuxプラットフォームのデータインポート:
    #!/bin/bash
    
    while read line
    do
            mysql -uroot -p12345678 codetc_new -e "LOAD DATA INFILE '/var/lib/mysql-files/$line.txt' INTO TABLE $line FIELDS TERMINATED BY ','"
    done < tables.txt

    データをインポートする前に新しいマシンにテーブル構造を作成する必要があり、12 Gのデータエクスポートには3分程度、インポートには4分程度(実行時間はマシンの構成によって異なるので参考価値はありません)
    文章の出所CODETC、共有を歓迎して、転載して住所を明記してください:http://www.codetc.com/article-322-1.html
    ソース:http://www.codetc.com/article-322-1.html