MySQLデータ移行方法とツールの分析

MySQLデータ移行方法とツールの分析

この記事は主にMySQLデータ移行方法とツールの分析を紹介します。サンプルコードを通じて詳細に紹介されており、皆さんの勉強や仕事に一定の参考値があります。困っている友人は参考にしてください。

データ移行は、すべてのバックエンドが遭遇するタスクの1つです。この記事では、一般的なデータ移行方法とツールを紹介します。

mysqldump: データ構造を変更せずにデータを移行する

データのエクスポート

mysqldump -u root -p DATABASE_NAME テーブル名 > dump.sql

データの回復

mysql -u root -p DATABESE_NAME < dump.sql

またはmysqlクライアントに接続する

mysql> ソース dump.sql

pymysqlを使用してデータベースに接続する

ユーザー名とパスワードで直接接続できるデータベース

クラス GeneralConnector:
  def __init__(self, config, return_dic=False):
    自己.return_dic = return_dic
    self.config = 設定

  def __enter__(self):
    self.conn = pymysql.connect(**self.config、ポート=3306)
    self.return_dicの場合:
      # データの行は辞書になります self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
    それ以外:
      自己カーソル = 自己connカーソル()
    自己カーソルを返す

  def __exit__(self, *args):
    自己カーソルを閉じる()
    自己コミット()
    自己接続を閉じる()

使用:

# ローカルデータベース = {
# 'ユーザー': 'root',
# 'passwd': ''、
# 'ホスト': '127.0.0.1',
# 'db': 'local_db'
# }
GeneralConnector(const.local_db, return_dic=True) をカーソルとして使用します。
  カーソル.execute('SELECT `col1`, `col2` FROM test;')
  カーソル.fetchall() を返す

SSH接続を必要とするサーバー上のデータベースに接続する

クラス SSHConnector:
  def __init__(self, server, config, return_dic=False):
    自己.return_dic=リターンディック
    self.server = サーバー
    self.config = 設定

  def __enter__(self):
    self.conn = pymysql.connect(**self.config、ポート=self.server.local_bind_port)
    self.return_dicの場合:
      # データの行は辞書になります self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
    それ以外:
      自己カーソル = 自己connカーソル()
    自己カーソルを返す

  def __exit__(self, *args):
    自己カーソルを閉じる()
    自己コミット()
    自己接続を閉じる()

使用:

#SERVER = SSHTunnelForwarder(
# (リモートホスト、sshポート)、
# ssh_username=ユーザー名,
# ssh_pkey=SSH_KEY、
# ssh_private_key_password=SSH_KEY_PASSWD,
# remote_bind_address=('127.0.0.1', 3306) # mysql サービスの場所# )
# server_db = {
# 'ユーザー': 'root',
# 'passwd': ''、
# 'ホスト': '127.0.0.1',
# 'db': 'server_db'
# }
# サーバーとして const.SERVER を使用して、サーバーの mysql をローカル ポート 3306 にバインドするトンネルを作成します。
  SSHConnector(server, const.server_db) をカーソルとして使用します。
    cursor.execute('テーブルを表示;')
    データ = カーソル.fetchall()
    印刷(データ)

カーソルの各種操作

1.カーソル.実行(sql_statement)

SQL文を実行する

2. カーソル.fetchall()

カーソルのすべての結果を取得します。これは、選択ステートメントの後によく使用されます。

3. カーソル.fetchone()

カーソルの最初の結果を取得する

4. カーソル.lastrowid

最後のデータID

5.カーソル.executemany(挿入ステートメント、データリスト)

バッチデータを挿入する例:

サーバーとしてconst.SERVERを使用する場合:
  カーソルとしてconnector.Connector(server, const.db_1)を使用します:
    cursor.execute('設定から*を選択')
    設定 = cursor.fetchall()

  カーソルとしてconnector.Connector(server, const.db_2)を使用します:
    cursor.executemany('設定に (`id`,`theme`,`user_id`) の値 (%s,%s,%s) を挿入',preferences)

カーソルからリスト型の結果を取得する

カーソル.execute('SELECT `name` FROM user;')

fetchall()を直接使用すると、タプルにラップされたデータしか取得できません。

カーソル.fetchall()
# (('ジャック',), ('ベン'))

ここで、Djangoのflat=Trueのようにリスト結果セットを取得したい。

2つの方法があります

リストの理解

name_list = [x[0] カーソル内の x に対して cursor.fetchall()]

この方法の欠点は、最初に fetchall() を使用して結果セットをメモリに読み込み、次にそれをリストに変換するため、効率的ではないことです。

イターツール

name_list = list(itertools.chain.from_iterable(カーソル))

この方法をお勧めします。まず、すべての結果をメモリにフェッチしません。次に、itertools を使用してリストを生成する方が、リストの理解よりも高速です。

データ移行でDjangoモデルを使用する方法

  • Django の設定ファイルをコピーし、不要な設定を削除して、移行先のデータベースを設定する必要があります。
  • このモデルで使用されるファイルをコピーする必要があります
  • models.pyファイルが配置されているディレクトリをsettings.INSTALLED_APPSに導入する必要があります。
  • 移行スクリプトの先頭でDjangoを起動します
インポートOS
ジャンゴをインポートする
インポートシステム
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "translate.settings")
django.setup()

