0

2 つの共有サーバー (サーバー 1 とサーバー 2) と 1 つの専用サーバーがあります。専用サーバーでは、サーバー 1 にデータを挿入するスクリプトを実行しています。

今、毎月サーバー1からサーバー2にすべてのデータを同期したい(基本的にバックアップデータベースを保持する)

サーバー 1 と 2 については、root アクセス権がありません。だから私は専用サーバーでそれをしなければなりません。

mysql -host -u -p comment を使用してできる方法はありますか??

他のアイデアがあれば、私を助けてくれませんか?

4

2 に答える 2

3

あるサーバーから別のサーバーにすべてのデータを同期するという質問があるので、を含む比較的単純なソリューションを使用できると思いますmysqldump

私はあなたが専用サーバーからこれをすべて行うことができると思います:

mysqldump --user=<username> --password=<password> --host=<server 1 hostname> --port=<port> --add-drop-database <database name> > dump.sql

<username>、、およびをサーバー1の接続の詳細<password>に置き換えます。サーバー2にコピーするサーバー1のデータベースの名前に置き換えます。すべてのデータベースをコピーする場合は、-all-databasesオプションに置き換えます。<port><server 1 hostname>

dump.sqlこれにより、現在のディレクトリに呼び出されるファイルが作成されます。次に、これをサーバー2にロードできます。

mysql --user=<username> --password=<password> --host=<server 2 hostname> --port=<port> <database name> < dump.sql

<username>、、をサーバー2の接続の詳細に<password>置き換えます。<port><server 2 hostname>

これにより、dump.sqlファイルが取得され、サーバー2のデータベースにロードされます。これにより、サーバー2のデータベースが削除されるため、既存のすべてのデータが。のデータベースに置き換えられdump.sqlます。

mysqldumpのオプション(ドロップデータベース、ドロップテーブルなど)を確認し、状況に合わせて上記のコマンドを調整します。正しく接続すれば、中間ファイルをバイパスして、サーバー1のmysqldumpをサーバー2のmysqlにソケットを使用して接続することもできると思います。

この質問の「自動化された」部分をカバーするために、cronで上記のコマンドを実行し、毎月1日の適切な時間に実行するようにスケジュールすることができます。

于 2012-09-07T06:55:54.267 に答える
0

@MarkStreatfield が既に述べたように、mysqldump はまさにあなたのためのものです。実行するために root になる必要はありません。ただし、ダンプ処理の進行中はすべてのテーブルがグローバルにロックされるため、現時点ではアプリが完全に機能していないことに注意してください。mysqldump の出力を直接 server2 に渡す場合、かなりの時間がかかる可能性があるため、問題になる可能性があります。

バックアップのために、ローカルの sql または gz ファイルにダンプすることをお勧めします。S3/Dropbox と同期したり、後で server2 にダンプをデプロイしたりできます。ロックは必要ありません。たとえば、sql.gz ファイルにダンプします。

mysqldump -u <db_user> --password=<db_password> -h <host> <db_name> | gzip > `date +mydbdump_%y_%m_%d.sql.gz`
于 2012-09-07T07:10:08.667 に答える