# 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;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-epc.gitbook.io/ncs-documents/migration/migrate-your-databases-to-mysql-database-as-a-service.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
