ให้เรตสมาชิก: 3 / 5

ดาวใช้งานดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 
การทำ Replicate MySQL
MySQL
เป็นฐานข้อมูลที่ได้รับความนิยมอย่างมากในปัจจุบัน อาจทำงานได้ดี มีเสถียรภาพ มีขนาดเล็ก ติดตั้งง่าย หาเอกสารอ้างอิงง่าย อีกทั้งยังถูกจับคู่กับ PHP ชนิดที่เรียกกันว่า ซี้ปึ๊ก กันเลยทีเดียว หมายถึงคำสั่งต่างๆ ของ PHP จะมีสามารถเรียกใช้ความสามารถของ MySQL ได้อย่างเด็มประสิทธิภาพทีเดียว ยิ่งหากได้ใช้ phpmyadmin อีกยิ่งเข้ากันเป็นปี่เป็นขลุ่ย แถมหาก Run อยู่บน Apache อีก โอ้ว เข้าแก๊ง แต่ยังขาดหัวหน้าแก๊งไปได้ไม่ได้ นั่นคือ Linux โอ อย่างนี้ต้องเรียกว่า มาเป็นทีม อาจเรียกได้ว่าเป็น Dream Team หรือทีมในฝันของนักพัฒนาเว็บแอพพลิเคชั่นเลยทีเดียว ซึ่งทีมนี้มีชื่อเล่น ว่า LAMP (Linux, Apache MySQL, PHP)

MySQL สามารถทำงานได้ทั้งระบบปฏิบัติการ Windows, Linux, Solaris, FreeBSD ทั้งแบบ 32 และ 64 Bit ซึ่งปัจจุบันที่กำลังเขียนอยู่นี้ Version 5.1.20 Beta Replicate MySQL ล่ะคืออะไร เกี่ยวข้องกันอย่างไร ? หลายท่านรู้จักการ Backup ข้อมูล หากท่านรู้จักการทำ Mirror Disk นั่นแหละ ความหมายเดียวกัน ?

ฐานข้อมูลนั้นมีความสำคัญอย่างยิ่ง เนื่องจากเว็บแอพลิเคชั่นนั้นใช้ฐานข้อมูลเก็บข้อมูลทุกสิ่งทุก ๆ อย่าง ฐานข้อมูลก็ไม่ได้ถูกโหลดเข้า Memory ได้ทั้งหมด ก็ยังคงต้องใช้ Disk ซึ่งเจ้า Disk นี่แหละ ที่ชอบสร้างปัญหาให้กับระบบงานอยู่บ่อยครั้ง หากข้อมูลที่สำคัญ เช่น ข้อมูลด้านการเงิน ข้อมูลการขายหน้าร้าน เกิดเรียกใช้งานไม่ได้ หรือหายไป ย่อมเกิดความเสียหายให้กับหน่วยงาน เป็นอย่างมาก จะดีไหมหากเรามีข้อมูลสำรองไว้ยัง Disk อีกก้อน หรือ Server อีกตัว เพื่อเป็นการลดความเสี่ยงสำหรับการสูญเสียข้อมูล เพราะฉะนั้น เรามาลองทำ Replicate MySQL กัน สิ่งที่ท่านต้องมีการ

  1. เครื่องคอมพิวเตอร์จำนวน 2 เครื่อง หรือมากกว่า เครื่องแรกเรียกว่า Master เครื่องถัดไปเรียกว่า Slave.
  2. ทั้ง 2 เครื่องลง Program MySQL โดยที่สามารถ Download ได้ที่ http://dev.mysql.com/downloads/mysql/5.1.html
฿าพรวมของการทำ Replicate MySQL


ภาพที่ 1 ภาพรวมของการทำ Replicate MySQL

ขั้นตอนที่ 1.

หากต้องการ Replicate Master ที่มีข้อมูลอยู่แล้ว จะต้อง Dump ข้อมูลออกมาเพื่อทำให้ Slave มีข้อมูลที่เท่าเทียมกันเสียก่อน

ขั้นตอนที่ 2.

