Sunday, October 25

mysql replication on raspberry pi

mysql replication on raspberry pi    Mysql server เป็นฐานข้อมูลที่นิยมใช้กันอย่างแพร่หลาย เพราะ ฟรี และรองรับการเชื่อมต่อที่เยอะๆ ได้อย่างดีเยี่ยม และใน Raspberry pi ของเราเอง ก็สามารถติดตั้ง MySQL server ได้อยู่แล้ว ณ ตอนนี้ หากติดตั้ง เราจะได้ mysql server v 5.5 up 

   เราสามารถใช้บอร์ด raspberry pi ของเราในการเก็บข้อมูลไว้ใน MySQL ได้เลย และสามารถให้ user เข้ามาเรียกดูข้อมูลได้ผ่านทางหน้าเว็บ CGI มา query ข้อมูลออกจากฐานข้อมูล ไปแสดงผลบนหน้าเว็บอีกที หรือใช้ IDE พวก mysqlworkbench , mysqlfront ในการเขียน sql ดึงข้อมูลไปใช้งานอีกทีก็ได้ แต่กระนั้นก็ตาม การที่เราจะปล่อยให้เจ้า raspberry pi ของเรา รองรับจำนวน user ที่ต้องเรียกดูข้อมูล โดยที่จำนวน user มีจำนวนการเชื่อมต่อที่เพิ่มมากขึ้น จำนวนครั้งในการเรียกดูมากขึ้น แล้วมาดึงข้อมูลจากบอร์ด raspberry pi ตรงๆ อาจจะไม่ค่อยจะดีเท่าไหร่นัก แลดูจะเกินประสิทธิภาพของบอร์ดไปสักหน่อย แต่ ถ้าเราจะเก็บไว้ดูคนเดียวก็ไม่เป็นไร

   หากเราต้องการที่จะทำการสำรอง หรือต้องการให้ user ทำการเรียกค้นข้อมูลจากฐานข้อมูลแม่ข่ายเครื่องอื่นหล่ะ โดยข้อมูลที่เรียกดู ก็เหมือนข้อมูลที่อยู่ใน raspberry pi หล่ะ เราจะทำอย่างไร

    ใน mysql มีวิธีการหนึ่งที่เรียกว่า replication คือ การที่เครื่อง slave server มีข้อมูลเหมือนกับ master server และเมื่อ master server มีการเปลียนแปลงข้อมูลภายใน field ข้อมูลนั้นจะถูกอัพเดทไปที่ slave server ทันที โดยที่เราไม่ต้องเขียน script crond job เพื่ออัพเดทข้อมูลในฐานข้อมูลเลย ดังนั้น จึงมั่นใจได้ว่า ข้อมูลทั้ง สองแม่ข่าย ระหว่าง  master server และ slave server จะเหมือนกันแป๊ะ และนอกจากนั้น เรายังสามารถเพิ่มจำนวน slave server ได้อีกด้วย ข้อมูลไม่สูญหายแน่ๆ หากเกิดความดผิดพลาดกับ master server หรือ slave server บางตัว

   ในทีนี้ ผมจะทดลองใน local network ก่อน โดยที่ Raspberry pi ของผม มี IP เป็น 192.168.2.109 โดยเราจะให้เป็น master server ส่วน PC ของผมจะให้เป็น Slave server ซึ่งเป็น IP 192.168.2.101 โดยทั้งคู่ได้ติดตั้ง mysql server ไว้อยู่แล้ว เป็นเวอร์ชั่น 5.5 ขึ้นไป 

ขั้นตอนแรก ให้เราทำการ config /etc/mysql/my.cnf ที่อยู่บน raspberry pi ก่อน

sudo /etc/init.d/mysql stop   หยุดการทำงานของ mysql ก่อน

sudo nano /etc/mysql/my.cnf  

จากนั้นมองหา [mysqld] แล้วเพิ่มค่าเข้าไป

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

ทำการบันทึกไฟล์ แล้วสั่งให้ mysql ทำงาน หากไม่มีอะไรผิดพลาด เราน่าจะสั่ง start service mysql ได้

sudo /etc/init.d/mysql start

จากนั้น เราจะทำการเพ่ิม user สำหรับให้ slave เป็น user account สำหรับเข้ามา replicate ข้อมูลจาก master โดยการเพิ่ม user ดังนี้  ยังอยู่ที่ raspberry pi อยู่นะครับ  พิมพ์คำสั่งที่ console

mysql –uroot –p  แล้วกด enter ถ้ามันถามหา password ก็ใส่ password ไป สำใครที่ตั้ง password  เมื่อเข้าไปแล้ว  prompt เราจะกลายเป็น mysql>  ให้เราสร้าง user ด้วยคำสั่ง sql ต่อไปนี้

mysql>CREATE USER 'repl'@'192.168.2.101' IDENTIFIED BY 'merlin';

mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.2.101';

เรากำลังเพิ่มให้มี user ชื่อ repl โดยสามารถเชื่อมต่อมาจาก ip 192.168.2.101 เท่านั้น ซึ่งก็คือเครื่อง slave ของเรา กำหนดให้ password คือ merlin

ต่อมา ให้สร้างจุด Check Point เพื่อให้เป็นจุดเริ่มต้นสำหรับการ Replicate โดยใช้คำสั่ง sql

