Cách set timezone trong mysql

Đăng bởi Lưu Đại vào ngày 18-12-2022

Tình huống 

Hôm nay anh TL đặt setting biến môi trường cho mysql. Trong Rails để set biến môi trường trong app Rails ta thường set trong file config application.rb. Giá trị thường được lưu trong biến TZ. 
Môi trường sử dụng là docker 
Cả mình và anh TL cũng đều tưởng chỉ mình biến TZ là đủ để set biến môi trường cho mysql nên đã thêm TZ vào trong file .env và load nó vào trong docker. 
Kết quả là không được :> lúc đó đã là 6h tối rồi nhưng mình không thể tìm ra được nguyên nhân và các case Unit test bị chết rất nhiều. Chỉ tới khi sau khi về nhà ăn cơm thư giãn ngồi lại máy tính mình mới bắt đầu tiếp tục tìm hiểu và vỡ ra vấn đề.

Cách giải quyết 

Trước đó mình chỉ tập trung vào giải quyết những case unit test bị fail chứ không tìm nguyên nhân gốc rễ kể cả khi sau khi phát hiện ra db chưa được set set timezone đúng. Sau khi về nhà bình tâm lại mình bắt đầu ngồi search document của docker mysql thì thấy không có biến TZ =))) Mình quyết định quay ra search các cách để set biến môi trường cho mysql thì thấy có 3 cách và không cách nào dùng biến tz cả. Cách giải quyết đơn giản nhất là thêm 1 command —default-time-zone=+09:00 Check lại db bằng lệnh SELECT @@global.time_zone thì thấy db đã ăn theo timezone mới.

Kinh nghiệm rút ra 

Luôn đọc tài liệu chính thống trước khi làm. 
Tìm hiểu gốc rễ vấn đề rồi sửa thì sẽ nhanh hơn sửa phần ngọn (mặc dù sửa phần ngọn có vẻ sẽ nhanh hơn đối với các vấn đề đơn giản).