[Linux] Cấu hình replicate database MySQL Master-to-master.

altCó nhiều kiểu cấu hình replicate, tùy từng trường hợp cụ thể mà sử dụng theo cách nào cho phù hợp.
Ở đây trường hợp của tôi, bài tóan đặt ra như sau :
Code+database website được đặt trên 2 server (1 trong nước, 1 nước ngoài ). Yêu cầu 2 database này phải được đồng bộ thường xuyên với nhau.
Lí do tôi chọn cách cấu hình master to master là bởi thế, với cấu hình này thì 1 server vừa là master vừa là slave, tức nó vừa lắng nghe vừa ra hiệu cho server còn lại nếu có sự thay đổi dữ liệu trong database.

Cả 2 server sử dụng hệ điều hành CentOs, database MySQL version 5.x
Server 1 có IP dạng : 192.168.1.10
Server 2 có IP dạng : 192.168.1.11

Đăng nhập vào chế độ dòng lệnh của MySQL:
$ mysql -u root -p

Thực thi câu lệnh tương tự cho cả 2 server :

  1. GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’%’ IDENTIFIED BY ‘%slave_password%’;
  2. FLUSH PRIVILEGES;
  3. quit;

Trong đó replication là user,slave_password là mật khẩu của user replication.
Edit file my.cnf của server 1 :

  1. [mysqld]
  2. datadir=/var/lib/mysql
  3. socket=/var/lib/mysql/mysql.sock
  4. #user=mysql
  5. # Default to using old password format for compatibility with mysql 3.x
  6. # clients (those using the mysqlclient10 compatibility package).
  7. old_passwords=1
  8. max_connections = 400
  9. key_buffer = 16M
  10. myisam_sort_buffer_size = 32M
  11. join_buffer_size = 1M
  12. read_buffer_size = 1M
  13. sort_buffer_size = 2M
  14. table_cache = 1024
  15. thread_cache_size = 286
  16. interactive_timeout = 25
  17. wait_timeout = 1000
  18. connect_timeout = 60
  19. max_allowed_packet = 16M
  20. max_connect_errors = 10
  21. query_cache_limit = 1M
  22. query_cache_size = 16M
  23. query_cache_type = 1
  24. tmp_table_size = 16M
  25. skip-innodb
  26. log-bin=mysql-bin
  27. binlog-do-db=replicate_test
  28. binlog-ignore-db=mysql
  29. binlog-ignore-db=test
  30. server-id=1
  31. master-host = 192.168.2.11
  32. master-user = replication
  33. master-password = 111111
  34. master-port = 3306
  35. auto_increment_increment= 2
  36. auto_increment_offset   = 2
  37. slave-net-timeout = 30
  38. master-connect-retry = 30
  39. [mysql.server]
  40. user=mysql
  41. basedir=/var/lib
  42. [mysqld_safe]
  43. relay-log = relay-bin
  44. log-error=/var/log/mysqld.log
  45. pid-file=/var/run/mysqld/mysqld.pid
  46. max_allowed_packet = 16M
  47. [myisamchk]
  48. keybuffer = 32M
  49. sort_buffer = 32M
  50. read_buffer = 16M
  51. write_buffer = 16M

Edit file my.cnf của server 2 :

  1. [mysqld]
  2. datadir=/var/lib/mysql
  3. socket=/var/lib/mysql/mysql.sock
  4. #user=mysql
  5. # Default to using old password format for compatibility with mysql 3.x
  6. # clients (those using the mysqlclient10 compatibility package).
  7. old_passwords=1
  8. max_connections = 400
  9. key_buffer = 16M
  10. myisam_sort_buffer_size = 32M
  11. join_buffer_size = 1M
  12. read_buffer_size = 1M
  13. sort_buffer_size = 2M
  14. table_cache = 1024
  15. thread_cache_size = 286
  16. interactive_timeout = 25
  17. wait_timeout = 1000
  18. connect_timeout = 60
  19. max_allowed_packet = 16M
  20. max_connect_errors = 10
  21. query_cache_limit = 1M
  22. query_cache_size = 16M
  23. query_cache_type = 1
  24. tmp_table_size = 16M
  25. skip-innodb
  26. log-bin=mysql-bin
  27. binlog-do-db=replicate_test
  28. binlog-ignore-db=mysql
  29. binlog-ignore-db=test
  30. server-id=2
  31. master-host = 192.168.2.10
  32. master-user = replication
  33. master-password = 111111
  34. master-port = 3306
  35. auto_increment_increment= 2
  36. auto_increment_offset   = 2
  37. slave-net-timeout = 30
  38. master-connect-retry = 30
  39. [mysql.server]
  40. user=mysql
  41. basedir=/var/lib
  42. [mysqld_safe]
  43. relay-log = relay-bin
  44. log-error=/var/log/mysqld.log
  45. pid-file=/var/run/mysqld/mysqld.pid
  46. max_allowed_packet = 16M
  47. [myisamchk]
  48. keybuffer = 32M
  49. sort_buffer = 32M
  50. read_buffer = 16M
  51. write_buffer = 16M

Bạn cần để ý các thông số sau ở cả 2 server :

  1. log-bin=mysql-bin
  2. binlog-do-db=replicate_test
  3. binlog-ignore-db=mysql
  4. binlog-ignore-db=test
  5. server-id=2
  6. master-host = 192.168.2.10
  7. master-user = replication
  8. master-password = 111111
  9. master-port = 3306
  10. auto_increment_increment= 2
  11. auto_increment_offset   = 2

Chú thích các thông số :
binlog-do-db=replicate_test : chỉ định các bảng sẽ được thực hiện replicate
binlog-ignore-db=mysql : Chỉ định các bảng sẽ không được thực hiện replicate
server-id : Id chỉ định cho server.
master-host : Địa chỉ ip của host master
master-user,master-password : user và password theo master-host
master-port: cổng truy vấn của database.
auto_increment_offset : cần đặc biệt chú ý thông số này, trường hợp bạn không thiết lập thông số này database có trường autoincrement sẽ tăng theo giá trị +1 cho giá trị tiếp theo khi insert dữ liệu mới.
Để tránh trường hợp 2 database ở 2 server bị trùng giá trị autoincrement tôi đặt giá trị này auto_increment_offset=1 cho server1 và =2 cho server 2 với mục đích giá trị tự động tăng ở server1 là số lẻ , ở server 2 là số chẵn.

Đăng nhập chế độ dòng lệnh MySQL và thực hiện việc gán master cho server2:

  1. stop slave;
  2. CHANGE MASTER TO MASTER_HOST=’192.168.1.10′, MASTER_USER=’replication’, MASTER_PASSWORD=’%slave_password%’;
  3. start slave;

Thực hiện câu lệnh tương tự cho server 1 với MASTER_HOST là 192.168.1.11, user và password.

Kiểm tra sự hoạt động của cả 2 server :

  1. SHOW MASTER STATUS;
  1. SHOW SLAVE STATUS\G;

Nếu 2 option Slave_IO_Running and Slave_SQL_Running đều hiển thị Yes thì bạn đã thành công.
Nếu 1 trong 2 chưa thành công bạn cần kiểm tra lại user và password chính xác, hoặc master-port đã được mở hay chưa.

Viết bởi whatvn site:opensource.com.vn

Advertisements

Trả lời

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s