用途及作用
主从复制主要用途及作用有以下几点:
- 数据分布
- 负载均衡
- 实时灾备,用于故障切换
- 读写分离,提供查询服务
- 备份,避免影响业务
主从复制原理
主从复制分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下:
Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
其实稍微了解mysql底层一点的都知道,mysql的更新记录都可以配置保存在binlog文件中,这个文件用处很大,有一个比较大的应用就是有些公司开发监听binlog变化的插件,再结合消息中间件来实现数据变更实时通知订阅方。当然这次我们要讲的还是slave机器怎么样实现对于master机器的主从。
mysql主从复制配置流程
-
配置前的准备与说明
- 确保主从服务器的mysql版本兼容,从服务器(slave)至少与主服务器(master)版本相同或更高。
- 本测试的一些说明:
mysql版本 —— master为5.5.20,slave为5.5.41
测试环境 —— master在windows7(64bit旗舰版)下,slave在linux(ubuntu14)下
控制环境 —— 都是windows下的mysql命令行界面
-
配置具体流程
- 2.1 修改master的mysql配置文件my.ini(在mysql的安装目录下),另linux中是修改my.cnf文件。在[mysqld]标签下添加以下几行(以下参数是本测试的实际值,读者根据具体情况自己设定值):
log-bin = mysql-bin # 开启二进制日志 ,并命名一个新的名称
server_id = 1 # 主服务器id号(不要设置为0)
binlog_do_db = test # 指定对数据库test记录二进制日志
binlog_ignore_db = db_namB # 指定不对db_namB记录二进制日志(本测试没有写)
注意,master的log_bi和server_id是必须有的。
- 2.2 修改slave的mysql配置文件my.ini(在mysql的安装目录下),另linux中是修改my.cnf文件。在[mysqld]标签下添加以下内容:
server-id = 2 # 从服务器id号(不要设置为0)
如果是远程操作服务器的话,可使用如下命令改变server_id
set global server_id = 2;
注意,slave的server_id是必须有的。
- 2.3 给master添加具有replication slave权限的用户,有了这个用户,master就能允许slave读取其binlog了,在mysql命令行界面中执行如下命令:
grant replication slave
on *.*
to 'root' @ '10.10.202.61' identified by '123456';
参数具体说明如下图2.2-1:
注意:10.10.202.61是从服务器的IP,也可以是%,这样代表所有服务器都可以登录master。
设置完成后查看相关参数是否设置成功,执行如下命令:
SELECT * FROM mysql.user WHERE user = 'root' \G
看到Repl_slave_priv项对就的值为Y就对了
- 2.4 重启mysql服务,查看master的binlog的状态,执行如下命令,查询结果见图2.3-1:
show master status;
注意,这里有可能发生错误,一般来说是重启mysql服务没有成功,具体的原因读者可以百度。
- 2.5 设置slave的参数,用于连接master。
change master to
master_host = '10.10.202.116',
master_user = 'root',
master_password = '123456',
master_log_file = 'mysql-bin.000060',
master_log_pos = 248;
参数解释:
MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第2.4得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第2.4得到的信息,(这里注 意,最后一项不需要加引号。否则配置失败)
注意!设置参数前一定要停止slave,否则执行上的命令有可能会报错。执行如下命令就能停止slave:
stop slave;
- 2.6 启动slave和查看是否启动成功
start slave;
再执行如下命令查看是否启动成功:
show slave status \G
如果如下参数为Yes则代表master和slave连接成功,master这时的变动将会更新到slave中
Slave_IO_Running: Yes
Slave_SQL_Running: Yes