Mindphp.com เว็บ สอนสร้างเว็บไซต์ ฐานข้อมูล php Javascript Ajax Jquery Html CSS CMS CRM และ เว็บเซอเวอร์ Hosting Web Server สอน Joomla phpbb JpGraph
Home บทความ WebServer การทำ Replicate MySQL เก็บข้อมูลของเราไว้สองเครื่อง

การทำ Replicate MySQL เก็บข้อมูลของเราไว้สองเครื่อง

WebServer

การทำ 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


User Rating: / 2
แย่ดีที่สุด 

บทความใกล้เคียง


หน้าเว็บบอร์ด Programming - PHP ตั้งกระทู้ใหม่ ใน Programming - PHP, phpBB3, SMF, Joomla, Wordpress, CMS CRM ตั้งกระทู้ใหม่ ใน phpBB3, SMF, Joomla, Wordpress, CMS CRM, JavaScript & Jquery Ajax ตั้งกระทู้ใหม่ ใน JavaScript & Jquery Ajax, SQL - Database ตั้งกระทู้ใหม่ ใน SQL - Database, ถาม - ตอบ คอมพิวเตอร์ ตั้งกระทู้ใหม่ ใน ถาม - ตอบ คอมพิวเตอร์, PHP Knowledge ตั้งกระทู้ใหม่ ใน PHP Knowledge, PHP News ตั้งกระทู้ใหม่ ใน PHP News, HTML CSS ตั้งกระทู้ใหม่ ใน HTML CSS, Free PHP Code Download script ตั้งกระทู้ใหม่ ใน Free PHP Code Download script, Web Hosting Review - Free Host Share Host VPS ตั้งกระทู้ใหม่ ใน Web Hosting Review - Free Host Share Host VPS
หัวข้อกระทู้ ตอบ เปิดดู โดย
จะดึงค่าตัวแปลออกมาใช้ยังไงครับ
โดย fa12mkungz 2012/05/17 18:48 บอร์ด JavaScript & Jquery Ajax
0 1 วันนี้ 11:48
โดย fa12mkungz
รบกวนสอบถามการรับค่าจาก textfile
โดย butterney 2012/05/15 19:16 บอร์ด Programming - PHP
6 121 2012/05/16 20:41
โดย butterney
มีปัญหาอ้ะครับ มาช่วยหน่อยนะครับ
โดย namkabz 2012/05/17 01:19 บอร์ด Programming - PHP
0 34 2012/05/16 18:19
โดย namkabz
สอบถาม เรื่อง "การสร้างดาต้าเบสสำหรับ Backup ครับ"
โดย Chayyim 2012/05/16 23:05 บอร์ด SQL - Database
0 41 2012/05/16 16:05
โดย Chayyim
ช่วยหน่อยคัฟ ไม่เก่ง PHP แต่พึ่งเริ่มทำงาน ติดปัญหาซะแร้ววว
โดย M&N 2012/05/04 16:03 บอร์ด Programming - PHP
3 431 2012/05/16 15:54
โดย tohkai_php
HTML5 สำหรับ Yii Framework
โดย mindphp 2012/04/17 09:32 บอร์ด PHP Knowledge
1 297 2012/05/16 15:50
โดย tohkai_php
รับสมัครพนังงานต่ำแหน่ง it support ครับ
โดย tohkai_php 2012/05/16 22:44 บอร์ด PHP News
0 46 2012/05/16 15:44
โดย tohkai_php
html5 + javascript เสมือน apps mobile เนียนมากๆครับ
โดย tohkai_php 2012/05/16 22:43 บอร์ด Free PHP Code Download script
0 45 2012/05/16 15:43
โดย tohkai_php
รบกวนขอความรู้ครับ
โดย Sum76 2009/02/06 20:13 บอร์ด Programming - PHP
3 398 2012/05/16 10:50
โดย malangtub
ขั้นตอนการทำงาน ระหว่าง Client - เว็บไซต์เรา และ facebook
โดย mindphp 2011/12/13 08:08 บอร์ด Programming - PHP
1 582 2012/05/16 10:45
โดย malangtub
ใช้ php สร้าง WebServices ด้วย PHPSoap
โดย batman1292 2012/05/08 03:02 บอร์ด PHP Knowledge
5 666 2012/05/16 10:35
โดย malangtub
ถามเกี่ยวกับสคริป php หน่อยคับ โทษทีถ้าถามผิดห้อง
โดย youscoms 2012/04/24 01:49 บอร์ด Programming - PHP
4 623 2012/05/16 10:24
โดย บุคคลทั่วไป
ปัญหาการติดตั้ง magento Database connection error.
โดย docman 2012/04/24 21:13 บอร์ด Programming - PHP
2 336 2012/05/16 10:22
โดย malangtub
php มีคำสั่ง block แถบเมนูไหมค่ะ
โดย NatoOne 2012/04/21 23:01 บอร์ด Programming - PHP
6 594 2012/05/16 10:21
โดย malangtub
Count down Javascript โปรเจ็คเกี่ยวกับการทำข้อสอบ
โดย ultraman_neww 2012/05/06 02:50 บอร์ด Programming - PHP
4 453 2012/05/16 10:16
โดย malangtub
ถามเกี่ยวกับหน้า login และ timestamp หน่อยครับ
โดย OneLifeBegin 2012/04/24 18:25 บอร์ด Programming - PHP
13 1612 2012/05/16 08:41
โดย ekaja
ที่ตั้งการ upload
โดย Pleumiie 2012/04/24 23:08 บอร์ด Programming - PHP
6 394 2012/05/16 08:30
โดย ekaja
เพิ่มพลังในการทำงานด้วยสิ่งนี้ดีกว่า อิอิ
โดย oliveen 2012/05/15 23:24 บอร์ด โหลดโปรแกรม พูดคุยเรื่องทั่วไป จับฉ่าย
1 242 2012/05/15 16:24
โดย starseed

New Members

sirintra : 16/05/2012 ปาริชาติ รัชฎาศรี : 16/05/2012 margarin : 16/05/2012 Chayyim : 16/05/2012 masteriii : 16/05/2012 ekaja : 16/05/2012 starseed : 15/05/2012 chanthasone : 15/05/2012 butterney : 15/05/2012 True_net : 15/05/2012 bethezank : 15/05/2012 potae2424 : 15/05/2012 theoldza123 : 14/05/2012 nano  kigk : 14/05/2012 numtip : 14/05/2012 bonus82 : 13/05/2012 momay : 13/05/2012 ploy171499 : 13/05/2012 kai2104 : 12/05/2012 ouizzzz : 11/05/2012