mysql主从复制详解

用途及作用

主从复制主要用途及作用有以下几点:
- 数据分布
- 负载均衡
- 实时灾备,用于故障切换
- 读写分离,提供查询服务
- 备份,避免影响业务

读写分离.png

主从复制原理

主从复制流程图.png
主从复制分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下:

  1. Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

  2. Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;

  3. Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;

  4. Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。

其实稍微了解mysql底层一点的都知道,mysql的更新记录都可以配置保存在binlog文件中,这个文件用处很大,有一个比较大的应用就是有些公司开发监听binlog变化的插件,再结合消息中间件来实现数据变更实时通知订阅方。当然这次我们要讲的还是slave机器怎么样实现对于master机器的主从。

mysql主从复制配置流程

  1. 配置前的准备与说明

    • 确保主从服务器的mysql版本兼容,从服务器(slave)至少与主服务器(master)版本相同或更高。
    • 本测试的一些说明:
      mysql版本 —— master为5.5.20,slave为5.5.41
      测试环境 —— master在windows7(64bit旗舰版)下,slave在linux(ubuntu14)下
      控制环境 —— 都是windows下的mysql命令行界面
  2. 配置具体流程

    • 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。
2.2-1.png
设置完成后查看相关参数是否设置成功,执行如下命令:

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.3-1.png

  • 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

猜你喜欢

转载自blog.csdn.net/jiang13479/article/details/54619667