การตั้งค่า Timezone ด้วย RDS

การตั้งค่า RDS Timezone จะช่วยให้เราใช้งาน Database ได้สะดวกในเรื่องของเขตเวลามากยิ่งขึ้น และในกรณีที่เราต้องทำการตั้งค่าเกี่ยวกับ Timezone นั้น เราสามารถจัดการการตั้งค่าโดยเลือกเป็น Timezone +07 ได้โดยไม่ต้องคำนวณจาก UTC มาเป็น +07 ให้ยุ่งยากอีกด้วย

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ครั้งนี้ผมจะมาอธิบายเกี่ยวกับ การตั้งค่า Timezone ด้วย RDS ต่อจากบทความ วิธีการสร้าง RDS และเชื่อมต่อจาก EC2 บน AWS โดยบทความนี้จะเป็นการตั้งค่า Timezone จาก UTC ให้เป็น +07

สิ่งที่ต้องมี

ต้องทำ วิธีการสร้าง RDS และเชื่อมต่อจาก EC2 บน AWS เพราะเราจะใช้ RDS นี้ในการตั้งค่า Timezone โดยอ่านคำอธิบายและทำตามลิงก์ด้านล่างนี้

※ข้อควรระวัง
แนะนำให้อ่านบทความอย่างถี่ถ้วนก่อนเริ่มลงมือทำในทุกบทความ เช่น สิ่งที่ต้องมี เป็นต้น

เมื่อทำการสร้าง RDS และเชื่อมต่อจาก EC2 บน AWS ครบทุกขั้นตอนแล้ว ก็เท่ากับว่าตอนนี้เราสามารถใช้งานการจัดการ MySQL ใน Amazon Linux 2 ได้แล้ว ทีนี้เริ่มทำในขั้นตอนถัดไปได้เลย

ปัญหา Timezone

ก่อนอื่นเราต้องมาตรวจสอบเวลาก่อนว่าตอนนี้เป็นเวลา UTC หรือ +07 เราจะตรวจสอบโดยการเพิ่มข้อมูล date time ปัจจุบันลงใน Database นั่นเอง

ทีนี้ผมจะสาธิตโดยการสร้าง table ขึ้นมาใหม่โดยใช้ชื่อว่าtest_datetimeจากนั้นก็จะเพิ่มข้อมูล date time ปัจจุบันลงใน Database:tinnakorn(Database นี้เป็นแค่ชื่อตัวอย่าง)

รันคำสั่งด้านล่างนี้เพื่อสร้าง table ที่ชื่อว่าtest_datetime

MySQL [tinnakorn]> create table test_datetime(id int, dt datetime);    // รันคำสั่งด้านล่างนี้เพื่อสร้าง table ที่ชื่อว่า "test_datetime"
Query OK, 0 rows affected (0.03 sec)

MySQL [tinnakorn]>


รันคำสั่งนี้เพื่อเรียกดู table ก็จะเห็น table:test_datetimeแสดงขึ้นมา

MySQL [tinnakorn]> show tables;    // รันคำสั่งนี้เพื่อเรียกดู table
+---------------------+
| Tables_in_tinnakorn |
+---------------------+
| test                |
| test_datetime       |
+---------------------+
2 rows in set (0.00 sec)

MySQL [tinnakorn]>


รันคำสั่งนี้เพื่อเพิ่มข้อมูลลง table

MySQL [tinnakorn]> insert into test_datetime(id, dt) value (1, NOW());    // รันคำสั่งนี้เพื่อเพิ่มข้อมูลลง table
Query OK, 1 row affected (0.01 sec)

MySQL [tinnakorn]>


รันคำสั่งนี้เพื่อเรียกดูข้อมูลใน table จะเห็นว่าคอลัมน์id:1 | 2022-04-08 08:01:40เป็นเวลาปัจจุบันของ UTC

ซึ่งจุดประสงค์ที่เราจะทำในบทความนี้คือการเปลี่ยน Timezone UTC ให้เป็น +07 หรือเวลาของประเทศไทย เพื่อให้การใช้งานของ RDS นั้นมีความสะดวกในเรื่องของเขตเวลาที่กำลังใช้งานอยู่นั่นเอง

MySQL [tinnakorn]> select * from test_datetime;    // รันคำสั่งนี้เพื่อเรียกดูข้อมูลใน table
+------+---------------------+
| id   | dt                  |
+------+---------------------+
|    1 | 2022-04-08 08:01:40 |
+------+---------------------+
1 row in set (0.00 sec)

MySQL [tinnakorn]>

การตั้งค่า Timezone ด้วย RDS

ขั้นตอนนี้เป็นการตั้งค่า RDS จากUTCให้เป็น+07

กลับมาที่หน้า Databases ของเราตาม path ของRDS 〉 Databases 〉 tinnakorn-rds-timezone-db (ชื่อ database ของคุณ)นี้ได้เลย
เมื่อเข้ามาแล้วเลื่อนลงมาด้านล่าง เลือกหัวข้อConfiguration
จากนั้นดูที่ Parameter group ในช่องสีเขียว ซึ่งเราจะทำการเปลี่ยนตรงนี้เพื่อให้ Timezone เป็น +07 แต่ตอนนี้เรายังไม่สามารถเปลี่ยนได้ เราต้องทำการสร้าง parameter group ขึ้นมาก่อน
rds_timezone-1