mysql>FLUSH TABLES WITH READ LOCK;
mysql>SHOW MASTER STATUS;
mysql>UNLOCK TABLES;

mysql replication on raspberry pi

ค่า   mysql-bin.000003 และ 2717  ให้จดจำค่านี้ไว้ ไปกำหนด ที่ฝั่ง slave

อันดับต่อไป เราจะมา config ค่าที่เครื่อง slave กันบ้าาง โดยที่เครื่อง slave ของผมนี้ เป็น windows 7 ที่ติดตั้ง xampp ไว้อยู่แล้ว ซึ่งใน xampp จะมี mysql server มาให้อยู่แล้ว การกำหนดค่า config สำหรับบน windows นั้น จะอยู่ที่ไฟล์ my.ini ซึ่งจะแตกต่างออกไปจากของ linux 

ทำการหยุด service ของ mysql ก่อน ถ้าเป็น xampp เราก็กดปุ่ม stop ได้เลย ดังภาพ แล้วทำการเปิดไฟล์ my.ini

mysql replication on raspberry pi

มองหา [mysqld] แล้วทำการเพิ่ม หรือ uncomment หากมันมีอยู่แล้ว ให้ได้ตามนี้ ครับ

server-id=2 อาจจะต้อง comment บรรทัดที่มันเขียนว่า server-id=1 ถ้ามันมีอยู่  บันทึก และทำการ start service mysql ขึ้นมา หากไม่มีอะไรผิดพลาด เราน่าจะ start mysql service ได้

เพื่อนๆ อาจจะใช้ mysqlfron เพื่อเชื่อมต่อกับ mysql ที่เครื่อง slave เพื่อรันคำสั่ง sql ต่อไปนี้

mysql>CHANGE MASTER TO

  MASTER_HOST='192.168.2.109',

  MASTER_USER='repl',

  MASTER_PASSWORD='merlin',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='mysql-bin.000003',

  MASTER_LOG_POS=2717,

  MASTER_CONNECT_RETRY=10;

จะเห็นว่า เราต้องเอาค่า mysql-bin แล้ว position จากข้อที่แล้ว มากำหนดในการสั่งให้ slave มองไปที่ master ตรงตำแหน่ง checkpoint ที่ได้

จากนั้น เริ่มทำการ replicate ด้วยคำสั่ง sql ดังนีั้

mysql>start slave;

mysql>show slave status;

ทดสอบแล้วเปลี่ยนแปลงข้อมูลภาพใน field ใน table ใดก็ได้ ใน master ซึ่งก็คือ Raspberry pi ของเรา และสังเกตผลลัพธ์ที่เกิดขึ้นที่ slave ซึ่งก็คือ pc ของเรา จะพบว่า ข้อมูลจะเปลี่ยนแปลงตาม master ทันที โดยที่เราไม่ต้องมานั่งกังวลกับการเขียน script crond job เพื่อทำการอัพเดทขู้อมูล หรือทำการ backup เลย และก็ไม่ต้องกังวลว่า จะต้องเปิดเครื่อง slave ไว้ตลอดหรือเปล่า เราอาาจะปิดเครื่อง slave ไปก็ได้ และเมื่อเปิดเครื่อง slave มา มันก็จะทำการเช็คว่า master มีอะไรเปลี่ยนแปลงไปจากล่าสุดที่มันเคยเช็คหรือเปล่า  ถ้ามี มันก็จะทำการ replicate ให้ทันที 

ประโยชน์ที่คิดว่าจะได้รับ ก็ตามนี้

The target uses for replication in MySQL include:

 

   Scale-out solutions - spreading the load among multiple slaves to improve performance. In this environment, all writes and updates must take place on the master server. Reads, however, may take place on one or more slaves. This model can improve the performance of writes (since the master is dedicated to updates), while dramatically increasing read speed across an increasing number of slaves.

 

   Data security - because data is replicated to the slave, and the slave can pause the replication process, it is possible to run backup services on the slave without corrupting the corresponding master data.

 

   Analytics - live data can be created on the master, while the analysis of the information can take place on the slave without affecting the performance of the master.

 

   Long-distance data distribution - if a branch office would like to work with a copy of your main data, you can use replication to create a local copy of the data for their use without requiring permanent access to the master.

อ้างอิง :

http://dev.mysql.com/doc/refman/5.0/en/replication.html

http://www.wandee.org/wordpress/?p=158

0 ความคิดเห็น:

 

แจกฟรี พื้นที่ฝากไฟล์ 15 GB

ติดตามข่าวสารผ่าน Twitter

ติดตาม Blog นี้

About Me

My photo

สวัสดีครับ ชื่อเปิ้ลนะครับ ถ้ามีอะไรให้ช่วยเหลือได้ ก็จะช่วยครับ
ผมได้สร้างบล๊อกไว้ เพื่อเก็บรวบรวมความรู้ และประสบการณ์ในการทำงานครับ แวะไปเยี่ยมชมกันได้ครับ http://mechacity.blogspot.com และบล๊อก http://faker-programmer.blogspot.com ครับ

Blog อื่นๆของฉัน

Microcontroller Electronics update

สถิติเยี่ยมชมบล๊อก