สร้าง User ขึ้นมาเพื่อทำหน้าที่สำหรับทำหน้าที่ Replicate เท่านั้นในฝั่ง Master โดยใช้คำสั่ง

mysql> GRANT REPLICATION SLAVE ON *.*
    -> TO 'repl'@'%.192.168.0.20' IDENTIFIED BY 'slavepass';
* โดยที่ให้สิทธิ์ให้การ Replicate จาก User ที่ชื่อว่า repl และรหัสผ่าน slavepass ที่มาจากเครื่อง IP 192.168.0.20 เท่านั้น

ขั้นตอนที่ 3.

ฝั่ง Master เข้าไปแก้ไขไฟล์ my.ini ที่ C:Program FilesMySQLMySQL Server 5.1>my.ini โดยเพิ่มด้านล้างหัวข้อ [mysqld] ดังนี้

#
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
# ??????????-

โดยที่ :

log-bin=mysql-bin # Binary Log
server-id=1 # ลำดับ Server master กำหนด =1
innodb_flush_log_at_trx_commit=1 #สำหรับผู้ใช้ฐานข้อมูลที่เป็น InnoDB จำเ็ป็นจะต้องให้ Master
#commit งานให้เรียบร้อยก่อน ถึงจะทำการ Replicate ไปให้ Slave
sync_binlog=1 # ทำการ Sync Log สำหรับ InnoDB และหากเกิด Master Crash จะไม่ทำให้ Slave Sync ข้อมูลซ้ำ ในกรณีที่ Master ฟื้นกลับมาอีกครั้ง
ขั้นตอนที่ 4.

ฝั่ง Slave ให้เข้าไปแก้ไขไฟล์ my.ini ที่ C:Program FilesMySQLMySQL Server 5.1>my.ini เช่นเดียวกับฝั่ง Master โดยเพิ่มด้านล้างหัวข้อ [mysqld] ดังนี้

#
server-id=2
master-host=192.168.0.10
master-port=3306
master-user=repl
master-password-slavepass
master-connect-retry=30
replicate-wild-do-table= %.%
report-host=192.168.0.20
#

โดยที่
server-id=2 # ลำดับ Slave หากมี Slave มากกว่า 1 ตัวสามารถกำหนด Server-id ได้จนถึง (2 ยกกำลัง 32) -1 เครื่อง
master-host=192.168.0.10 # หมายเลข IP เครื่อง Master
master-port=3306 # กำหนด Port
master-user=repl # ชื่อ User สำหรับการ Replicate
master-password-slavepass # Password
master-connect-retry=30 # หากติดต่อ Master ไ่ม่ได้ จะติดต่อซ้ำภายใน
replicate-wild-do-table= %.% #กำหนดฐานข้อมูลที่ต้องการ Replicate %.% หมายถึง Database ทุกตัว

ขั้นตอนที่ 5.

เมื่อ Master และ Slave มีข้อมูลเท่ากันแล้ว ดังในขั้นตอนที่ 1 ให้สร้างจุด Check Point เพื่อให้เป็นจุดเริ่มต้นสำหรับการ Replicate โดยใช้คำสั่ง

	mysql> FLUSH TABLES WITH READ LOCK;
ให้เรียกดูสถานะการทำงาน เพื่อดู Binary Log name และ Offset ของ Master ดังนี้

replicatemysql5.jpg

ภาพการเรียกดู BinaryLog Name และ Offset ของ Master

Binary Log Name : mysql-bin.00004
Offset : 106

ขั้นตอนที่ 6.

กำหนดฝั่ง Client ให้ติดต่อกับฐานข้อมูล

mysql> CHANGE MASTER TO  

-> MASTER_HOST='192,168.0.10',

-> MASTER_USER='repl',

-> MASTER_PASSWORD='slavepass',

-> MASTER_LOG_FILE='mysql-bin.00004?,

-> MASTER_LOG_POS=106;
และเริ่มต้น Replicate โดยใช้คำสั่ง

mysql> START SLAVE;

เพียงเท่านี้ Slave ก็จะเริ่ม Replicate ข้อมูลจาก Master แล้วครับ

