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連携などの手法も検討しましょう。
状況に応じた最適な方法を選び、データ管理を効率化しましょう!
コメント