PR

MySQLとローカルデータの同期方法を徹底解説(CSV/JSON & 他の手法)

MySQLとローカルデータの同期方法を徹底解説(CSV/JSON & 他の手法)

MySQLのテーブルデータをローカルと同期することで、データの管理や更新作業がスムーズになります。本記事では、CSVとJSONを用いた同期方法を詳細に解説し、その他の高度な同期技術も紹介します。最適な方法を選べるように、メリット・デメリットの比較表も掲載します。


1. CSV/JSONを用いた同期方法

(1) CSVを使ったデータ同期

CSVのメリット

  • 人間が読めるフォーマット
  • Excelなどで編集しやすい
  • SQLで簡単にインポート/エクスポート可能

CSVのデメリット

  • データ型がすべて文字列になる
  • 大量データの処理には向かない
  • NULL値の処理が面倒

MySQL → CSVエクスポート(Python実装)

import csv
import mysql.connector

conn = mysql.connector.connect(user='root', password='password', host='localhost', database='test_db')
cursor = conn.cursor()

cursor.execute("SELECT * FROM my_table")
data = cursor.fetchall()

with open('data.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow([i[0] for i in cursor.description])  # ヘッダー行
    writer.writerows(data)

cursor.close()
conn.close()

CSV → MySQLインポート(Python実装)

with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    header = next(reader)
    
    conn = mysql.connector.connect(user='root', password='password', host='localhost', database='test_db')
    cursor = conn.cursor()
    
    for row in reader:
        cursor.execute(f"INSERT INTO my_table VALUES ({', '.join(['%s'] * len(row))})", row)
    
    conn.commit()
    cursor.close()
    conn.close()

(2) JSONを使ったデータ同期

JSONのメリット

  • データ構造を保持できる
  • Pythonとの相性が良い
  • Web APIでのやり取りに適している

JSONのデメリット

  • サイズが大きくなりやすい
  • MySQLのJSON型を活用する場合、バージョン依存あり

MySQL → JSONエクスポート(Python実装)

import json
import mysql.connector

conn = mysql.connector.connect(user='root', password='password', host='localhost', database='test_db')
cursor = conn.cursor(dictionary=True)

cursor.execute("SELECT * FROM my_table")
data = cursor.fetchall()

with open('data.json', 'w') as f:
    json.dump(data, f, indent=4)

cursor.close()
conn.close()

JSON → MySQLインポート(Python実装)

with open('data.json', 'r') as f:
    data = json.load(f)
    
    conn = mysql.connector.connect(user='root', password='password', host='localhost', database='test_db')
    cursor = conn.cursor()
    
    for row in data:
        cursor.execute(f"INSERT INTO my_table VALUES ({', '.join(['%s'] * len(row))})", tuple(row.values()))
    
    conn.commit()
    cursor.close()
    conn.close()

2. その他の同期方法

(1) mysqldumpを活用した同期

mysqldump -u root -p test_db > backup.sql
mysql -u root -p test_db < backup.sql

(2) binlogを用いたリアルタイム同期

[mysqld]
log_bin = mysql-bin
server_id = 1

(3) MySQL Replication(レプリケーション)

CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='replica_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=4;
START SLAVE;

(4) APIベースの同期(Flask)

from flask import Flask, jsonify
import mysql.connector

app = Flask(__name__)

def get_data():
    conn = mysql.connector.connect(user='root', password='password', host='localhost', database='test_db')
    cursor = conn.cursor(dictionary=True)
    cursor.execute("SELECT * FROM my_table")
    data = cursor.fetchall()
    conn.close()
    return data

@app.route('/sync', methods=['GET'])
def sync():
    return jsonify(get_data())

if __name__ == '__main__':
    app.run(port=5000)

3. 各手法の比較表

方法メリットデメリット用途
CSVシンプル、柔軟NULL処理が面倒小規模データの手動同期
JSON構造化データに最適ファイルサイズ大Web APIと連携
mysqldump高速な全データ同期差分更新不可バックアップ・リストア
binlogリアルタイム同期設定が複雑DB変更履歴適用
Replication自動同期、高速設定と管理が必要マスター・スレーブDB
API同期柔軟なデータ連携API開発が必要Webシステムとの統合

4. まとめ

CSVとJSONはシンプルなデータ同期に向いており、Pythonを活用することで簡単に実装可能です。大量データやリアルタイム同期が必要な場合は、binlog・レプリケーション・API連携などの手法も検討しましょう。

状況に応じた最適な方法を選び、データ管理を効率化しましょう!

コメント

タイトルとURLをコピーしました