从MySQL 5.1 开始,就支持集群+复制了,这对于想要构建一个高可用方案的用户来说,无疑是个惊喜。在这种模式下,既有主从的实时备份,又有基于集群的负载均衡,不足指出在于,从我的测试结果来看,这种方案下的性能还不是太高,仍有待改进。
集群+复制的配置其实很简单,就是配置好2个独立的集群后,把其中一个的SQL节点作为另一个集群SQL节点的slave即可。甚至可以使用下面几种架构:
集群的备份很简单,只需在管理节点上执行START BACKUP 即可:
ndb_mgm> START BACKUP Waiting for completed, this may take several minutes Node 3: Backup 4 started from node 1 Node 3: Backup 4 started from node 1 completed StartGCP: 7847 StopGCP: 7850 #Records: 1736024 #LogRecords: 0 Data: 41649824 bytes Log: 0 bytes
在管理节点上,运行客户端工具 ndb_mgm:
/usr/local/mysql/bin/ndb_mgm -- NDB Cluster -- Management Client --
#查看集群状态
ndb_mgm> show Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=3 @192.168.0.3 (mysql-6.0.3 ndb-6.2.6, Nodegroup: 0, Master) id=4 @192.168.0.4 (mysql-6.0.3 ndb-6.2.6, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.0.1 (mysql-6.0.3 ndb-6.2.6) [mysqld(API)] 2 node(s) id=2 @192.168.0.2 (mysql-6.0.3 ndb-6.2.6) id=5 (not connected, accepting connect from any host)
很简单,直接运行命令:
/usr/local/mysql/bin/ndb_mgmd –f /usr/local/mysql/config.ini
数据节点有些特殊,如果是第一次启动,则需要增加参数 –initial,如果不是,直接启动即可:
第一次启动:
/usr/local/mysql/bin/ndbd --initial
非第一次启动:
/usr/local/mysql/bin/ndbd
如果你不是把 my.cnf 放在 /etc/ 下,则需要指定实际位置所在,比如:
/usr/local/mysql/bin/ndbd –defaults-file=/usr/local/mysql/my.cnf --initial
或
/usr/local/mysql/bin/ndbd –defaults-file=/usr/local/mysql/my.cnf
MySQL的安装路径默认为:/usr/local/mysql。
首先,创建数据文件主目录 /usr/local/mysql/data,然后编辑配置文件:
vi /usr/local/mysql/config.ini
本文主要是尝试MySQL 6.0.3-beta下的集群+复制,没有做深入的测试,仅可作安装配置参考。
如果只是做普通的集群,那么一般只需要4台机器,甚至只需要3台,即把管理节点和SQL节点放在同一个机器上,不过不推荐这么做。如果是集群+复制,则机器数量翻番。
| Node | IP Address |
| 管理节点 (MGM) | 192.168.0.1 |
| SQL 节点 (SQL) | 192.168.0.2 |
| 数据节点 A (NDBD) | 192.168.0.3 |
| 数据节点 B (NDBD) | 192.168.0.4 |
本文主要是尝试MySQL 6.0下的集群+复制,没有做深入的测试,仅可作安装配置参考。
参考资料:MySQL 6.0手册,本文中的图片引用自该手册。
问:slave服务器my.cnf上配置了read-only选项,为什么还可以在slave中插入/更新数据呢?
答:因为是使用具有super权限的帐号连接的,改用普通帐号就不行了,也就是授权时不能指定有super或all权限
os: redhat as4
master: MySQL 4.0.23
slave : MySQL 5.0.37
slave日志中报错信息如下:
060807 11:40:17 [ERROR] While trying to obtain the list of slaves from the master 'xxx.xxx.xxx:3306', user 'rep' got the following error: 'Access denied. You need the REPLICATION SLAVE privilege for this operation'
在master上,执行以下语句查看权限:
mysql>SHOW GRANT FOR 'rep'@'192.168.0.2'\G *************************** 1. row *************************** Grants for rep@192.168.0.2: GRANT SELECT, REPLICATION SLAVE ON *.* TO 'rep'@'192.168.0.2' IDENTIFIED BY PASSWORD 'xxx'
已经授予了 REPLICAION SLAVE 权限了,怎么还会报这个错呢?
最近评论
1 天 14 小时 前
1 天 15 小时 前
2 天 11 小时 前
2 天 12 小时 前
3 天 21 小时 前
1 周 1 天 前
1 周 1 天 前