คำสั่งเพิ่มเติมในการทำ Replicate
  • ฝั่ง Master? SHOW MASTER STATUS; เพื่อเรียกดูสถานการณ์ทำงาน เพื่อดู Binary Log name และ Offset ของ Master
  • ฝั่ง Slave SHOW SLAVE STATUS;
  • SHOW PROCESSLIST;? แสดง process ของเครื่อง mysql ใช้ได้ทั้ง Master และ Slave
สรุป

การ Replicate นั้นเป็นเพียงการพอจะรับประกันได้ว่า ข้อมูลจะไม่สูญหาย แต่ไม่ได้หมายความถึงการแบ่งการทำงานเช่น การทำ Load Balance หรือแม้กระทั่ง หาก Server มีปัญหา ไม่ใช่หมายความว่า Slave จะสามารถทำงานได้ทันที ซึ่งหากต้องการทำเช่นนั้นจะมีต้องการเช็คสถานะการทำงานของตัว Master และ Slave ที่ส่วนใหญ่จะเรียกกันว่า สาย heartbeat สำหรับคอยตรวจสอบสถานะซึ่งกันและกัน ซึ่งพอจะมี Software OpenSource เช่น Ultra Monky ในการทำ Load Balance (แต่ดูเหมือนจะหยุดพัฒนาไปแล้วนะ) สามารถเข้าไปดูรายละเอียดได้ที่


แต่หากต้องการทำทุกสิ่งทุกอย่าง เช่น Replicate, Load Balance ทาง MySQL เองก็มีเทคโนโลยี Cluster ที่เหมาะสำหรับระบบที่ต้องการเสถียรภาพสูง (ซึ่งต้องแลกมาด้วยการใช้ Server อีกหลายตัว) โดยขั้นต่ำ ต้องใช้อย่างน้อย 4 ตัว สำหรับการทำ Cluster แต่รับประกันความเสถียร และประสิทธิภาพ โดยสามารถดูเอกสารประกอบได้ที่


ขอบพระคุณที่สนใจอ่าน

เอกสารอ้างอิง

 

ที่มา: cattelecom.com



กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
Microsoft เปลี่ยนชื่อ Microsoft To-Do เป็น To Do หวังให้ใช้งานแทน Wunderlis
โดย chatee supasand ศ 13 ก.ย. 2019 6:05 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
75
ศ 13 ก.ย. 2019 6:05 pm โดย chatee supasand
วิธีการ Export ข้อมูลมาเป็นไฟล์ Excel โดย phpbb
โดย Ittichai_chupol ศ 13 ก.ย. 2019 4:24 pm บอร์ด PHP Knowledge
1
104
จ 30 ก.ย. 2019 1:16 pm โดย thatsawan
อยากทราบวิธีการแก้ไข Undefined index ใน phpbb
โดย Ittichai_chupol ศ 13 ก.ย. 2019 3:26 pm บอร์ด Programming - PHP
1
127
ศ 13 ก.ย. 2019 3:36 pm โดย บุคคลทั่วไป
อยากทราบวิธีทำให้ path way มีลูกศรชี ครับ
โดย jamepiyawat ศ 13 ก.ย. 2019 2:53 pm บอร์ด Joomla Development
1
92
ศ 13 ก.ย. 2019 2:55 pm โดย tsukasaz
สอบถามครับ RML สร้างเส้นตาราง แบบนี้ยังไงอะครับ
โดย chatee supasand ศ 13 ก.ย. 2019 10:28 am บอร์ด Programming - C/C++ & java & Python
2
123
ศ 13 ก.ย. 2019 11:03 am โดย chatee supasand
Google Assistant สามารถอ่านข้อความและตอบกลับได้บนแอพTelegram, Slack และ WhatsApp
โดย jamepiyawat พฤ 12 ก.ย. 2019 6:42 pm บอร์ด Share Knowledge
0
85
พฤ 12 ก.ย. 2019 6:42 pm โดย jamepiyawat
แสดงสินค้าโดยที่ให้ สินค้าแสดงแบบสุ่ม และแสดงแค่ 3 อย่าง ทำอย่างไรครับ
โดย Patipat พฤ 12 ก.ย. 2019 6:13 pm บอร์ด Joomla Development
1
92
พฤ 12 ก.ย. 2019 6:28 pm โดย tsukasaz
Windows 10 สามารถใช้โปรแกรม PowerToys ได้แล้ว
โดย chatee supasand พฤ 12 ก.ย. 2019 6:12 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
75
พฤ 12 ก.ย. 2019 6:12 pm โดย chatee supasand
ดึงชื่อรูปภาพ และนำชื่อมาแสดงเป็นภาพอย่างไรครับ
โดย Patipat พฤ 12 ก.ย. 2019 5:13 pm บอร์ด Joomla Development
2
92
พฤ 12 ก.ย. 2019 5:20 pm โดย Patipat
ปุ่ม Remove กดแล้วไม่ยอมลบสินค้าให้ครับ
โดย jamepiyawat พฤ 12 ก.ย. 2019 4:20 pm บอร์ด Programming - PHP
4
124
พฤ 12 ก.ย. 2019 5:57 pm โดย jamepiyawat
ทำยังไงให้ hover ใน แท็ก div แล้วตัวอักษรใน แท็ก div มันเปลี่ยนสีครับ
โดย jamepiyawat พฤ 12 ก.ย. 2019 3:49 pm บอร์ด HTML CSS
4
105
พฤ 12 ก.ย. 2019 4:13 pm โดย jamepiyawat
การบันทึกบัญชีค่าเบี้ยประกันภัยกลุ่ม
โดย EyePornnipa พฤ 12 ก.ย. 2019 2:39 pm บอร์ด ถาม - ตอบ ธุรกิจ กฏหมาย ภาษี บัญชี
1
111
ส 14 ก.ย. 2019 10:25 am โดย Amp_Audit
ใช้งานฟังก์ชันแล้วขึ้นเออเร่อครับ
โดย Patipat พฤ 12 ก.ย. 2019 2:19 pm บอร์ด Joomla Development
6
131
พฤ 12 ก.ย. 2019 3:27 pm โดย Patipat
5 เหตุผล รับเขียนเนื้อหาของบทความ เพราะเหตุใดจะต้องว่าจ้างคนเขียนบทความ
โดย articleheros พฤ 12 ก.ย. 2019 11:26 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
82
พ 09 ต.ค. 2019 4:27 pm โดย LEG
ใครติดตั้ง mjupgrade ไม่ได้ เจอ Error ตอนติดตั้ง Extension com_mjupgrade
โดย mindphp พฤ 12 ก.ย. 2019 11:24 am บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS CRM
1
95
พฤ 12 ก.ย. 2019 11:32 am โดย mindphp
สอบถามเกี่ยวกับการทำ log เก็บการเข้าใช้งานของโปรแกรม wed serviec
โดย jirawoot พฤ 12 ก.ย. 2019 11:19 am บอร์ด Programming - C/C++ & java & Python
1
90
พฤ 12 ก.ย. 2019 11:58 am โดย tatiya
อยากทราบวิธีการใช้งาน unserialize() กับ serialize() ใน phpbb
โดย Ittichai_chupol พฤ 12 ก.ย. 2019 11:04 am บอร์ด Programming - PHP
0
80
พฤ 12 ก.ย. 2019 11:04 am โดย Ittichai_chupol
อยากทราบวิธ๊การแก้ไขการ Export ไฟล์ Excel แล้วเป็นภาษาต่างดาว phpbb
โดย Ittichai_chupol พฤ 12 ก.ย. 2019 10:59 am บอร์ด Programming - PHP
0
92
พฤ 12 ก.ย. 2019 10:59 am โดย Ittichai_chupol
md gallery สามารถ สร้าง ลบ ในหน้าเว็บได้ไหมครับ
โดย Jahari Aum พ 11 ก.ย. 2019 11:47 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS CRM
1
135
พฤ 12 ก.ย. 2019 12:28 am โดย mindphp
วิธีการสมัครเข้าใช้งาน Skype
โดย chatee supasand พ 11 ก.ย. 2019 6:38 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
108
พ 11 ก.ย. 2019 6:38 pm โดย chatee supasand