สอนทำ MySQL replication ด้วย Percona

สืบเนื่องจากงานจากการแสดงการทำ MySQL Replica ด้วย Percona ในงานสัมมนา “DomePress ปั้นเว็บด้วย WordPress รับเพจวิววันละล้าน” เมื่อวันที่ 27 สิงหา 59

ในส่วนของ script ที่ใช้สร้าง MySQL replication ตามนี้ครับ

1. สร้างไฟล์ master.cnf

[mysqld]
server-id=1
binlog_format=ROW
log-bin

2. รัน docker แล้ว map ไฟล์ master.conf

docker run --name masterdb -p 3306:3306 -v $PWD/master.cnf:/etc/mysql/conf.d/master.cnf -v $PWD/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysecretpass -d percona:5.6

คำอธิบายพารามีเตอร์

-p 3306:3306 คือ map Port 3306 จาก host ไปที่ container
-v $PWD/master.cnf:/etc/mysql/conf.d/master.cnf คือ map config จาก host เข้าไปใน container
-v $PWD/master/data:/var/lib/mysql คือ map ที่เก็บ data เข้าไปใน container
-e MYSQL_ROOT_PASSWORD=mysecretpass คือการกำหนดรหัสผ่านสำหรับ user root

3. สร้าง user ชื่อ repl สำหรับทำ replica พร้อมกำหนด password

docker exec -ti masterdb 'mysql' -uroot -pmysecretpass -e "GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'slavepass'" -vvv

แสดงสถานะปัจจุบันของ master db

docker exec -ti masterdb 'mysql' -uroot -pmysecretpass -e "SHOW MASTER STATUS" -vvv

4. สร้างไฟล์ slave.cnf โดยกำหนด server-id ให้ต่างจาก master

[mysqld]
server-id=2

5. รัน docker แล้ว map ไฟล์ slave.conf

docker run --name slavedb -d -v $PWD/slave.cnf:/etc/mysql/conf.d/slave.cnf -v $PWD/slave/data:/var/lib/mysql --link masterdb:mysql -e MYSQL_ROOT_PASSWORD=mysecretpass -d percona:5.6

คำอธิบายพารามีเตอร์

-d -v $PWD/slave.cnf:/etc/mysql/conf.d/slave.cnf คือ map slave.cnf เป็น config สำหรับ slave db
-v $PWD/slave/data:/var/lib/mysql คือ map สถานที่เก็บ data
--link masterdb:mysql คือ เชื่อม masterdb ในชื่อ mysql
-e MYSQL_ROOT_PASSWORD=mysecretpass คือการกำหนดรหัสผ่าน

แสดงสถานะของ slave ซึ่งต้องเป็น empty เพราะยังไม่เริ่มทำ replica

docker exec -ti slavedb 'mysql' -uroot -pmysecretpass -e"SHOW SLAVE STATUS\G" -vvv

6. เปลี่ยนจาก local binlog ไปใช้ที่ master แทน

docker exec -ti slavedb 'mysql' -uroot -pmysecretpass -e'change master to master_host="mysql",master_user="repl",master_password="slavepass",master_log_file="mysqld-bin.000004",master_log_pos=310;' -vvv

7. ให้เริ่มทำงานในโหมด slave

docker exec -ti slavedb 'mysql' -uroot -pmysecretpass -e"START SLAVE;" -vvv

ตรวจสอบสถานะการทำงาน จะเป็น binlog ล่าสุดตาม master

docker exec -ti slavedb 'mysql' -uroot -pmysecretpass -e"SHOW SLAVE STATUS\G" -vvv

หรือดาวน์โหลด script ได้ที่ http://goo.gl/1YcMpo