大規模なデータベースの移動


8

CentOSサーバーがあり、/ var / lib / mysql /は125GBです(ディスクには1GBの空き容量があります)。

通常、mysqldumpを使用してデータベースをバックアップしますが、通常はそのような大きなデータベースを操作しないため、データベースを新しいサーバーにコピーする最も安全な方法を知る必要があります。

すべてのアドバイスに感謝します!

回答:


3

次の手順を使用できます

古いサーバー

1.mysqlサーバーを停止する

2. datadirの内容を... mysqlbackupとしてディスク上の別の場所にコピーします。

3.mysqlサーバーを再起動します

4.データを圧縮します(tar -czvf mysqlbackup.tar.gz mysqlbackup)

5.圧縮ファイルを新しいサーバーにコピーします

新しいサーバー上

1. MySQLをインストールします[MySQLのバージョンは古いサーバーと同じである必要があります](MySQLサーバーを起動しないでください)

2.圧縮ファイルを解凍します(tar -xzvf mysqlbackup.tar.gz)

3. mysqlbackupの内容をdatadirに移動します。

4. datadirの権限が正しいことを確認します

5. innodb_log_file_sizeが新しいサーバーで同じであることを確認します。そうでない場合は、古いログファイルをコピーしないでください(MySQLがこれらを生成します)。

6.MySQLを起動します。

また、データベースをあるサーバーから別のサーバーに移動するにどうすればよいですか。


2

ソースDBには1GBしかないため、どこにもmysqldumpを実行する余地はありません。

必要なものは次のとおりです

  • ソースDBサーバーのファイアウォールでポート3306が開いている
  • ターゲットDBサーバーからmysqldumpプログラムを実行する

IPアドレスが10.20.30.40のソースDBサーバーの場合、ターゲットDBにログインしてこれを実行します。

ターゲットDBサーバー上のMySQLインスタンスにPIPE mysqldump

MYSQL_HOST=10.20.30.40
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQLDUMP_OPTIONS="--all-databases --add-drop-database --single-tranactions"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --routines --triggers"
mysqldump -h${MYSQL_HOST} ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS}| mysql ${MYSQL_CONN}

SQLファイルへのパイプmysqldump。SQLFileからMySQLをロードする

MYSQL_HOST=10.20.30.40
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQLDUMP_OPTIONS="--all-databases --add-drop-database --single-transaction"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --hex-blob --routines --triggers"
mysqldump -h${MYSQL_HOST} ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} > MySQLData.sql
mysql ${MYSQL_CONN} < MySQLData.sql

最終メモ

手法#1を使用するのは、SQLファイルを保存するためのディスク領域がない場合です。ファイルをダンプして後でロードする場合は、テクニック#2を使用します。


0

新しいサーバーから、公開鍵と秘密鍵のペアが設定されていると想定

ssh root@oldserver mysqldump database | mysql database

正常に動作するはずですが、ディスク領域はまったく使用されないと思います


ssh -Cオンザフライ圧縮に使用することを忘れないでください。
Twinkles

0

通常、次のようにmysqldumpを実行して、データベースのコピーとバックアップを作成します。

$ mysqldump -u user -p db-name > db-name.out

sftp / sshを使用してdb-name.outファイルをリモートMySQLサーバーにコピーします。

$ scp db-name.out user@remote.box.com:/backup

リモートサーバーでデータベースを復元(ssh経由でログイン):

$ mysql -u user -p db-name < db-name.out

または

$ mysql -u user -p 'password' db-name < db-name.out

0

これは私のために働きました:

cd /var/lib/
rsync -rav mysql newmachine:/var/lib/

投稿を編集して、将来のユーザーがあなたのコードを理解するのに役立ついくつかの説明を提供してください。
RLF

0

@ user2029574、ハードウェアはクラウドにありますか?私もかつてあなたと同じ問題に出くわしました。ただし、MySQLのインストールはAWSで行われるため、さらに大きなサイズのディスクを簡単に接続できます。ここで私がやったことを要約しています:

  1. 現在のMySQLサーバーインスタンスに新しい大きなディスクを接続します。
  2. Perconaのinnobackupexを使用して、接続した新しいディスクに現在のMySQLデータの完全バックアップを準備します。
  3. MySQLがインストールされたさらに別のインスタンスを準備します。
  4. インスタンス1に接続されているディスクを切り離します。
  5. 次に、ディスクを新しいインスタンスであるインスタンス2に接続します。
  6. インスタンス2のMySQLサービスを停止します。
  7. MySQL構成ファイルを編集して、データdirが新しい場所を指すようにします。
  8. 新しいインスタンスでデータベースを復元します。繰り返しになりますが、あなたの助けのためにinnobackupexがあります。
  9. インスタンス2でMySQLサーバーを起動します。

このようにして、このDBに常時接続するアプリケーションを持つことができ、必要であればクラウドインスタンスのプロファイルもアップグレードできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.