บันทึกการทำ Replicate บน Debian
วันที่ 17 ส.ค. 54 + 00:00.00 , กลุ่ม MySQL , ป้าย debian, mysql, replicate
1. สร้าง User ของ MySql ที่ฝั่ง Master
ขั้นแรกสุด สร้าง User ของ MySQL เพื่อใช้สำหรับการ Replicate ก่อน
กากๆ อย่างผม ขอแนะนำให้ใช้ phpMyAdmin ในการสร้างครับ ง่ายดี
ขั้นตอนการสร้าง ไม่มีอะไรพิเศษ เพราะดันมีเมนู สร้างมาให้ต่างหากเลย ตามรูปครับ

ขอแนะนำว่า ให้ Fix IP ของเครื่อง Slave ลงไปด้วยเลย ตอนกำหนดโฮส จะได้ปลอดภัยขึ้นอีกระดับหนึ่ง
2. การ Config ค่า my.cnf ฝั่ง Master
วางไว้หลัง [mysqld] นะจ๊ะ
อธิบาย ตัวแปลสำคัญๆ มีแค่
3. การ Config ค่า my.cnf ฝั่ง Slave
วางไว้หลัง [mysqld] เหมือนกัน
อธิบาย ตัวแปลสำคัญๆ มีแค่
4. คำสั่ง scp ดึงข้อมูลจากอีกเครื่อง
คำสั่ง scp ที่มัน อรรถประโยชน์จริงๆ เดี๋ยวว่าจะเขียน วิธ๊ใช้คำสั่งนี้ แบบต่างๆ อีกที
ขั้นแรก เริ่มจาก stop mysql ทั้ง 2 ฝั่ง ก่อน (เพื่อไม่ให้ข้อมูลมันเพิ่มระหว่างกำหลัง copy)
จากนั้น ใช้คำสั่งแบบนี้ ที่เครื่อง slave
แล้ว มันจะถาม password root มาให้เรากรอก
(ถ้าครั้งแรก มันจะถามเรื่องการยอมรับ สิทธิ์ อะไรซักอย่างก่อน เหมือนต่อเรา ssh เข้า server ครั้งแรก)
กรอก password เสร็จ กด enter ถ้าไม่มีอะไรผิดพลาด ระบบ ก็จะเริ่ม copy ข้อมูล จากอีกเครื่อง มายัดใส่เครื่องเราทันที
เมื่อ copy เสร็จ อย่าลืมใช้คำสั่ง
ด้วยเพื่อให้ MySQL ใช้งานได้
5. สั่งให้เริ่มทำ Replicate
ผมอ่านตามเว็บอื่นๆ มันจะมีคำสั่ง start slave อะไรไม่รู้ด้วย ผมก็งงๆ
เพราะ พอสั่ง start mysql server ทั้งคู่ ปุ๊บ มันก็เริ่ม replicate mysql ทันที (แถมข้อมูล ก็ตรงกันดีด้วย)
ก็เลย งงๆ ว่า ลืมข้ามขั้นตอนอะไรรึป่าว แต่ยังไง ก็ใช้งานได้ ตามที่ต้องการแล้วล่ะ
พอ start mysql เสร็จ ระหว่างนี้ คนยังเข้าใช้งานไม่เยอะ ขอแนะนำให้ mysqlcheck ด้วย ทั้ง 2 เครื่องเลย ด้วยคำสั่งนี้
เพื่อความแน่นอนของข้อมูลอันมีค่าของเรา
ปล. ผมมือใหม่นะ มีเหตุการณ์ ทำให้ต้องมาทำเอง
ขั้นแรกสุด สร้าง User ของ MySQL เพื่อใช้สำหรับการ Replicate ก่อน
กากๆ อย่างผม ขอแนะนำให้ใช้ phpMyAdmin ในการสร้างครับ ง่ายดี
ขั้นตอนการสร้าง ไม่มีอะไรพิเศษ เพราะดันมีเมนู สร้างมาให้ต่างหากเลย ตามรูปครับ

