网站地图    收藏   

主页 > 后端 > php资料库 >

MySQL集群下的复制(replicate)原理详解_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 从MySQL 5.1 开始,就支持集群+复制了,这对于想要构建一个高可用方案的用户来说,无疑是个惊喜。在这种模式下,既有主从的实时备份,又有基于集群的负载均衡,不足指出在于,从我...

从MySQL 5.1 开始,就支持集群+复制了,这对于想要构建一个高可用方案的用户来说,无疑是个惊喜。在这种模式下,既有主从的实时备份,又有基于集群的负载均衡,不足指出在于,从我的测试结果来看,这种方案下的性能还不是太高,仍有待改进。

集群+复制的配置其实很简单,就是配置好2个独立的集群后,把其中一个的SQL节点作为另一个集群SQL节点的slave即可。甚至可以使用下面几种架构:

3个集群,6个SQL节点,形成一个3个点环形的复制。

3个集群,6个SQL节点,形成一个6个点环形的复制,把另一个SQL节点也利用起来。

7.2. 开始配置

7.2.1. master上的配置

由于集群下的复制是基于row-based复制的,因此需要设置logbin-format的格式为:ROW 或者 MIXED。
相对于普通的mysqld服务器配置,只需要增加类似如下2行:

  1. server-id = 1
  2. binlog_format = "ROW" #or MIXED

7.2.2. slave上的配置

新版本的MySQL已经不再通过 my.cnf 来指定master相关的信息了,而是通过 CHANGE MASTER 指令来管理。因此,slave上只需简单增加类似如下几行:

  1. server-id = 2
  2. relay-log-purge=1
  3. skip-slave-start
  4. replicate-ignore-db=mysql

7.3. 启动slave

先按照正常的方式启动master和slave上的mysqld后,执行SHOW PROCESSLIST 可以看到2个mysqld都只有2个进程:

mysql> SHOW PROCESSLIST; +----+-------------+-----------+------+---------+------+-------------------------+---------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-------------+-----------+------+---------+------+-------------------------+---------------+ | 1 | system user | | | Daemon | 0 | Waiting for event from ndbcluster | NULL | | 2 | root | localhost | NULL | Query | 0 | NULL |show processlist| +----+-------------+-----------+------+---------+------+-------------------------+----------------+ 2 rows in set (0.00 sec)
 

在slave上执行 SHOW SLAVE STATUS 再看看:

  1. mysql> show slave status\G
  2. Empty set (0.00 sec)

可以看到,现在还没有任何复制相关的配置。因此,我们需要先在master上添加一个账户用于复制:

  1. mysql> GRANT REPLICATION SLAVE, GRANT REPLICATION CLIENT ON *.* TO rep@’192.168.1.2’
  2. IDENTIFIED BY ‘rep’;
  3. Query OK, 0 rows affected (0.00 sec)

然后,我们用 CHANGE MASTER 指令来指定一下 master 相关的参数:

  1. mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.2', MASTER_USER='rep', MASTER_PASSWORD='rep';
  2. Query OK, 0 rows affected (0.01 sec)
  3. mysql> SHOW SLAVE STATUS\G
  4. *************************** 1. row ***************************
  5. Slave_IO_State:
  6. Master_Host: 192.168.0.2
  7. Master_User: rep
  8. Master_Port: 3306
  9. Connect_Retry: 60
  10. Master_Log_File:
  11. Read_Master_Log_Pos: 4
  12. Relay_Log_File: slave-relay-bin.000001
  13. Relay_Log_Pos: 4
  14. Relay_Master_Log_File:
  15. Slave_IO_Running: No
  16. Slave_SQL_Running: No
  17. Replicate_Do_DB:
  18. Replicate_Ignore_DB: mysql
  19. Replicate_Do_Table:
  20. Replicate_Ignore_Table:
  21. Replicate_Wild_Do_Table:
  22. Replicate_Wild_Ignore_Table:
  23. Last_Errno: 0
  24. Last_Error:
  25. Skip_Counter: 0
  26. Exec_Master_Log_Pos: 0
  27. Relay_Log_Space: 106
  28. Until_Condition: None
  29. Until_Log_File:
  30. Until_Log_Pos: 0
  31. Master_SSL_Allowed: No
  32. Master_SSL_CA_File:
  33. Master_SSL_CA_Path:
  34. Master_SSL_Cert:
  35. Master_SSL_Cipher:
  36. Master_SSL_Key:
  37. Seconds_Behind_Master: NULL
  38. Master_SSL_Verify_Server_Cert: No
  39. Last_IO_Errno: 0
  40. Last_IO_Error:
  41. Last_SQL_Errno: 0
  42. Last_SQL_Error:
  43. 1 row in set (0.00 sec)

执行 START SLAVE 来启动它。

  1. mysql> start slave;
  2. Query OK, 0 rows affected (0.00 sec)

再来看看:

  1. mysql> SHOW SLAVE STATUS\G
  2. *************************** 1. row ***************************
  3. Slave_IO_State: Waiting for master to send event
  4. Master_Host: 192.168.0.2
  5. Master_User: rep
  6. Master_Port: 3306
  7. Connect_Retry: 60
  8. Master_Log_File: binlog.000001
  9. Read_Master_Log_Pos: 256
  10. Relay_Log_File: slave-relay-bin.000002
  11. Relay_Log_Pos: 398
  12. Relay_Master_Log_File: binlog.000001
  13. Slave_IO_Running: Yes
  14. Slave_SQL_Running: Yes
  15. Replicate_Do_DB:
  16. Replicate_Ignore_DB: mysql
  17. Replicate_Do_Table:
  18. Replicate_Ignore_Table:
  19. Replicate_Wild_Do_Table:
  20. Replicate_Wild_Ignore_Table:
  21. Last_Errno: 0
  22. Last_Error:
  23. Skip_Counter: 0
  24. Exec_Master_Log_Pos: 256
  25. Relay_Log_Space: 557
  26. Until_Condition: None
  27. Until_Log_File:
  28. Until_Log_Pos: 0
  29. Master_SSL_Allowed: No
  30. Master_SSL_CA_File:
  31. Master_SSL_CA_Path:
  32. Master_SSL_Cert:
  33. Master_SSL_Cipher:
  34. Master_SSL_Key:
  35. Seconds_Behind_Master: 0
  36. Master_SSL_Verify_Server_Cert: No
  37. Last_IO_Errno: 0
  38. Last_IO_Error:
  39. Last_SQL_Errno: 0
  40. Last_SQL_Error:
  41. 1 row in set (0.00 sec)

7.4. 简单测试

这个留给读者自己按照常规的测试去完成吧。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论