2009-05-08 16 views
0

MySQLサーバの1つのデータベースを同じMySQLサーバ上のミラーデータベースに頻繁に複製する必要があります。1台のサーバを使用してMySQLデータベースをミラーリングする方法

Webアプリケーション(PHP/MySQL)のミラーを別のサブドメインに作成するbashスクリプトを作成しています。ユーザーはこのミラーを使用して、実働環境に影響を与えることなくあらゆる種類のクレイジーなものを試すことができます。スクリプトは毎晩自動的に実行されるはずです。

ソースコードを複製するのは簡単です。 rsync -aを使用して、運用環境を保持するディレクトリからミラーディレクトリにすべてをコピーし、パッチを適用していくつかの構成ファイルを更新します。問題は、サイズが3 GB近くになったデータベースを複製することです。

mysqldump live_db | mysql mirror_dbを使用すると、データベースが永久に複製されます。また、その間にCPU使用率は100%に達し、Webアプリケーションは非常に遅くなります。

私は1台のMySQLサーバしか持っていないので、データベースの複製はオプションではないようです。レプリケーションには2台のサーバーが必要です。

本番データベースを複製する最良の方法は何ですか?高速である必要はありませんが、システムのパフォーマンスに影響を与えすぎるべきではありません。ミラースクリプトがバックグラウンドで実行されている間も、私のWebアプリケーションを使用できるはずです。私は考えることができる

+0

同じサーバーで2つ目のmysqlサーバインスタンスを実行することは可能でしょうか? – VolkerK

+0

VolkerKは理論的にはうまくいくかもしれませんが、セットアップするのは本当に大きな面倒です。予備のデスクトップマシンを第2のサーバーに切り替えるほうが速くなります。 –

答えて

1

考えられる解決策:

1)速いサーバー

2購入)生の表をコピーします。これは理想的ではありませんが、テストのためだけであれば実行可能になる可能性があります。

私はあなたがMyISAMテーブルを使用しますが、ここでの手順ですしていると仮定するつもりです:

  • 理想的に書き込みをコピーし、本番データベース内のテーブルをロックし、これが不可能な場合
  • 無視したバイナリを/var/lib/mysql/production_schema(または同様のもの)から/var/lib/mysql/development_schemaへのテーブルデータ/インデックス。 rsync -a(rootとして実行)はこれを行うためのアイデアです。
  • 癆のすべてdevelopment_schema

にそれは私がコピーの方法として、この方法を使用していないだろうと付け加えた価値が

  • CHECK/REPAIR(これはプロセス全体であなたの唯一のダウンタイムである)MySQLサーバを再起動しますコピーを作成する前にサーバーを停止することなく、1つの本番環境から別の運用環境にデータをコピーします。

    3)開発環境ですべての本番データが必要かどうかを検討します。あなたはスマートで、データのサブセットのみをコピーできますか?

  • +0

    2GBのRAMを搭載したデュアルコアAMD64です。正確には遅いサーバーではありません。残念ながら、私はすべてのデータがミラー化されている必要があります。ミラーインスタンスでテストすることの1つは、Webアプリケーションのアップグレードです。私はサンプルデータと部分データでテストしていましたが、一部のデータだけをアップグレードしたときには、完全なデータベースをアップグレードする際に問題が発生しました。これで、完全な実動データセットでアップグレードをテストします。 –

    +0

    生のテーブルを同期させることは魅力的な働きをしています。私のテスト目的のためにコピーする間に、これが十分である可能性またはエラー/破損があることを認識しています。 –

    +0

    うれしいです! コピー時に破損したテーブルで終わる場合は、常にCHECK/REPAIRを実行してください(コピー中にテーブルに何かが書き込まれた場合には簡単に起こります) –

    0

    MyISAMテーブルがある場合は、mysqlhotcopyを使用できます。

    +0

    Hot BackupはInnoDBのオプションですあなたが現金を落としたいと思えば、テーブル:http://www.innodb.com/products/hot-backup/order/ – Plutor

    +0

    myisamの場合、コピーが行われている間もmyisamはテーブルを読み取りロックします。ダウンタイム。 – Kevin

    関連する問題