结构: sql + data + mgm节点
原理:
集群由3个概念
1,sql节点 sql node
2,数据节点 data node
3,管理节点 ndb managerment
sql语句发送sql节点,sql节点发往数据节点,再由管理节点完成数据节点的之间的同步。
集群技术相对复杂,至少有3种节点,4台服务器才能完成。
结构: master + slave
原理:
1,主服务器运行语句,都产生一个二进制日志 binlog
2,从服务器不断读取主服务器的binlog
3,从主服务读取到的binlog,转换为自身可执行的relaylog
4,执行relaylog
实现步骤:
1,首先确保主服务器打开二进制日志功能
主服务器一旦有数据变化,立即产生二进制日志
2,从服务器也需要开启二进制日志和relay日志功能
这样可以从主服务器读取binlog,并产生relaylog
3,在主服务器建立一个从服务器的账号,并授予数得上权限
4,指定从服务对应的主服务器,开启从服务器
具体实施:
虚拟机下有两台CentOS-6.7,IP为192.168.1.67(master)和192.168.1.83(slave)
1,67做主服务器
2,83做从服务器
3,保证主从3306端口互通
4,配置主服务器,打开binlog
#给服务器起一个唯一的id,通常以局域网ip最后段命名
server-id=67
#开启二进制日志
log-bin=mysql-bin
#指定日志格式
binlog-format=mixd
注:binlog日志格式选择
主服务器的日志格式用哪种好?
有 statement,row,mixed 3种,其中mixed是指前2种的混合。
1、insert into xxtable values (x,y,z)
影响:1行,且为新增1行,对于其他行没有影响。
这个情况,用row格式,直接复制磁盘上1行的新增变化。
2、update xxtable set age=21 where name='sss'
这个情况,一般也只是影响1行,用row也比较合适。
以过年发红包,全公司的人,都涨薪100元。
3、update xxtable set salary=salary+100
这个语句带来的影响,是针对每一行的,因此磁盘上很多row都发生了变化。
此处,适合就statment格式的日志。
2种日志,各有各的高效的地方,mysql提供了mixed类型。
可以根据语句的不同,而自动选择适合的日志格式。
重启mysql
已经能够充当master服务器
5,配置从服务器打开binlog和relaylog
#给服务器起一个唯一的id,通常以局域网ip最后段命名
server-id=83
#开启二进制日志
log-bin=mysql-bin
#指定日志格式
binlog-format=mixd
#从服务器中继日志
relay-log=mysql-relay
#指定只读
read-only=1
重启从服务器
6,在主服务器上创建相应的复制账号
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY '111111';
刷新权限
flush privileges;
7,在从服务器通过语句指定要复制的主服务器(注意,可以一主多从,不可一从多主)
CHANGE MASTER TO \
MASTER_HOST='192.168.1.67',
MASTER_USER='repl',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000015',
MASTER_LOG_POS=3069;
8,启动从服务器功能
start slave;
注:常用语句
show master status ; 查看master的状态, 尤其是当前的日志及位置
show slave stattus; 查看slave的状态.
reset slave ; 重置slave状态.
start slave ; 启动slave 状态(开始监听msater的变化)
stop slave; 暂停slave状态;
配置错误展示
错误分析
1、网络不通
2、密码不对
3、pos不对
解决方法:
主服务器防火墙3306端口没设置对外访问
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables restart
/etc/init.d/iptables status
配置完成
9,测试
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT '' COMMENT 'name',
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO test (name) VALUES ('安大厦');
mysql二进制日志
/usr/local/mysql/var/
查看最新的bin-log日志
more mysql-bin.index
查看master使用的bin-log日志
show master status
大致思路:
1,2台服务器都设置上2进制日志和relay日志
2,都设置上replcation账号
3,都设置对方为自己的master
具体实施:
虚拟机下有两台CentOS-6.7,IP为192.168.1.67和192.168.1.83
1,配置67服务器,配置binlog和relaylog
#给服务器起一个唯一的id,通常以局域网ip最后段命名
server-id=67
#开启二进制日志
log-bin=mysql-bin
#指定日志格式
binlog-format=mixd
重启mysql
在67服务器上创建相应的复制账号
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY '111111';
在67服务器通过语句指定要复制的83服务器
CHANGE MASTER TO \
MASTER_HOST='192.168.1.83',
MASTER_USER='repl',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000016',
MASTER_LOG_POS=1720;
刷新权限
flush privileges;
start slave;
2,配置83服务器,配置binlog和relaylog
#给服务器起一个唯一的id,通常以局域网ip最后段命名
server-id=83
#开启二进制日志
log-bin=mysql-bin
#指定日志格式
binlog-format=mixd
在83服务器上创建相应的复制账号
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY '111111';
在83服务器通过语句指定要复制的67服务器
CHANGE MASTER TO \
MASTER_HOST='192.168.1.67',
MASTER_USER='repl',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000017',
MASTER_LOG_POS=411;
刷新权限
flush privileges;
start slave;