การสร้าง Parameter groups

มาที่เมนูด้านซ้าย เลือกParameter groups
setting_tz-8

คลิกCreate parameter group
setting_tz-9

การตั้งค่า Parameter group details นี้คือ:
» Parameter group family:mysql8.0 ▼(เลือกให้ตรงกับชื่อเดิม เช่น default.mysql8.0)
» Type:DB Parameter Group ▼(Default)
» Group name และ Description: เช่นtinnakorn-rds-parameter-group(ใส่ชื่ออะไรก็ได้)
» คลิกCreate
rds_timezone-2

ค้นหาชื่อ Parameter group ของเรา แล้วคลิกเข้าไป
rds_timezone-3

ตั้งค่า Parameter ตามนี้:
ค้นหา Parameter:?︎ time_zone
Checktime_zone
คลิกEdit parameters
rds_timezone-4

เลือก time_zone:Asia/Bangkokแล้วกดSave changes
เพียงเท่านี้การสร้าง Parameter group timezone ที่เป็น+07ก็เสร็จเรียบร้อยแล้ว
rds_timezone-5

การเปลี่ยน Parameter group ใน Database

ทีนี้กลับมาที่ Database ของเรา
rds_timezone-6

คลิกModify
rds_timezone-7

เลื่อนลงมาด้านล่างที่หัวข้อ▼ Additional configuration
แล้วเปลี่ยน DB parameter group โดยเลือก Parameter group ของเราที่สร้างไปเมื่อสักครู่ เช่นtinnakorn-rds-parameter-groupจากนั้นคลิกContinueที่ด้านล่างสุด
rds_timezone-8

เลือกApply immediatelyและคลิกModify cluster
rds_timezone-9

เมื่อขึ้น Modifying แล้วรอจนกว่า Status จะขึ้นAvailableตามรูปภาพ
rds_timezone-10

จากนั้นกลับมาที่หน้า PuTTy อีกครั้ง แล้วรันคำสั่งนี้เพื่อเพิ่มข้อมูลลง table

MySQL [tinnakorn]> insert into test_datetime(id, dt) value (2, NOW());    // รันคำสั่งนี้เพื่อเพิ่มข้อมูลลง table
Query OK, 1 row affected (0.00 sec)

MySQL [tinnakorn]>


รันคำสั่งนี้เพื่อเรียกดูข้อมูลใน table จะเห็นว่าข้อมูล Timezone เป็น+07หรือเขตเวลาปัจจุบันของประเทศไทยเรียบร้อยแล้ว

MySQL [tinnakorn]> select * from test_datetime;
+------+---------------------+
| id   | dt                  |
+------+---------------------+
|    1 | 2022-04-08 08:01:40 |
|    2 | 2022-04-08 15:17:18 |    // Timezon ปัจจุบันของประเทศไทย
+------+---------------------+
2 rows in set (0.00 sec)

MySQL [tinnakorn]>


สำหรับคนที่ทำตามขั้นตอนข้างต้นนี้แล้ว แต่การเพิ่มข้อมูล date time ครั้งที่ 2 ยังแสดง Timezone เป็น UTC ให้แก้ไขโดยการทำตามขั้นตอนด้านล่างนี้

ในกรณีที่ขึ้นpending rebootแบบนี้ ต้องแก้ไขโดยการ Reboot
rds_timezone-11

มาที่ด้านบนขวามือ เลือกActions › Reboot
rds_timezone-12

คลิกConfirm
rds_timezone-13

รอจนกว่า Status:Rebootingจะเปลี่ยนเป็น✅ Available
rds_timezone-14

เมื่อสถานะเปลี่ยนเป็น ✅ Available แล้ว เข้ามาตรวจสอบParameter groupที่หัวข้อ Configuration อีกครั้ง
ถ้าขึ้นIn syncแสดงว่าการตั้งค่าเสร็จสมบูรณ์

จากนั้นให้ทำการเพิ่มข้อมูล date time ครั้งที่ 3 ลง table อีกครั้ง ทีนี้ก็จะเห็นว่าUTCเปลี่ยนเป็น+07หรือเขตเวลาของประเทศไทยนั่นเอง
rds_timezone-15

อ่านข้อมูลเพิ่มเติมที่: Working with parameter groups

สรุป

การตั้งค่า RDS Timezone จะช่วยให้เราใช้งาน Database ได้อย่างมีประสิทธิภาพและสะดวกในเรื่องของเขตเวลามากยิ่งขึ้น ซึ่งจะส่งผลให้เราตั้งค่าฟังก์ชันต่างๆ ที่เกี่ยวกับเวลาได้ง่ายขึ้นโดยไม่ต้องมาเสียเวลาในการคำนวณ Timezone ให้ยุ่งยากนั่นเอง

บทความที่เกี่ยวข้อง