Thứ Ba, 20 tháng 9, 2011

Cấu hình replicate database MySQL Master-to-master


  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.   
  27. log-bin=mysql-bin  
  28. binlog-do-db=replicate_test  
  29. binlog-ignore-db=mysql  
  30. binlog-ignore-db=test  
  31.   
  32. server-id=1  
  33.   
  34. master-host = 192.168.2.11  
  35. master-user = replication  
  36. master-password = 111111  
  37. master-port = 3306  
  38.   
  39. auto_increment_increment= 2  
  40. auto_increment_offset   = 2  
  41.   
  42. slave-net-timeout = 30  
  43. master-connect-retry = 30  
  44.   
  45. [mysql.server]  
  46. user=mysql  
  47. basedir=/var/lib       
  48.   
  49. [mysqld_safe]  
  50. relay-log = relay-bin  
  51. log-error=/var/log/mysqld.log  
  52. pid-file=/var/run/mysqld/mysqld.pid  
  53. max_allowed_packet = 16M  
  54.   
  55. [myisamchk]  
  56. keybuffer = 32M  
  57. sort_buffer = 32M  
  58. read_buffer = 16M  
  59. 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.   
  27. log-bin=mysql-bin  
  28. binlog-do-db=replicate_test  
  29. binlog-ignore-db=mysql  
  30. binlog-ignore-db=test  
  31.   
  32. server-id=2  
  33.   
  34. master-host = 192.168.2.10  
  35. master-user = replication  
  36. master-password = 111111  
  37. master-port = 3306  
  38.   
  39. auto_increment_increment= 2  
  40. auto_increment_offset   = 2  
  41.   
  42. slave-net-timeout = 30  
  43. master-connect-retry = 30  
  44.   
  45. [mysql.server]  
  46. user=mysql  
  47. basedir=/var/lib       
  48.   
  49. [mysqld_safe]  
  50. relay-log = relay-bin  
  51. log-error=/var/log/mysqld.log  
  52. pid-file=/var/run/mysqld/mysqld.pid  
  53. max_allowed_packet = 16M  
  54.   
  55. [myisamchk]  
  56. keybuffer = 32M  
  57. sort_buffer = 32M  
  58. read_buffer = 16M  
  59. 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.   
  6. server-id=2  
  7.   
  8. master-host = 192.168.2.10  
  9. master-user = replication  
  10. master-password = 111111  
  11. master-port = 3306  
  12.   
  13. auto_increment_increment= 2  
  14. 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.

Tham khảo thêm về replicate MySQL : http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html

1 nhận xét:

  1. Mình đang bị tình trạng này. Có lời khuyên nào cho mình không! Cám ơn
    Slave_IO_State: Connecting to master
    Master_Host: 112.78.6.228
    Master_User: slave
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000002
    Read_Master_Log_Pos: 1213091
    Relay_Log_File: slave-relay.000004
    Relay_Log_Pos: 98
    Relay_Master_Log_File: mysql-bin.000002
    Slave_IO_Running: No
    Slave_SQL_Running: Yes
    Replicate_Do_DB: o2bcorp_bhotel
    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: 1213091
    Relay_Log_Space: 98
    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: NULL

    http://quanlykhachsan.org

    Trả lờiXóa