1、主从复制原理

(1) 当master 服务器上的数据发生改变时,则将其改变写入二进制日志文件中;

(2) slave服务器会在一定时间间隔内对 master 服务器上的二进制日志进行探测,探测其是否发生过改变;

(3) 如果探测到 master 服务器的二进制日志发生了改变,则开始一个I/O Thread请求master二进制事件;

(4) 同时master 服务器为每个slave的 I/O Thread 启动dump Thread,用于向其发送二进制事件;

(5) slave 服务器将接收到的二进制事件保存至自己本地的中继日志文件中;

(6) slave 服务器 启动SQL Thread 从中继日志中读取二进制日志,在本地重放,使得其数据与master 服务器保持一致;

(7) 最后I/O Thread 与 SQL Thread 将进入睡眠状态,等待下一次被唤醒;

2、操作步骤

(1)  修改master 服务器上mysql的配置文件,使其支持二进制日志功能。

打开编辑:vim /etc/my.cnf

添加如下三行代码:

log-bin=mysql-bin
binlog_format=mixed
server-id=128

参数解释:

//将mysql二进制日志取名为mysql-bin

log-bin=mysql-bin

//二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed

binlog_format=mixed

//为服务器设置一个独一无二的id便于区分,这里使用ip地址的最后一位充当server-id

server-id=128

重启mysql

systemctl restart mysqld.service

(2) slave 从服务器也作步骤1的操作,对mysql进行配置,唯一不同的是server-id使用从服务器的ip尾数

 server-id=129

(3) master服务器为slave服务器分配一个账号,从服务器使用该账号才能到主服务器上来共享主服务器的日志文件。

登录mysql 命令行:mysql -uroot -p,输入密码登录至命令行;

在命令行下输入一下命令:

grant replication slave on *.* to 'latiny'@'192.168.116.129' identified by '123456'; 

replication slave: 表示复制二进制日志权限;

 *.*:可以操作的数据库;

查看master服务器bin 日志信息:show master status;

正常情况下:

File:mysql-bin.000001

Position:154

如果不是这两个值,则需要重置master,输入:reset master。

(4) 设置slave 服务器

登录到数据库命令行:mysql -uroot -p

关闭slave:stop slave;

配置对master服务器的访问信息:

change master to master_host='192.168.116.128', master_user='latiny',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

master_host:设置要连接的主服务器的ip地址;

master_user:设置要连接的主服务器的用户名;

master_password:设置要连接的主服务器的密码;

master_log_file:设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息;

master_log_pos:设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息;

启动slave:start slave;

查看配置信息:show slave status;

主要看Slave_IO_Running 与 Slave_SQL_Running,都为Yes说明配置成功,否则需要重新配置。

到此处,MySQL主从复制配置的基本步骤完成,经测试在master服务器上对数据库进行任何操作都会同步到slave上;这其中也遇到一些坑。

配置时需要注意以下事项:

1、master与slave的ip互相要通,且MySQL对应的端口也要通;

2、master与slave两个库要有唯一的server-id,不能重复;

3、如果MySQL的启动配置文件配置了server-uuid,则maste与slave的server-uuid也不能重复;

4、slave使用的master_log_file与master_log_pos,与master的必须一致;

同步过程中注意的事项:

slave服务器数据发生改变,由于网络原因slave未能拿到二进制日志等都会引起同步失败,有很多原因都会导致同步失败,这个单独再研究各种情况下的解决方案。

最新文章

  1. Javascript初学篇章_4(循环与函数)
  2. css初始化
  3. 安卓奇葩问题之:运行OK,打包安装崩溃(原因是:代码不规范导致编译出错)
  4. 第 1 章 Bootstrap 介绍
  5. Gitblit-Git版本服务器环境部署
  6. RTP、RTCP
  7. vs2012 密匙
  8. 关于dialog引起的 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView not attached to window manager 错误的分析
  9. 本地windows主机无法访问虚拟机里主机解决办法
  10. oracle当需要commit
  11. masonry框架的使用之-多个视图的均匀等间距分布
  12. eclipse code style template
  13. 算法起步之kmp算法
  14. SQL注入详解
  15. Multi-View 3D Reconstruction with Geometry and Shading——Part-2
  16. JVM打印加载类的详情信息
  17. auto_ptr,unique_ptr,shared_ptr,weak_ptr
  18. codeforces水题100道 第六题 Yandex.Algorithm 2011 Qualification 2 A. Double Cola (math)
  19. 【Matplotlib】线设置,坐标显示范围
  20. 模态对话框中的window.close关闭时会打开新页面

热门文章

  1. 关于mysql事务的几件小事
  2. 转:git上传本地项目到github
  3. ONNX源码安装
  4. 跨平台编译ceres for Android
  5. mongodb启用auth,使用密码登录
  6. 给Eclipse安装MinGW
  7. SVN搭建以及客户端使用
  8. Webpack编译提示内存溢出解决方案
  9. “美登杯”上海市高校大学生程序设计邀请赛 **D. 小花梨的取石子游戏**
  10. 分布式 一致性Paxos算法(转载)