> For the complete documentation index, see [llms.txt](https://docs-epc.gitbook.io/ncs-documents/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-epc.gitbook.io/ncs-documents/migration/migrate-your-databases-to-mysql-database-as-a-service.md).

# Migrate your databases to MySQL Database as a Service

เนื่องจากการย้าย Database จากระบบภายนอก (On-premises หรือ Provider อื่น) มายัง MySQL Database ของ NCS จำเป็นต้องมีการโอนถ่ายข้อมูลผ่าน Logical Dump เพื่อความเข้ากันได้ของระบบสูงสุด จึงแนะนำให้ใช้วิธีมาตรฐานในการดำเนินการ

## Prerequisite

* มี MySQL Database ต้นทาง ที่พร้อมสำหรับการ Export ข้อมูล โดยแนะนำให้เปิด โหมด `read_only` และ `super_read_only` ที่ Database Server ต้นทาง เพื่อป้องกัน Application มาเขียนข้อมูลเพิ่มเติมระหว่างการย้าย
* มี MySQL Database Instance ใน Project บน NCS ([ขั้นตอนการสร้าง MySQL Database](/ncs-documents/database-as-a-service/sql-database/create-sql-database-instance/create-mysql-database-instance.md))
* เครื่องที่ใช้ดำเนินการ (Migration Workstation) ต้องติดตั้ง `mysql-client` และ `mysqldump`
* ตั้งค่า Port ของ Database บน NCS เป็น 3306 ให้รองรับการเชื่อมต่อจาก IP ของเครื่องที่ใช้ดำเนินการ ซึ่งเป็นค่าเริ่มต้นของ NCS อยู่แล้ว

{% hint style="warning" %}
ช่วงเวลาที่ทำตาม Document นี้ ควรอยู่ในช่วงการปรับปรุงระบบ (Maintenance Phase)&#x20;
{% endhint %}

## Instruction

วิธีย้ายข้อมูลจาก Database เดิมเข้าสู่ MySQL Database บน NCS มีขั้นตอน ดังนี้

### 1. เตรียมความพร้อมของข้อมูล

เข้าไปที่ Database Server ต้นทาง และรันคำสั่ง:

```sql
SET GLOBAL read_only = 1;
SET GLOBAL super_read_only = 1;
```

จากนั้นรันคำสั่งเพื่อตรวจสอบค่า Position

```sql
SHOW MASTER STATUS;
```

{% hint style="info" %}
ตรวจสอบซ้ำเพื่อให้แน่ใจว่าค่า Position ไม่มีการเปลี่ยนแปลง (หากคงที่ แสดงว่าไม่มีการเขียนข้อมูลเข้ามาแล้ว)
{% endhint %}

### 2. สั่งสร้าง**ไฟล์ Backup จาก Database ต้นทาง (Export)**

ใช้คำสั่ง `mysqldump` เพื่อดึงข้อมูลและ Schema ทั้งหมดออกมาเป็นไฟล์ SQL

รันคำสั่งบนเครื่องต้นทางหรือเครื่องที่เข้าถึง Database เดิมได้

```sql
mysqldump -u [username] -p --single-transaction --routines --triggers --databases [db_name] > nipa_migration.sql
```

* username: Database User ของ Database เดิม
* db\_name: ชื่อ Database ที่ต้องการไปดึงข้อมูลมา

ตรวจสอบว่าไฟล์ nipa\_migration.sql ถูกสร้างขึ้นเรียบร้อยและมีขนาดที่เหมาะสม

### 3. นำข้อมูลเข้าสู่ Database บน NCS (Import)

ใช้คำสั่ง `mysql` เพื่อนำข้อมูลจากไฟล์ SQL เข้าสู่ MySQL Database บน NCS

รันคำสั่งเพื่อ Restore ข้อมูล:

```sql
mysql -h [nipa_db_endpoint] -u [nipa_db_user] -p [db_name] < nipa_migration.sql
```

* nipa\_db\_endpoint: External IP / Hostname ของ MySQL Database บน NCS
* nipa\_db\_user: Database User ที่สร้างจาก MySQL Database บน NCS
* db\_name: ชื่อ Database ที่สร้างบน NCS

รอจนคำสั่งทำงานเสร็จสิ้น หากไม่มีข้อความ Error แสดงว่าการ Import สำเร็จ

### 4. ตรวจสอบความถูกต้องและตั้งค่าเพิ่มเติม

ตรวจสอบความเรียบร้อยของข้อมูลก่อนเปิดใช้งานจริง

* เข้าใช้งาน Database บน NCS ผ่าน CLI หรือ [MySQL Workbench](/ncs-documents/database-as-a-service/access-mysql-database-with-mysql-workbench.md) เพื่อตรวจสอบจำนวนตารางและข้อมูล
* ตรวจสอบฟีเจอร์ใหม่ (หาก Database Instance สร้างหลัง 01/04/2025) เช่น การสร้าง Replica หรือการจัดการ Monitoring User

### 5. เชื่อมต่อระบบเดิมกับ Database ใหม่บน NCS

เมื่อตรวจสอบความถูกต้องแล้ว ให้ดำเนินการเปลี่ยนถ่ายระบบดังนี้:&#x20;

* ปิด `read_only` และ `super_read_only` เมื่อต้องการเริ่มใช้งานบน Database ใหม่ โดยตรวจสอบว่าค่า `read_only` และ `super_read_only` บน Database ใหม่ เป็น 0 (OFF)&#x20;
* อัปเดต Connection String ใน Application (Host, Database User, Password) ให้มาชี้ที่ Database ใหม่บน NCS&#x20;
* ตรวจสอบการทำงานของระบบว่าสามารถ อ่าน-เขียน (Read-Write) ข้อมูลได้ตามปกติ&#x20;
