Migrate your databases to MySQL Database as a Service
Prerequisite
1
เตรียมความพร้อมข้อมูล
SET GLOBAL read_only = 1;
SET GLOBAL super_read_only = 1;SHOW VARIABLES LIKE 'read_only';
SHOW VARIABLES LIKE 'super_read_only';+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only | ON |
+---------------+-------+
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| super_read_only | ON |
+-----------------+-------+2
Export ข้อมูลจากต้นทาง (Dump)
mysqldump -h [source_host] -u [username] -p \
--single-transaction \
--routines \
--triggers \
--databases [db_name] \
> nipa_migration.sqlmysqldump -h [source_host] -u [username] -p \
--single-transaction \
--routines \
--triggers \
--databases db1 db2 db3 \
> nipa_migration.sqlls -lh nipa_migration.sql-rw-rw-r-- 1 nc-user nc-user 5.3K Jul 9 12:35 nipa_migration.sql3
ตรวจสอบความถูกต้องของไฟล์ Dump ก่อน Import (Pre-restore Validation)
2.1.1 ตรวจสอบ Object ที่อยู่ในไฟล์ Dump
grep -E "CREATE TABLE|CREATE DEFINER.*PROCEDURE|CREATE DEFINER.*FUNCTION" nipa_migration.sqlCREATE TABLE `bookings` (
CREATE TABLE `customers` (
CREATE DEFINER=`sourceuser`@`%` PROCEDURE `get_customer_count`()grep -A 2 -i "TRIGGER \`" nipa_migration.sql/*!50003 CREATE*/ /*!50017 DEFINER=`sourceuser`@`%`*/ /*!50003 TRIGGER `trg_log_customer` BEFORE UPDATE ON `customers` FOR EACH ROW BEGIN
SET NEW.updated_at = CURRENT_TIMESTAMP;
END */;;2.1.2 เก็บ Row Count ของแต่ละตารางจาก Source (Baseline)
mysql -h [source_host] -u [username] -p -D [db_name] -e \
"SELECT COUNT(*) FROM bookings;"
mysql -h [source_host] -u [username] -p -D [db_name] -e \
"SELECT COUNT(*) FROM customers;"+----------+
| COUNT(*) |
+----------+
| 2 |
+----------+2.1.3 เก็บ Checksum ระดับตารางจาก Source (Baseline)
mysql -h [source_host] -u [username] -p -D [db_name] -e \
"CHECKSUM TABLE bookings, customers;"+----------------------+-----------+
| Table | Checksum |
+----------------------+-----------+
| DB-Default.bookings | 950851913 |
| DB-Default.customers | 974903714 |
+----------------------+-----------+2.2 กรณีต้องการอัปเดตเฉพาะข้อมูลใหม่ โดยไม่แตะข้อมูล/Schema เดิม (Insert-Only Sync)
mysqldump -h [source_host] -u [username] -p \
--single-transaction \
--no-create-info \
--skip-triggers \
--insert-ignore \
--databases [db_name] \
--tables [table1] [table2] \
> nipa_data_update.sql5
6
ตรวจสอบความถูกต้องและตั้งค่าเพิ่มเติม
5.1 เทียบ Row Count และ Checksum กับ Baseline จาก Source
mysql -h [nipa_db_endpoint] -u [nipa_db_user] -p -D [db_name] -e \
"SELECT COUNT(*) FROM bookings;"
mysql -h [nipa_db_endpoint] -u [nipa_db_user] -p -D [db_name] -e \
"SELECT COUNT(*) FROM customers;"mysql -h [nipa_db_endpoint] -u [nipa_db_user] -p -D [db_name] -e \
"CHECKSUM TABLE bookings, customers;"+----------------------+-----------+
| Table | Checksum |
+----------------------+-----------+
| DB-Default.bookings | 950851913 |
| DB-Default.customers | 974903714 |
+----------------------+-----------+5.2 ทดสอบเรียกใช้งาน Trigger/Procedure จริงด้วย Database User ปกติ (ไม่ใช่ Root)
PreviousMigrate MySQL Database for Feature EnhancementNextMigrate your databases to PostgreSQL Database as a Service
Last updated