Mysql的主从复制原理及配置(一)

1、复制概述

Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台(master)主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。

2、MySQL的复制是如何工作的

整体上来说,复制有3个步骤: 

(1). master将改变记录到二进制日志(binary log)中;

(2). slave将master的binary log events拷贝到它的中继日志(relay log);

(3). slave重做中继日志中的事件,将改变反映它自己的数据库中。

下图描述了复制的过程:


该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。下一步就是slave将master的binary log拷贝到它自己的中继日志中。 复制过程大致如下:

首先,slave将开启一个Slave_IO_Thread线程。Slave_IO_Thread线程连接到master上(其实一个Slave_IO_Thread线程你可以理解成一个MySQL的客户端),master这个时候会开启一个Dump_Thread线程(如果同时有多个salve连接master,master会为每一个salve开启一个Dump_Thread线程)Dump_Thread线程从master的二进制日志中读取事件,然后将这些二进制日志事件发送给Slave_IO_Thread线程,Slave_IO_Thread线程将这些事件写入slave服务器的中继日志。slave服务器上同时会开启一个 Slave_ SQL_thread线程,Slave_SQL_thread线程从中继日志里面读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要Slave_SQL_thread线程Slave_IO_Thread线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。复制过程有一个很重要的限制,那就是复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

3、现在我们配置一个很简单的MySQL的主从复制

1. 我们希望达到的目标

复制配置有两台MySQL数据库服务器master和slave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。

要点:负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制日志,这个日志记载着需要传输给从服务器的各种修改动作。因此,主服务器必须激活二进制日志功能。从服务器必须具备足以让它连接主服务器并请求主服务器把二进制日志传输给它的权限。

2. 主从同步配置

注意问题: 
1 双方的MySQL版本要一致; 
2. 从什么位置开始复制: 
(1). 都从0开始:两台新服务器,没有任何数据; 
(2). 主服务器已经运行一段时间,并且存在不小的数据集:把主服务器备份,然后在从服务恢复,从主服务器上备份时所处的位置开始复制;
3. 环境以及机器的配置: 
服务器角色系统平台主机名/ip地址

master

CentOS6.5

npf1 / 192.168.1.76

slave

CentOS6.5

npf2 / 192.168.1.77


4.配置主从服务器:
第一步:配置master服务器。
 (1). 向my.cnf添加如下的选项,命令如下:
 [root@npf1 ~]# vim /etc/my.cnf
server-id一般设置为该服务器所在IP地址的后半段。


配置完后,重启mysql服务,如下:


通过mysql的客户端,查询当前MySQL的服务IP及server-id是否是我们刚才设置的。show variables like 'server_id';


(2). 在Master上面创建有复制权限的用户。


赋权限给刚才我们创建的用户repl_user。
GRANT REPLICATION SLAVE ON *.* TO repl_user IDENTIFIED BY 'repl_userpassword';



在这里我们还可以这样的配置:
GRANT REPLICATION SLAVE ON *.* TO ' repl_user'@'%' IDENTIFIED BY 'repl_userpassword';
(%表示允许所有IP,可设置指定从服务器IP),例如:
GRANT REPLICATION SLAVE ON *.* TO ' repl_user'@'192.168.%.%' IDENTIFIED BY 'repl_userpassword';

添加用户后,可在从服务器上用mysql -h 192.168.1.76 -urepl_user -prepl_userpassword;  
来测试是否有权限访问主数据库。我们在slave的机器上面运行下面的命令:
[root@npf2 ~]# mysql -h 192.168.1.76 -urepl_user -prepl_userpassword



到此为止,我们的master已经配置完成了。

第二步:配置slave服务器。

(1)向my.cnf添加如下的选项,命令如下:
 [root@npf2 ~]# vim /etc/my.cnf


server-id一般设置为该服务器所在IP地址的后半段。
配置完后,重启mysql服务,如下:

[root@npf2 ~]# service mysqld restart



通过mysql的客户端,查询当前MySQL的服务IP及server-id是否是我们刚才设置的。show variables like 'server_id';


第三步:连接master和slave。

创建和运行复制的最后两步是:

使用CHANGE MASTER TO 命令将slave定向到master,然后用START SLAVE启动复制。

(1). 使用CHANGE MASTER TO 命令将slave定向到master。

mysql> CHANGE MASTER TO
    -> MASTER_HOST = '192.168.1.76',
    -> MASTER_PORT=3306,
    -> MASTER_USER='repl_user',
    -> MASTER_PASSWORD='repl_userpassword';


(2). 用START SLAVE启动复制。



第四步:测试。

(1). 在master创建一个数据库为mybatisdb。


(2). 在slave机器上查看,是否存在mybatisdb数据库。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值