
ที่มาภาพ: Unknown Source
วิธีย้ายและซิงค์ฐานข้อมูล MySQL ไปยัง Cloud Spanner ด้วย Terraform อย่างปลอดภัย
⚡ สรุป 30 วิ
การย้ายฐานข้อมูลจาก MySQL ไปยัง Cloud Spanner ต้องคำนึงถึงความถูกต้องของข้อมูลและขั้นตอนอัตโนมัติที่ทำซ้ำได้ **Terraform** จะช่วยสร้างโครงสร้างพื้นฐานแบบโค้ด (IaC) ส่วนเครื่องมือ Dataflow/Datastream จ…
ย้ายข้อมูล MySQL ไป Cloud Spanner อย่างปลอดภัย — Overview
การย้ายฐานข้อมูลจาก MySQL ไปยัง Cloud Spanner ต้องคำนึงถึงความถูกต้องของข้อมูลและขั้นตอนอัตโนมัติที่ทำซ้ำได้ Terraform จะช่วยสร้างโครงสร้างพื้นฐานแบบโค้ด (IaC) ส่วนเครื่องมือ Dataflow/Datastream จะรับหน้าที่ถ่ายโอนและซิงค์ข้อมูลในเวลาจริง
- MySQL – ระบบจัดการฐานข้อมูลเชิงสัมพันธ์แบบเปิดที่นิยมใช้บน VM หรือ Cloud SQL
- Cloud Spanner – ฐานข้อมูลกระจายระดับโลกของ Google ที่ให้ความสเถียร ACID พร้อมสเกลอัตโนมัติ
- Terraform – เครื่องมือ IaC ที่ทำให้การสร้างและจัดการทรัพยากรบน GCP เป็นแบบ declarative
เตรียมสภาพแวดล้อมสำหรับ Terraform — Preparation
ก่อนเริ่มต้องตั้งค่าโครงการ GCP ให้พร้อมรับบริการที่จำเป็น รวมถึงการติดตั้งเครื่องมือบนเครื่องพัฒนาเพื่อให้สามารถเรียกใช้ Terraform ได้อย่างไม่มีอุปสรรค
- เปิดใช้งาน API ของ Cloud Spanner, Datastream, Dataflow ผ่าน Cloud Console หรือ `gcloud services enable`
- สร้าง Service Account พร้อมบทบาท `roles/spanner.admin`, `roles/datastream.admin`, `roles/dataflow.admin` แล้วดาวน์โหลดไฟล์คีย์ JSON
- ติดตั้ง Terraform เวอร์ชันล่าสุด (`terraform -install-autocomplete`) และกำหนดค่า `provider "google"` ให้ใช้ Service Account ที่สร้าง
Tip: ตรวจสอบว่า Service Account มีสิทธิ์ Owner** หรืออย่างน้อยบทบาทที่ครอบคลุมทุกบริการที่จะใช้ เพื่อลดข้อผิดพลาดระหว่างการ apply
สร้างโครงสร้าง Cloud Spanner ด้วย Terraform — Infrastructure as Code
กำหนดทรัพยากร Spanner ทั้ง instance, database และ schema ในไฟล์ `.tf` เพื่อให้สามารถทำซ้ำและ version‑control ได้อย่างง่ายดาย
- `resource "google_spanner_instancemain"` – กำหนดชื่อ, โซน, จำนวน node (หรือ processing units)
- `resource "google_spanner_databaseapp_db"` – ระบุ instance ที่สร้างและสคริปต์ DDL สำหรับตารางเป้าหมาย
- `resource "google_datastream_connection_profile"` – สร้าง connection profile สำหรับ MySQL source และ Spanner destination
```hcl resource "google_spanner_instancemain" { name = "my-spanner-instance" config = "regional-us-central1" processing_units = 1000 # ปรับตามปริมาณงาน } ```
- ใช้ `terraform init && terraform apply` เพื่อสร้างทรัพยากรทั้งหมดในครั้งเดียว
ย้ายข้อมูลจาก MySQL ไป Cloud Spanner — Data Migration
ขั้นตอนหลักคือการส่งออกข้อมูลจาก MySQL, แปลงสคีม่าให้เข้ากับ Spanner แล้วโหลดเข้าสู่ฐานข้อมูลใหม่ การทำเช่นนี้โดยใช้ Dataflow หรือ Cloud Data Fusion จะช่วยลดความซับซ้อนของสคริปต์เอง
- Export: ใช้ `mysqldump --single-transaction` เพื่อสร้างไฟล์ SQL หรือ CSV ของตารางทั้งหมด
- Schema Conversion: แปลงประเภทข้อมูล MySQL (เช่น `INT`, `VARCHAR`) เป็นชนิดที่รองรับใน Spanner (`INT64`, `STRING(MAX)`) ผ่านสคริปต์ Python หรือเครื่องมือ Schema‑Conversion Tool ของ Google
- Load: สร้าง Job Dataflow ที่อ่านไฟล์ CSV จาก Cloud Storage แล้วเขียนเข้า Spanner โดยใช้ connector `SpannerIO`
```bash mysqldump -u root -p --tab=/tmp/mysql_export your_db gsutil cp /tmp/mysql_export/*.csv gs://my-bucket/export/ ```
- ตรวจสอบว่า Job Dataflow เสร็จสมบูรณ์โดยดูสถานะใน Cloud Console
Tip: ควรทำการย้ายข้อมูลแบบ batch** ครั้งแรกเพื่อทดสอบความถูกต้องก่อนจึงค่อยเปิดใช้งาน CDC (ขั้นตอนต่อไป)
ซิงค์ข้อมูลแบบเรียลไทม์ด้วย Datastream — **Change Data Capture (CDC)
หลังจากฐานข้อมูล Spanner มีข้อมูลเริ่มต้นแล้ว จำเป็นต้องจับการเปลี่ยนแปลงของ MySQL เพื่อให้สองระบบสอดคล้องกันโดยอัตโนมัติ ใช้ Datastream ซึ่งรองรับ CDC จาก MySQL ไปยัง Cloud Spanner
- สร้าง `google_datastream_stream` ที่เชื่อมต่อกับ source connection profile (MySQL) และ destination connection profile (Spanner)
- กำหนดให้ Datastream อ่าน binlog ของ MySQL แล้วแปลงเป็น Mutation สำหรับ Spanner โดยอัตโนมัติ
- ตั้งค่า replication mode เป็น `FULL` หรือ `INCREMENTAL` ตามความต้องการของ latency
```hcl resource "google_datastream_streammysql_to_spanner" { name = "mysql-spanner-stream" source_endpoint = google_datastream_connection_profile.mysql.id destination_endpoint = google_datastream_connection_profile.spanner.id backfill_all = true # ทำ backfill ครั้งแรกอัตโนมัติ } ```
- ใช้ `terraform apply` เพื่อเปิดใช้งานสตรีมและตรวจสอบสถานะในหน้า Datastream Dashboard
**Tip: ตรวจสอบให้แน่ใจว่า MySQL มีการตั้งค่า `binlog_format = ROW` และ `log_bin` เปิดอยู่ มิฉะนั้น CDC จะไม่จับข้อมูลได้ครบถ้วน
ตรวจสอบความถูกต้องของข้อมูล — Validation
หลังจากย้ายและซิงค์แล้ว ควรทำการตรวจสอบว่าแถวและค่าต่าง ๆ ตรงกันระหว่าง MySQL กับ Spanner เพื่อหลีกเลี่ยงข้อผิดพลาดในขั้นตอนผลิต
- เปรียบเทียบจำนวนแถวด้วย query `SELECT COUNT(*)` จากทั้งสองฐานข้อมูล
- ใช้ checksum หรือ hash ของคอลัมน์สำคัญเพื่อยืนยันความสอดคล้องของข้อมูลระดับบรรทัด
- ทำการรันชุด integration tests ที่ตรวจสอบการอ่าน‑เขียนจาก Spanner ตามที่แอปพลิเคชันต้องการ
```sql -- ตัวอย่างเช็คจำนวนแถวใน MySQL SELECT COUNT(*) FROM users; -- ตัวอย่างเช็คจำนวนแถวใน Spanner SELECT COUNT(*) FROM users; ```
ปรับแต่งประสิทธิภาพและค่าใช้จ่าย — Optimization & Cost
การย้ายไปยัง Cloud Spanner อาจทำให้รูปแบบการใช้งานเปลี่ยนแปลง จึงควรตรวจสอบพารามิเตอร์เพื่อให้ได้ประสิทธิภาพสูงสุดโดยไม่เสียค่าใช้จ่ายเกินความจำเป็น
| ด้าน | MySQL (on‑prem/Cloud SQL) | Cloud Spanner |
|---|---|---|
| Latency | มิลลิวินาทีเดียว (single region) | มิลลิวินาทีระดับ 1–2 (global) |
| Scalability | เพิ่ม read replica หรือขยาย VM | ปรับ `processing_units` แบบอัตโนมัติ |
| ค่าใช้จ่าย | ค่าบริการ VM/Storage ต่อเดือน | คิดตามจำนวน node / processing units + storage |
- ลด node count ในช่วงที่โหลดต่ำโดยใช้ Terraform เพื่อปรับค่าตัวแปร `processing_units` ผ่าน `terraform apply -var="processing_units=500"`
- ใช้ secondary indexes อย่างจำกัดเพื่อไม่ให้ค่าเขียนเพิ่มขึ้นอย่างไม่มีเหตุผล
- เปิดใช้งาน autoscaling ของ Spanner (Terraform: `google_spanner_instance.autoscale`) เพื่อให้ระบบตอบสนองต่อความต้องการแบบไดนามิก
สรุป — Summary
- ใช้ Terraform สร้างโครงสร้าง Cloud Spanner, Datastream และ Service Account อย่างเป็นระเบียบ
- ย้ายข้อมูลครั้งแรกด้วย Dataflow หรือ Cloud Data Fusion จากไฟล์ CSV/SQL ที่ส่งออกจาก MySQL
- เปิดใช้งาน CDC ผ่าน Datastream เพื่อซิงค์การเปลี่ยนแปลงแบบเรียลไทม์อย่างต่อเนื่อง
- ตรวจสอบความถูกต้องด้วยการเปรียบเทียบ row count, checksum และ integration tests
- ปรับแต่ง node/processing units, ใช้ autoscaling และกำหนด index อย่างรอบคอบเพื่อควบคุมค่าใช้จ่าย
สังเกตสำคัญ: ทำการทดสอบใน environment แยกก่อนนำไปใช้งานจริง เพื่อให้มั่นใจว่าการย้ายและซิงค์ข้อมูลทำได้ ปลอดภัย, แม่นยำ และ ประหยัดต้นทุน**.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีย้ายและซิงค์ฐานข้อมูล MySQL ไปยัง Cloud Spanner ด้วย Terraform อย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 13 สิงหาคม 2569 เวลา 10:51



