GIT – Góc IT xin hướng dẫn các bạn Replication với mô hình master – slave và các xử lý lỗi trong quá trình Replication trong mô hinh master – slave
Thông tin :

master.gocit.vn: 192.168.11.132

slave.gocit.vn: 192.168.11.133

Cài Mysql trên 2 server 

# yum mysql mysql-server –y

Thiết lập cho user trong mysql trên 2 server

# /usr/bin/mysqladmin -u root password ‘123456’

Cấu hình trên Master

Thêm 2 dòng sau vào file /etc/my.cnf

server-id=1
log-bin=/var/lib/mysql/mysql-bin

– Tạo user để slave dùng user này kết nối vào server replicate dữ liệu :

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’192.168.11.133’ IDENTIFIED BY ‘123456’;
mysql> FLUSH PRIVILEGES;

=> User : replication , Pass : 123456 . Chú ý phần IP là IP của slave.

– Restart lại mysql để đọc lại thông tin cấu hình mới trong /etc/my.cnf

/etc/init.d/mysqld restart

– Kiểm tra status của master server :

# mysql> show master status;

mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
mysql-bin.000001 | 98 | | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

=> Để ý phần “File” và “Position” , giá trị của chúng sẽ được dùng ở bước khai báo thông tin master server bên slave server .

Cấu hình bên Slave

Thêm dòng sau vào file /etc/my.cnf

server-id=2

– Khai báo thông tin của master server để slave có thể kết nối :

mysql> change master to master_host=’192.168.11.132′, master_user=’replication’, master_password=’123456′, master_log_file=’mysql-bin.000001′, master_log_pos=98;

Start slave 

mysql> start slave;

Đến đây bạn đã cấu hình hoàn tất mô hình replication master – slave.

Kiểm tra hoạt động :

Tạo database gocit trên master server :

mysql> create database gocit;

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

+——————–+
| Database |
+——————–+
| information_schema |
| gocit |
| mysql |
+——————–+
3 rows in set (0.00 sec)

Kiểm tra trên slave server , thấy database đã được replicate :

mysql> show databases ;

+——————–+
| Database |
+——————–+
| information_schema |
| gocit |
| mysql |
+——————–+
3 rows in set (0.00 sec)

 

Tôi đã gặp phải lỗi sau từ cảnh báo theo dõi Replication MySQL:

Error 'Duplicate entry '72264-4-10-2011' for key 1' on query. Default database: 'grad_data'. Query: 'INSERT INTO tblusr_log
                                          ( ID,UserType,Stats,Month,Year )
                                          VALUES
                                          ( '72264','4',1,MONTH(NOW()),YEAR(NOW()))'

Tình trạng này ngừng quá trình sao chép dữ liệu, cơ sở dữ liệu máy chủ slave không đồng bộ với máy chủ cở sở dư liệu Master. Có một số cách giải quyết vấn đề này:

Bỏ qua các lỗi một lần và cho tất cả

1. Stop slave:

mysql> STOP SLAVE;

2. Thêm dòng sau vào /etc/my.cnf dưới [mysqld] chỉ thị và khởi động lại Replication Slave:

slave-skip-errors = 1062

3. Start slave:

mysql> START SLAVE;

Bỏ qua một trong những lỗi bằng một

1. Chạy lệnh sau trong mysql console để bỏ qua một lần:

mysql> STOP SLAVE; SET GLOBAL sql_slave_skip_counter = 1; START SLAVE;

2. Kiểm tra lại tình trạng mysql Slave:

mysql> SHOW SLAVE STATUSG

Nếu lỗi xuất hiện một lần nữa, lặp lại bước 1 và bước 2 phù hợp cho đến khi Slave_SQL_Running turn to ‘Yes’. Bạn cũng có thể sử dụng lệnh sau đây để theo dõi tình trạng nhân rộng thông qua giao diện điều khiển hay SSH:

$ watch -n1 'mysql -e "SHOW SLAVE STATUSG"'

Re-đồng bộ trở lại cơ sở dữ liệu và sao chép lại bắt đầu

Dưới đây là cách đề nghị. Nó an toàn và đáng tin cậy, đủ để đảm bảo tất cả các dữ liệu được sao chép một cách chính xác. Bước này có thời gian lâu hơn, nhưng nó có giá trị để làm. Chúng tôi sẽ cần để đổ các cơ sở dữ liệu trong máy chủ tổng thể, khôi phục lại nó trong các máy chủ mới và khởi động lại các bản sao. Biến như sau:

Master server IP: 192.168.11.132
Slave server IP: 192.168.11.133
Database name: grad_data
MySQL database user: grad_user
MySQL database password: [email protected]
MySQL slave user: slaver
MySQL slave password:  slaverp4ss

1. Dump the database in master server:

$ mysqldump -u grad_user -p”[email protected]” –master-data –single-transaction grad_data > /root/grad_data.master.sql

2. Sao chép nó qua máy chủ Slave sử dụng scp :

$ scp /root/grad_data.master.sql [email protected]:/root

3. Recreate the database in slave server:

mysql> DROP DATABASE grad_data;
mysql> CREATE DATABASE grad_data;

4. Khôi phục lại cơ sở dữ liệu trong máy chủ Slave:

$ mysql -u grad_user -p"[email protected]" grad_data < /root/grad_data.master.sql

5. Xem lại các tập tin binlog và vị trí trong các sqldump tập tin. Mở /root/grad_data.master.sql trình soạn thảo văn bản bằng cách sử dụng và tìm dòng tương tự như dưới đây:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000019', MASTER_LOG_POS=1017207641;

Bạn cần phải lưu ý các tên và log_pos số log_file .

6. Khởi động lại các bản sao Slave (đảm bảo MASTER_LOG_FILE và MASTER_LOG_POS trong lệnhdưới đây giống như giá trị ở bước 5):

mysql> STOP SLAVE;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.11.132', MASTER_PORT=3306, MASTER_USER='slaver', MASTER_PASSWORD='slaverp4ss', MASTER_LOG_FILE='mysql-bin.000019', MASTER_LOG_POS=1017207641;
mysql> START SLAVE;

Xác nhận tình trạng Slave

Kiểm tra tình trạng sao chép Slave:

mysql> SHOW SLAVE STATUSG

Bạn sẽ thấy một cái gì đó giống như dưới đây để cho biết rằng Replication MySQL của bạn đang chạy tốt:

*************************** 1. row ***************************
   Slave_IO_Running: Yes
   Slave_SQL_Running: Yes
Thảo luận bài viết tại forum http://forum.gocit.vn/threads/cau-hinh-mysql-replication-voi-mo-hinh-master-%E2%80%93-slave.121/
Print Friendly, PDF & Email

Comments

comments

Bài viết liên quan