2011-07-09 18 views
2

私は、要求に応じて、ライブデータベースとローカルデータベースとの間でテーブルの選択を同期させることができるソリューションを探しています。これに特定の解決策がない場合、ローカルデータベースとライブデータベースを同期するための良い解決策は何でしょうか?(部分)mysqlとのデータベース同期

+0

これを明確にするために、liveDBのテーブルの新しいデータをlocalDBのテーブルにコピーしますか?あなたのlocalDBのスキーマを変更しようとしていますか? –

+0

@ Cshift3iLikeアイデアは、選択されたテーブルの中でいずれかのデータベースに追加されたほとんどのデータを同期させることです。 – Argoron

答えて

0

選択したテーブルをエクスポートして再度インポートできるphpmyadminが常にあります。

開発システムで作業する必要のあるライブDBをお持ちの場合、これは実用的なソリューションです。あなたは、データベースのコピーを取ることができます、それについては、ドロップ、顧客テーブルを作成し、ライブをオフラインにしてバックアップし、顧客テーブル以外のすべてをドロップし、更新されたデータベースをインポートします。

phpmyadminの利点は、それがあなたのクエリを表示することです、あなたはこれらのスクリプトをまとめて、次にアップデートするときに使うことができます。

+0

@ʍǝɥʇɐɯMathew、私が探していたものは、より自動化された、または自動化可能なものです(必要に応じて、またはx日ごとにシンクロを同期させるためのテーブルの選択)。私はスキルスケールの初心者の方がはるかに多いですが、私はphpmyadminを知っています。私には、まだ私がdicoverするべきいくつかの機能がない限り、それが得ることができる最もマニュアルであるようです。 – Argoron

+0

...そうですが、確実に使用できるSQL文が吐き出されます。これらをテキストファイルに入れて、mysql -u user -pPASSWORD database

0

あなたは以下の条件を持っている場合は

  • すべての必要なテーブルはInnoDBのある
  • ライブDBは、パブリックIPでアクセスできる

あなたは個々のテーブル

のmysqldumpをを行うことができますシェルスクリプトを使用すると、ローカルマシンから実行するときにこれを実現する方法を以下に示します。

LIVEDB_IP=192.168.1.10 
MYSQL_SRCUSER=whateverusername 
MYSQL_SRCPASS=whateverpassword 
MYSQL_SRCCONN="-h${LIVEDB_IP} -u${MYSQL_SRCUSER} -p${MYSQL_SRCPASS}" 
SOURCE_DB=mydb_source 

MYSQL_TGTUSER=whateverusername2 
MYSQL_TGTPASS=whateverpassword2 
MYSQL_TGTCONN="-h127.0.0.1 -u${MYSQL_TGTUSER} -p${MYSQL_TGTPASS}" 
TARGET_DB=mydb_target 

TBLLIST="tb1 tb2 tb3" 
for TB in `echo "${TBLLIST}"` 
do 
    mysqldump ${MYSQL_SRCCONN} --single-transaction ${SOURCE_DB} ${TB} | mysql ${MYSQL_TGTCONN} -A -D${TARGET_DB} & 
done 
wait 

--single-transactionオプションを指定すると、ソースデータベースでINSERT、UPDATE、およびDELETEを引き続き有効にしながら、テーブルのポイントインタイムスナップショットが発生します。

テーブルがかなり大きい場合、タイムアウトの問題が発生する可能性があります。代わりにこのスクリプトを試してみてください:

LIVEDB_IP=192.168.1.10 
MYSQL_SRCUSER=whateverusername 
MYSQL_SRCPASS=whateverpassword 
MYSQL_SRCCONN="-h${LIVEDB_IP} -u${MYSQL_SRCUSER} -p${MYSQL_SRCPASS}" 
SOURCE_DB=mydb_source 

MYSQL_TGTUSER=whateverusername2 
MYSQL_TGTPASS=whateverpassword2 
MYSQL_TGTCONN="-h127.0.0.1 -u${MYSQL_TGTUSER} -p${MYSQL_TGTPASS}" 
TARGET_DB=mydb_target 

TBLLIST="tb1 tb2 tb3" 
for TB in `echo "${TBLLIST}"` 
do 
    mysqldump ${MYSQL_SRCCONN} --single-transaction ${SOURCE_DB} ${TB} | gzip > ${TB}.sql.gz & 
done 
wait 

for TB in `echo "${TBLLIST}"` 
do 
    gzip -d < ${TB}.sql.gz | mysql ${MYSQL_TGTCONN} -A -D${TARGET_DB} & 
done 
wait 

試してみてください!必要なテーブルがMyISAMテーブルがある場合は

CAVEAT

、ただのmysqldumpから--single-transactionを削除します。これにより、クエリが必要なテーブルでmysqldumpが終了するまで、ソースデータベースのクエリがフリーズすることがあります。その場合、トラフィックの少ない時間帯にこのスクリプトを実行してください。

0

デスクトップdbマネージャSQLYogには、このような設定を行う「Job Scheduler」ツールがあります。プロフェッショナルまたはエンタープライズのライセンスが必要です(音声よりも安い)が、最初にチェックアウトしたい場合は30日間のトライアルがフル機能です。

関連する問題