質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
さくらの専用サーバ

さくらの専用サーバは、サーバを1台占有して利用できるさくらインターネット社のサービス。高スペックサーバーを独占でき、自由にカスタマイズすることも可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

同期

複数のディレクトリに存在するファイルを更新した場合に、すべてのファイルにも更新が行われる事、又は、同じ記憶領域に同時にアクセスして内容の整合性が失われてしまう事をを防ぐ制御などを同期と呼びます。

Q&A

解決済

2回答

4671閲覧

MySQLで別サーバーからデータを同期する方法

majua51

総合スコア7

さくらの専用サーバ

さくらの専用サーバは、サーバを1台占有して利用できるさくらインターネット社のサービス。高スペックサーバーを独占でき、自由にカスタマイズすることも可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

同期

複数のディレクトリに存在するファイルを更新した場合に、すべてのファイルにも更新が行われる事、又は、同じ記憶領域に同時にアクセスして内容の整合性が失われてしまう事をを防ぐ制御などを同期と呼びます。

0グッド

1クリップ

投稿2020/01/11 05:05

##前提
####元データ
サーバー名 server.test01.com
DB名 test01
テーブル名 users

####同期先
サーバー名 server.test02.com
DB名 test02
テーブル名 customers

##やりたいこと
現在Laravelで新規開発を行っています。
既存サービス(FuelPHP)のユーザデータを利用するためにデータを同期する必要があります。

元データのusersテーブルのうち、条件を満たすデータを
同期先のcustomersテーブルに挿入し、元データに変更がある場合は同期先を上書きしたいです。
(同期先のサービス内でこのデータを編集・削除することはありません)
1日1回同期先のサーバーからCRONを使ってこの作業を行います。
サーバーはどちらもさくらのマネージドサーバーです。

同じサーバーにある別のDBからであれば、以下のSQL文でデータが同期できる事を確認しています。

sql

1INSERT INTO customers(id, email, password, username, delete_flg) 2SELECT id, email, password, username, delete_flg 3FROM test01.users 4INNER JOIN test01.seller 5ON test01.users.id = test01.seller.user_id 6WHERE not exists( 7SELECT ‘X’ 8FROM customers 9WHERE 10 customers.id = test01.users.id 11 ) 12AND test01.seller.product_id = 1 13 14 UPDATE customers, test01.users 15 SET 16 customers.email = test01.users.email, 17 customers.password = test01.users.password, 18 customers.username = test01.users.username, 19 customers.delete_flg = test01.users.delete_flg, 20 21WHERE 22 engineers.id = test01.users.id

これを異なるサーバーでやりたい場合どのようにすればよいのでしょうか。

また上記の目的が達成できれば方法はSQLで無くても構いません。
(CSVファイルを使う方法もあると聞きました)
他に良い方法があれば教えて頂きたいです。

回答のために必要な情報がありましたらお知らせ下さい。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

よくある方法としては以下の様な方法でしょうか。

  1. mysqldumpで同期元のテーブルをダンプする
  2. SCP等でダンプデータを移動させる
  3. 同期先でダンプデータをインポートする
  4. 同期先で質問中のクエリを実行する

全てコマンドで実行できる操作なので、方法を確立出来たらcronを使って定期自動実行の設定を行います。

投稿2020/01/11 12:28

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

majua51

2020/01/14 02:34

返信遅くなりました。回答ありがとうございます! ダンプデータを移動してインポートした上で処理を行えばいいのですね。この方法でやってみます。
guest

0

MySQLの基本機能にレプリケーションがあります。
レプリケーションではどうしてもダメな場合以外はレプリケーションを使いましょう。

MySQL入門 レプリケーション編@Qiita

基本機能なので"MySQL レプリケーション"でググれば情報はたくさん出てきます。

投稿2020/01/11 08:28

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

majua51

2020/01/11 09:39

ありがとうございます。基本的にはレプリケーションを使えば良いのですね! ただ今回はクライアントからリアルタイムでの同期は負荷がかかるので必要ない、1日1回で十分と言われています。この場合はレプリケーションは使えないですよね・・
hihijiji

2020/01/11 09:55

機能として「遅延レプリケーション」ってのはありますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問