DjangoはSSHトンネルのローカル転送を介してリモートデータベースに接続します

リモートデータベースをローカルポートにマップするためのSSHトンネルを作成します

ssh -L local_port:localhost:<リモート mysql ポート> <ユーザー名>@<リモート ホスト>

SSH接続が進行中の場合、ローカルポートにアクセスすることでリモートデータベースにアクセスできます。

Django設定でデータベースを構成する

データベース = {
  'デフォルト': {
    'エンジン': 'django.db.backends.mysql',
    'NAME': db_name、
    'USER': remote_mysql_user, # リモート データベース アカウントのパスワード 'PASSWORD': remote_mysql_password,
    'ホスト': "localhost",
    'PORT': local_port、# リモート データベースはローカル ポートにマップされます 'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'}
    }
}

この時点で、Djangoのモデルを使用する場合、sshトンネルを介してリモートデータベースにアクセスします。

予防

  • 移行するデータの量を事前に把握し、データの5%~10%を取り出して移行速度をテストします。
  • テスト データに基づいて移行の合計時間を見積もります。移行の合計時間が 1 時間を超える場合は、移行プロセスが簡単に中断されないように、必ずサーバー上で移行スクリプトを実行してください。サーバーのパフォーマンスは、パーソナル コンピューターよりもはるかに優れています。
  • バッチ挿入を使用して、cursor.executemanyまたはDjangoのbulk_createを使用して、データベースへの書き込み回数を減らすようにしてください。
  • 移行プロセスはログに記録する必要があります。これにより、データがどのステップに移行されたかを把握でき、予期しないターミナルが発生した場合に実行を継続するためのブレークポイントを見つけることができます。
  • 作成時間フィールドと auto_add_now を組み合わせると、データの作成時間が自動的に記録されます。データを挿入するときに、このフィールドに値を割り当てると無効になります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLを監視するためのbinlogログ解析ツールの詳しい説明:Canal
  • データベース管理に役立つ 5 つの MySQL GUI ツール
  • MySQL監視ツールmysql-monitorの詳細な説明
  • ツールの構築と使用の詳細な紹介。Anemometer は MySQL のスローログをグラフィカルに表示します。
  • MySQL ストレステストツールの使い方
  • Pycharm ツールが MySQL データベースに接続できませんでした
  • myisamchk および mysqlcheck ツールを使用して破損した MySQL データベース ファイルを迅速に修復する方法
  • MySQL データを誤って削除した場合の簡単な解決策 (MySQL フラッシュバック ツール)
  • KTLツールはMySQLからMySQLへのデータの同期方法を実現します
  • MySQL可視化ツールNavicatへの接続方法
  • MySQL関連のツールをいくつかお勧めします

<<:  JavaScript Canvas は動的なワイヤーフレーム効果を描画します

>>:  最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

推薦する

Vue でのキープアライブコンポーネントの使用例

問題の説明(キープアライブとは何か)キープアライブ 名前の通り、アクティブな状態を維持します。誰が活...

シェル スクリプトを使用してワンクリックで MySQL 5.7.29 をインストールする方法

この記事は51CTOブログの著者wjw555の作品を参照しています。スクリプトの内容: vim イン...

HTML 選択タグにリンクを追加する 3 つの方法

最初のもの:コードをコピーコードは次のとおりです。 <html> <ヘッド>...

W3C チュートリアル (11): W3C DOM アクティビティ

ドキュメント オブジェクト モデル (DOM) は、プログラムがドキュメントのコンテンツ、構造、およ...

Nginx リバース プロキシと負荷分散を実装する方法 (Linux ベース)

ここで nginx のリバース プロキシを試してみましょう。リバースプロキシ方式とは、インターネット...

MySQLが中国語の文字を挿入する問題を永久に解決するコツを教えます

目次序文最初のステップ:ステップ2: このmy.iniを変更する要約する序文問題の説明:不正な文字列...

vitrualBox+ubuntu16.04 python3.6 最新チュートリアルと詳細な手順のインストール

最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...

Linux 上の MYSQL 5.7 でルート パスワードを取得する際の問題 (テスト済み、利用可能)

目次1. --skip-grant-tables 経由で取得する1.1 my.conf を変更し、新...

Dockerがプライベート倉庫Harborを構築する手順

港Harborは、エンタープライズレベルのプライベートDockerイメージリポジトリを構築するための...

jQueryは何に使われるのですか?jQueryは実際にはjsフレームワークです

jQuery 入門jQuery ライブラリは、簡単なマークアップ行を使用して Web ページに追加で...

Linux statコマンドの使用

1. コマンドの紹介stat コマンドは、ファイルまたはファイル システムに関する詳細情報を表示する...

XHTML CSS ページをプリンタ ページに変換する

<br />これまで、Web ページのプリンタ対応バージョンを作成するには、印刷したとき...

Windows Server 2012 でファイル サーバーを構築するための詳細な手順

ファイル サーバーは、企業内で最も一般的に使用されるサーバーの一つであり、主にファイル共有を提供する...

ログインインターセプションを実装するためのVueルーティング

目次1. 概要2. ログインインターセプションを実装するためのルーティングナビゲーションガード1. ...

JavaScriptアップロードファイル制限パラメータケースの詳細な説明

プロジェクトシナリオ: 1. アップロードファイルの制限関数: 1. フロントエンド操作による異常な...