ขอแนะนำว่า ให้ Fix IP ของเครื่อง Slave ลงไปด้วยเลย ตอนกำหนดโฮส จะได้ปลอดภัยขึ้นอีกระดับหนึ่ง
2. การ Config ค่า my.cnf ฝั่ง Master
server-id = 111 log_bin = mysql-bin expire_logs_days = 10 max_binlog_size = 100M binlog_ignore_db = mysql, .....
วางไว้หลัง [mysqld] นะจ๊ะ
อธิบาย ตัวแปลสำคัญๆ มีแค่
- server-id ... เป็นหมายเลข ของ server ซึ่งเรากำหนดเอง เลขอะไรก็ได้ แต่ปกติผม จะใช้ หมายเลข IP (ชุดที่ 4) ของเครื่อง ไปเลย ง่ายดี
- binlog_ignore_db ... ฐานข้อมูลที่ ไม่ต้องการ จะทำ replicate
- ส่วนอันอื่นๆ ก็ ไม่มีอะไรพิเศษ ตั้งตามๆ default เอา เอาไว้ มันไม่เวริค ค่อยไป ไล่ดูว่า ต้องปรับค่าอะไร
3. การ Config ค่า my.cnf ฝั่ง Slave
server-id = 222 master-host = 8.8.8.111 master-user = replication master-password = replication master-connect-retry = 30 relay-log=relay-bin relay-log-space-limit=1024M slave-skip-errors=all
วางไว้หลัง [mysqld] เหมือนกัน
อธิบาย ตัวแปลสำคัญๆ มีแค่
- master-host, master-user, master-password ... ข้อมูลสำหรับการเชื่อมต่อ ไปที่ เครื่อง master
- master-connect-retry ... เวลาเชื่อมต่อเครื่อง master ไม่ได้ จะให้ลองอีกกี่ครั้ง ถึงจะม้วนเสื่อกลับบ้านนอน
4. คำสั่ง scp ดึงข้อมูลจากอีกเครื่อง
คำสั่ง scp ที่มัน อรรถประโยชน์จริงๆ เดี๋ยวว่าจะเขียน วิธ๊ใช้คำสั่งนี้ แบบต่างๆ อีกที
ขั้นแรก เริ่มจาก stop mysql ทั้ง 2 ฝั่ง ก่อน (เพื่อไม่ให้ข้อมูลมันเพิ่มระหว่างกำหลัง copy)
จากนั้น ใช้คำสั่งแบบนี้ ที่เครื่อง slave
scp -r root@8.8.8.111:/var/lib/mysql/\{database1,database2 ... ,databaseN\} /var/lib/mysqlแล้ว มันจะถาม password root มาให้เรากรอก
(ถ้าครั้งแรก มันจะถามเรื่องการยอมรับ สิทธิ์ อะไรซักอย่างก่อน เหมือนต่อเรา ssh เข้า server ครั้งแรก)
กรอก password เสร็จ กด enter ถ้าไม่มีอะไรผิดพลาด ระบบ ก็จะเริ่ม copy ข้อมูล จากอีกเครื่อง มายัดใส่เครื่องเราทันที
เมื่อ copy เสร็จ อย่าลืมใช้คำสั่ง
chown -R mysql: /var/lib/mysql/database1 chown -R mysql: /var/lib/mysql/database2 ... chown -R mysql: /var/lib/mysql/databaseN
ด้วยเพื่อให้ MySQL ใช้งานได้
5. สั่งให้เริ่มทำ Replicate
ผมอ่านตามเว็บอื่นๆ มันจะมีคำสั่ง start slave อะไรไม่รู้ด้วย ผมก็งงๆ
เพราะ พอสั่ง start mysql server ทั้งคู่ ปุ๊บ มันก็เริ่ม replicate mysql ทันที (แถมข้อมูล ก็ตรงกันดีด้วย)
ก็เลย งงๆ ว่า ลืมข้ามขั้นตอนอะไรรึป่าว แต่ยังไง ก็ใช้งานได้ ตามที่ต้องการแล้วล่ะ
พอ start mysql เสร็จ ระหว่างนี้ คนยังเข้าใช้งานไม่เยอะ ขอแนะนำให้ mysqlcheck ด้วย ทั้ง 2 เครื่องเลย ด้วยคำสั่งนี้
mysqlcheck --silent --auto-repair --all-databases -uroot -p
เพื่อความแน่นอนของข้อมูลอันมีค่าของเรา
ปล. ผมมือใหม่นะ มีเหตุการณ์ ทำให้ต้องมาทำเอง

ไม่สามารถแสดงความคิดเห็นได้ จำเป็นต้อง เข้าระบบสมาชิก ก่อน หรือ สมัครสมาชิกใหม่