เคยอยู่ดีๆ ทำงานกับ Server ผ่าน Terminal สลึมสลือ.. aptitude เสร็จ อยากจะรีสตาร์ทเครื่อง แทนที่จะใช้คำสั่ง shutdown -r now แต่ดันผิดว่า shutdown -P now เคาะ Enter ตูม… บ้างไหม
อ้า แล้วไงหละ ก็เดินไปที่หน้าเครื่องแล้วเปิดมันขึ้นมาใหม่ก็หมดเรื่อง
แต่สำหรับผมมันไม่ใช่ ผมนั่งอยู่ที่ นคปฐม แต่ไอ้เครื่อง Server มันอยู่ห่างออกไป 650 กิโลเมตร ที่สุราษฎร์ เวลาที่ผมสั่งคำนี้ เป็นเวลาตีสี่ และรุ่งขึ้นเป็นวันอาทิตย์ แน่นอนไม่มีผีที่ไหนอยู่เฝ้าศูนย์คอมตอนตีสี่ และไม่มีใครใจดีมาทำงานวันอาทิตย์ให้เดินเข้าไปจิ้มปุ่ม Power หน้าเครื่องสักคนเลย
เครื่องเจ้ากรรมเป็น Database Server ของระบบทั้งหมดบนเว็บ ยกเว้นที่ฮิตมากอย่างกระดานข่าวพึ่งจะย้ายออกไปไม่กี่วัน ถ้าเกิดกระดานข่าวยังใช้เครื่องนี้เป็น Database หลักอยู่รับรองผมโดนเกรียนด่าแหลก
จริงๆประเด็นไม่มีอะไร ก็แค่ระบบใช้งานไม่ได้ แต่นี่มันเป็นความผิดพลาดเล็กๆน้อยๆ ที่เกิดขึ้นโดยมนุษย์ (เล็กน้อยจริงหรือ) แล้วถ้ามันเกิดความผิดพลาดโดยอุบัติเหตุ กู้คืนมาไม่ได้ง่ายๆเหมือนเดินไปจิ้มปุ่ม Power หน้าเครื่องจะเกิดอะไรขึ้น
เลยเป็นชนวนให้ต้องไปหาวิธี Clone หรือสำรองข้อมูล ซึ่งตอนนี้อยู่บน MySQL เกือบทั้งหมด ก่อนที่จะสายเกินแก้ จำได้ว่า MySQL มีเรื่อง Replication เป็นคุณสมบัติปกติอยู่แล้ว แต่ไม่เคยใช้มันสักที เอาหละคราวนี้ได้ลงมือทำ
MySQL Replication เป็นการทำงานแบบ Master - Slave คือมี Server หลักอยู่หนึ่งเครื่องเป็น Master จากนั้นเมื่อมีการเปลี่ยนแปลงข้อมูลที่เครื่อง Master ตัวเครื่อง Slave ก็จะดึงเอาข้อมูลที่ Master มาเป็น mirror เอาไว้ที่ตัวเองด้วย เราจะให้มีการสำรองข้อมูลตลอดเวลา หรือว่าจะตั้งเวลาล่วงหน้าก็ได้ เช่นสี่โมงเย็นให้ทำการสำรองข้อมูลมาไว้ที่ Slave อัตโนมัติ
ไม่เหมือนวิธีการ Black Up ข้อมูลลงมาจาก Server ในการ Back Up ข้อมูลเราใช้วิธีการดึงข้อมูลทั้งหมดลงมาเก็บไว้ที่เครื่องอื่น แต่การทำ Replication มันฉลาดพอที่จะเลือกว่ามีจุดไหนของข้อมูลที่ถูกเปลี่ยนแปลง มันเลือกที่จะปรับปรุงข้อมูลแค่จุดนั้นให้เหมือนกับ Master
ที่เครื่อง Master ในส่วน [mysqld] ให้ระบุ id
[mysqld]
server-id=1
แล้วเพิ่มสิทธิ์ให้ User จากเครื่อง Slave สามารถเข้ามาดึงข้อมูลได้ เช่น
GRANT REPLICATION SLAVE ON . TO wanchana@”slave.domain” IDENTIFIED BY ‘password’;
ทีนี้มาที่เครื่องที่เป็น Slave ให้เราเพิ่มข้อมูลของเครื่อง Master ที่จะไปดึงข้อมูลมา
[mysqld]
master-host=master.domain
master-user=wanchana
master-password=password
master-port=3306
server-id=2
สังเกตจาก config ได้ว่าเราสามารถเอาไปพลิกแพลงได้ ไม่จำเป็นจะต้องทำตามหลักการเสมอไป อยู่ที่การประยุกต์ใช้กับงานมากกว่า