安装主从复制的时候,需要安装Mysql,这个主从复制在生产环境中,还会同keepalived实现双机热备,来实现高可用性。

安装准备

CentOS之Mysql安装-yellowcong

系统架构

节点

服务

192.168.100.10:3306

master

192.168.100.11:3306

slave

原理

原理:mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,从服务器叫B;主从复制就是
   B跟着A学,A做什么,B就做什么。那么B怎么同步A的动作呢?现在A有一个日志功能,把自己所做的增删改查的动作
   全都记录在日志中,B只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制。

扩展:MYSQL还有一种日志叫做:慢日志
   可以设置一个时间,那么所有执行时间超过这个时间的SQL都会被记录下来。这样就可以通过慢日志快速的找到网站中SQL的瓶颈来进行优化。

集群搭建

1、修改主服务器

#
vim /etc/my.cnf

[mysqld]
#[必须]启用二进制日志
log-bin=mysql-bin 

#这个server-id是用来标明服务器的,同zookeeper的myid一样的作用
#[必须]服务器唯一ID,默认是1,一般取IP最后一段
server-id=10

Mysql之主从复制-yellowcong_服务器

2、修改从服务器

vi /etc/my.cnf
[mysqld]
//[不是必须]启用二进制日志
log-bin=mysql-bin  

//[必须]服务器唯一ID,默认是1,一般取IP最后一段 
//192.168.100.11,所以最后一段就是11了
server-id=11

3、重启mysql服务器

#重启两台服务器的mysql
service mysql restart

Mysql之主从复制-yellowcong_mysql_02

4、在主服务器上建立帐户并授权slave

#登录主服务器
mysql -u root -p

#配置权限
#创建yellowcong用户,
#`%`表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替
#这种用来给内网用户连接用。
GRANT REPLICATION SLAVE ON *.* to 'yellowcong'@'%' identified by 'yellowcong';

#一般使用这种方式用于集群授权
#只允许192.168.199.11机器连接的方式
GRANT REPLICATION SLAVE ON *.* to 'yellowcong'@'192.168.199.11' identified by 'yellowcong';

Mysql之主从复制-yellowcong_服务器_03

5、登录主服务器的mysql,查询master的状态

这一步执行后,服务器的状态会发生变化,所以执行了这一步,就不要再修改主服务器信息了

#查看主节点的状态
#  注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
show master status;

Mysql之主从复制-yellowcong_主从复制_04

6、配置从节点

如果节点之前配置过,就需要停掉slave,然后再配置,这一步配置信息依赖于第五步配查看的主节点信息。

#登录从节点
myslq -u root -p

#(非必须执行的)如果之前配置过,一定要先关闭slave
stop slave;

#设定主节点
#master_host 主节点信息,填写目标机器的ip地址,如果是本机,可以填写127.0.0.1,需要和主节点一致。
#master_user 用户
#master_user 密码
#master_log_file 要连接的主服务器的bin日志的日志名称(第五步获取)
#master_log_pos  要连接的主服务器的bin日志的记录位置(第五步获取)
#MASTER_PORT 是端口号,不能是字符串,是数字,如果不写,默认就是3306端口
change master to master_host='192.168.100.10',master_user='yellowcong',MASTER_PORT=3306,master_password='yellowcong', master_log_file='mysql-bin.000002',master_log_pos=324;


#启动从服务器复制功能
start slave;

Mysql之主从复制-yellowcong_主从复制_05

查看从节点

#查看从节点信息(这个是在从节点上查看的,主节点是看不到从节点信息的)
show slave status;

#这个\G可以看起来更好
show slave status\G

我们可以看到主节点的信息。

Mysql之主从复制-yellowcong_主从复制_06

查看到的信息

Mysql之主从复制-yellowcong_mysql_07

测试

测试数据库中在主节点中添加数据,然后从节点数据,就会复制过去了

在主节点添加测试数据

#创建数据库
create database yellowcong_cluster;

#使用数据库
use yellowcong_cluster;

#创建表
create table test(id int primary key auto_increment,age int,name varchar(32));

#插入数据
insert into test values (null,12,'yellowcong');
insert into test values (null,23,'zhangsan');

主节点数据库信息

Mysql之主从复制-yellowcong_主从复制_08

从节点数据库

Mysql之主从复制-yellowcong_主从复制_09

错误集合

error connecting to master ‘yellowcong@192.168.66.100:3306’ - retry-time: 60 retries: 1

这个地方有问题,连接不上主节点,导致这个问题的原因就是,我主节点授权的执行命令不对

Mysql之主从复制-yellowcong_服务器_10

查看主节点授权信息

select user,host from mysql.user;

-- 我的ip地址一样,是由于我后来测试的时候,用的一个主机,多个mysql实例做的主从节点测试。
-- 192.168.66.100 指定了只能这一台服务器,才能用这个号码来登录俺Mysql服务。
GRANT REPLICATION SLAVE ON *.* to 'yellowcong'@'192.168.66.101' identified by 'yellowcong';

-- 从节点,添加配置
-- master_host 主机点地址
-- MASTER_PORT 端口
-- master_user 用户名
-- master_password 密码
-- master_log_file 二进制而知的信息
-- master_log_pos  二进制日志当前指针位置
change master to master_host='192.168.66.100',MASTER_PORT=3306,master_user='yellowcong',master_password='yellowcong', master_log_file='binlog.000012',master_log_pos=403;

Mysql之主从复制-yellowcong_mysql_11

参考文章

http://blog.51cto.com/369369/790921