Tutorial

บันทึกการ Upgrade MySQL 5.7 เป็น 8 ความฮาจึงเกิดขึ้น

By Arnon Puitrakul - 22 มิถุนายน 2022

บันทึกการ Upgrade MySQL 5.7 เป็น 8 ความฮาจึงเกิดขึ้น

เรื่องของเรื่องมันมีอยู่ว่า เมื่อวาน เราทำการ Upgrade Home Assistant เป็น Version 2022.6.4 แล้วเรื่องมันเกิด เพราะ มันไม่ Support MySQL 5.7 อีกต่อไป จะต้อง Upgrade ไปเป็น Version 8 ความฮ่าจึงบังเกิด

Configuration เดิมคือ เรามี Instance ของ MySQL อยู่บน Synology NAS ที่รันผ่าน Docker อีกทีนึง และ เรามีการ Mount เพื่อให้ Data อยู่เหมือนเดิม และเราใส่ Environment Variable เพื่อตั้งค่า Root Password เพื่อให้เราเข้ามาตั้งค่าในครั้งแรกได้ แค่นั้นเลย

วิธีการ Upgrade

ก่อนหน้านี้คิดอยู่นานว่า มันจะต่างกันขนาดไหน จนเราไปอ่าน Document ของ MySQL มันบอกให้เรามีการทำ Migration Check อะไรสักอย่างนี่แหละ แต่แน่นอนว่า Real man test on production คนจริงเว้ยยย

วิธีการมันง่ายมาก คือ เราจะต้องสร้าง Container ใหม่ที่เป็น MySQL 8 แล้วให้ชี้ไปที่ Database เดิมได้เลย แล้วมันควรจะ Migrate เองเลย และใช้เวลาไม่นาน ก็เรียบร้อยแล้ว

ความวายป่วง

แน่นอนว่า โอเค วิธีการมันดู Make Sense นะ แต่เพื่อป้องกันความบรรลัย เราเลย Copy ตัว Database File ออกมาจากของเดิม แล้วทำการสร้าง Container แล้วตั้ง Path ชี้ไป ทุกอย่างก็ดูจะไปได้สวย เอ๋ออออ แมร่งง่ายอย่างงี้ก็สบายใจหน่อย จนกระทั่ง......

เห็น Notification บน Synology ว่า MySQL Container มัน Shutdown เรื่อย ๆ เลย อันนี้เข้าได้ได้ง่าย ๆ เลย เพราะว่า เราตั้ง Always-On มา ดังนั้น มันคิดได้เรื่องเดียวเลยว่า บางอย่างเกิดขึ้น แล้วมันเด้ง Shutdown แล้ว ก็เปิดใหม่เรื่อย ๆ

จนเข้าไปเช็คที่ Log ก็คือ ไม่ได้อะไรเลย รู้แค่ว่า มันพยายามจะ Migrate แต่ไม่ผ่าน เอ้า ชิบหาย แล้วเอาไงละทีนี้ หรือว่า ใน Database เรามีอะไรที่มันแปลก ๆ แล้ว Version 8 มันไม่ได้เหรออะไรแบบนั้น จนไปอ่านใน Document ละเอียด ๆ อีกที

มันบอกว่า เราจะต้องปิด Container ตัวเก่าก่อน หรือว่า ๆๆๆๆๆๆๆๆๆๆๆๆ เลยเอาให้ ลองปิด Container ตัวเดิมออกไปก่อน แล้วก๊อป Database File ทั้งหมดออกมา แล้วทำเหมือนเดิมเลย ปรากฏว่า อ้าว รอดโว้ยยยยยยย

สรุป

เรื่องนี้สอนให้รู้ว่า เวลาจะอ่าน Documents อะไรก็ตามรบกวนอ่านให้มันครบ เรื่องทั้งหมดที่เกือบจะทิ้ง Data ทั้งหมดไป เกิดจาก การที่เราอ่านไม่ครบว่า เราจะต้อง Stop Container ก่อนด้วย แล้วค่อยก๊อปออกมา ถึงจะทำได้ ดังนั้นก็เวลาอ่านก็อ่านให้ครบเด้อ

Read Next...

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

นอกจากการทำให้ Application รันได้แล้ว อีกเรื่องที่สำคัญไม่แพ้กันคือการวางระบบ Monitoring ที่ดี วันนี้เราจะมาแนะนำวิธีการ Monitor การทำงานของ MySQL ผ่านการสร้าง Dashboard บน Grafana กัน...

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

จากตอนที่แล้ว เราเล่าในเรื่องของการ Harden Security ของ SSH Service ของเราด้วยการปรับการตั้งค่าบางอย่างเพื่อลด Attack Surface ที่อาจจะเกิดขึ้นได้ หากใครยังไม่ได้อ่านก็ย้อนกลับไปอ่านกันก่อนเด้อ วันนี้เรามาเล่าวิธีการที่มัน Advance มากขึ้น อย่างการใช้ fail2ban...