COLO.in.th > คลังความรู้ > Database > Config MySQL Replication
การคอนฟิก Replication เป็นการป้องกันการเสียหาย ถ้าเครื่องหลักมีปัญหา ข้อมูลที่ถูกเก็บไว้ในเครื่องสำรอง ก็ยังสามารถใช้งานได้
ระบบทดสอบ
ตัวอย่างในบทความนี้ จะทดสอบบนเครื่องสองเครื่องที่ติดตั้ง CentOS 5.4 และ MySQL 5.1.43 เรียบร้อยแล้ว
เครื่อง Master
- ip: 192.168.1.1
- hostname: centos54-a
เครื่อง Slave
- ip: 192.168.1.2
- hostname: centos54-b
ตัวอย่างการใช้คำสั่ง rpm เพื่อตรวจสอบเวอร์ชั่นของ MySQL ที่ติดตั้ง
[root@centos54-a ~]# rpm -qa | grep -i mysql MySQL-server-community-5.1.43-1.rhel5 MySQL-client-community-5.1.43-1.rhel5 MySQL-shared-compat-5.1.43-1.rhel5
หมายเหตุ
- MySQL 5.1.43 ที่ทดสอบนี้ ใช้เวอร์ชั่นที่ดาวน์โหลดจาก http://dev.mysql.com
- แนะนำให้ใช้ MySQL เวอร์ชั่นเดียวกันบนเครื่อง Master และ Slave
เครื่อง Master – สร้าง user สำหรับ Replication
เริ่มต้น ต้องสร้าง user ของ MySQL บนเครื่อง Master เพื่ออนุญาตสิทธิในการทำ ‘REPLICATION’ จากเครื่อง Slave
ตัวอย่างการสร้าง user ชื่อ ‘repl’ และรหัส ‘repl1234’เพื่อให้สิทธิการทำ REPLICATION จากเครื่องที่มี ip 192.168.1.2
[root@centos54-a ~]# mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.2' IDENTIFIED BY 'repl1234';
เครื่อง Master – คอนฟิก Replication Master
บนเครื่อง Master ปิดเซอร์วิส MySQL แล้วแก้ไขไฟล์ /etc/my.cnf เพื่อเปิดคุณสมบัติ binary log (log-bin) และเซ็ต server-id
[root@centos54-a ~]# service mysql stop Shutting down MySQL.. [ OK ]
ตัวอย่างไฟล์คอนฟิก /etc/my.cnf เพื่อคอนฟิกเป็น Replication Master
[root@centos54-a ~]# cat /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=1
ใช้คำสั่ง service เพื่อรันเซอร์วิส MySQL
[root@centos54-a ~]# service mysql start Starting MySQL. [ OK ]
เครื่อง Master – ตรวจสอบสถานะของ Master Binary Log
บนเครื่อง Master ใช้คำสั่ง SHOW MASTER STATUS ตรวจสอบสถานะของ Master Binary Log
เราจะใช้ค่า ‘File’ และ ‘Position’ เพื่อระบุบนเครื่อง Slave
[root@centos54-a ~]# mysql -u root -p
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 224 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)เครื่อง Slave – คอนฟิก Replication Slave
บนเครื่อง Slave ปิดเซอร์วิส MySQL เพื่อแก้ไขคอนฟิกไฟล์ /etc/my.cnf
[root@centos54-b ~]# service mysql stop Shutting down MySQL.. [ OK ]
เบื้องต้นบนเครื่อง Slave คอนฟิกแค่ ‘server-id’ ที่มีค่าแตกต่างจากเครื่อง Master
[root@centos54-b ~]# cat /etc/my.cnf [mysqld] server-id=2
รันเซอร์วิส MySQL บนเครื่อง Slave
[root@centos54-b ~]# service mysql start Starting MySQL. [ OK ]
ใช้คำสั่ง CHANGE MASTER เพื่อระบุ ip ของ Master ชื่อ user, password ที่ใช้เพื่อการทำ Replication และต้องระบุค่า log_file (File) และ log_pos (Position) ที่ได้จากผลลัพธ์ในการรันคำสั่ง SHOW MASTER STATUS บนเครื่อง Master
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='repl', MASTER_PASSWORD='repl1234', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=224; Query OK, 0 rows affected (0.03 sec)
รันคำสั่ง START SLAVE เพื่อเริ่มต้นการทำ Replicate ข้อมูลจาก เครื่อง Master
mysql> START SLAVE; Query OK, 0 rows affected (0.00 sec)
ตรวจสอบสถานะ Replication บนเครื่อง Slave
mysql> SHOW SLAVE STATUS \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.1 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 244 Relay_Log_File: centos54-b-relay-bin.000004 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 244 Relay_Log_Space: 411 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: 1 row in set (0.00 sec)หากคอนฟิกถูกต้อง ค่า ‘Slave_IO_State’ จะแสดงเป็น ‘Waiting for master to send event’
ทดสอบการ Replication
เพื่อง่ายต่อการแยกแยะระหว่าง Master และ Slave ในที่นี้จะคอนฟิก mysql prompt เป็น mysql-1> และ mysql-2> ตามลำดับ
การคอนฟิก prompt บนเครื่อง Master
[root@centos54-a ~]# mysql -u root -p Enter password:
mysql> PROMPT mysql-1> PROMPT set to 'mysql-1> ' mysql-1>การคอนฟิก prompt บนเครื่อง Slave
[root@centos54-b ~]# mysql -u root -p Enter password:
mysql> PROMPT mysql-2> PROMPT set to 'mysql-2> ' mysql-2>ทดสอบสร้าง database บนเครื่อง Master
mysql-1> CREATE DATABASE test1; Query OK, 1 row affected (0.01 sec)
mysql-1> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test1 | +--------------------+ 3 rows in set (0.00 sec)ข้อมูลการสร้าง database จะถูกส่งต่อ (replicate) ไปยังเครื่อง Slave โดยอัตโนมัติ
mysql-2> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test1 | +--------------------+ 3 rows in set (0.00 sec)สร้าง table และทดสอบการ INSERT ข้อมูล
mysql-1> CONNECT test1 mysql-1> CREATE TABLE books (id INTEGER, name VARCHAR(255)); mysql-1> INSERT INTO books VALUES (1, 'how to setup...'); mysql-1> INSERT INTO books VALUES (2, 'how to read...');mysql-1> SELECT * FROM books; +------+-----------------+ | id | name | +------+-----------------+ | 1 | how to setup... | | 2 | how to read... | +------+-----------------+ 2 rows in set (0.00 sec)
การเปลี่ยนแปลงบนเครื่อง Master จะถูก replicate ไปยังเครื่อง Slave โดยอัตโนมัติ
mysql-2> CONNECT test1; mysql-2> SELECT * FROM books; +------+-----------------+ | id | name | +------+-----------------+ | 1 | how to setup... | | 2 | how to read... | +------+-----------------+ 2 rows in set (0.00 sec)
ที่มา http://spalinux.com/2010/02/configure_mysql_replication
บันทึกสู่รายการโปรดของฉัน พิมพ์หัวข้อนี้
Powered by WHMCompleteSolution