前言:本章主要讲解MySQL主从复制的操作步骤。由于环境限制,主机使用Windows环境,从机使用用Linux环境。另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查询相关资料。


1.主从复制的基本原理

slave会从master读取binlog来进行数据同步。主要有以下三个步骤:

①master将改变记录到二进制日志(binary log),这些记录过程叫做二进制日志事件(binary log events)。

②slave将master的binary log events拷贝到中继日志(relay log)。

③slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL的复制是异步且串行化的。

2.主从复制的规则

①每个slave只能有一个master。(一对一)

②每个slave只能有一个唯一的服务器ID。

③每个master可以有多个slave。(一对多)

在主从复制过程中,最大的问题就是延时。

3.一主一从的常见配置

#1.要求。

MySQL版本最好一致且后台以服务运行。并且保证主机与从机互相ping通。主从配置都在[mysqld]结点下,都是小写。

#2.主机修改my.ini配置文件

①server-id=1,主机服务器id。(必须)

②必须启用二进制文件。

log-bin="E:\devSoft\mysql-5.7.22-winx64\data\mysql-bin"

配置该项后,重新启动mysql服务,可看到如下内容。

③启用错误日志。(可选)

log_error ="E:\devSoft\mysql-5.7.22-winx64\data\log\errorlog\log_error.log"

④根目录、数据目录。(可选)

#mysql安装根目录
basedir ="E:\devSoft\mysql-5.7.22-winx64" #mysql数据文件所在位置
datadir ="E:\devSoft\mysql-5.7.22-winx64\data"

⑤临时目录。(可选)

tmpdir  ="E:\devSoft\mysql-5.7.22-winx64\"

⑥read-only=0,表示主机读写都可以。

⑦可设置不需要复制的数据库。(可选)

binlog-ignore-db=mysql

⑧可设置需要复制的数据库。(可选)

binlog-do-db=databasename

#3.从机修改my.cnf配置文件

①从服务器ID。(必须)

②启用二进制日志。(可选)

#4.主机与从机都关闭防火墙,其实也可配置ip规则,但关闭防火墙更快速。

#5.在Windows主机上建立账户并授权给slave。

a.首先在主机上创建账户:

 #%表示任何客户端都可以连接
grant all privileges on *.* to slaveaccount(用户名)@"%(或者指定ip)" identified by '你想设置的密码' with grant option;

b.然后刷新权限表:

flush privileges;

c.然后授权给slave:

GRANT REPLICATION SLAVE ON *.* TO 'slaveaccount(上面创建的用户名)'@'从机数据库ip' IDENTIFIED BY '你想设置的密码'

d.利用b步骤命令再次刷新权限表。

#6.查询master的状态。

File和Position这两个字段非常重要,File告诉从机需要从哪个文件进行复制,Position告诉从机从文件的哪个位置开始复制,在从机上配置时需用到。执行完此操作后,尽量不要在操作主服务器MySQL,防止主服务器状态变化(File和Position状态变化)。

#7.在Linux从机上配置需要的主机。

CHANGE MASTER TO MASTER_HOST='主机IP',MASTER_USER='salveaccount',MASTER_PASSWORD='主机授权的密码',MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position数字;

#8.启动从服务器复制功能。

start slave;

启动复制功能后,需要查看主从复制配置是否成功。

注:只有当Slave_IO_Running:Yes和Slave_SQL_Running:Yes,这两个都为Yes的时候,主从复制配置才成功。

#9.进行测试。

①首先在主机上建立数据库并插入数据。

②在从机中查看是否有相应数据库。

通过从机上查看相应数据,可知主从复制配置成功。

#10.停止从服务复制功能。

stop slave;

4.总结

#1.主从复制的配置,大部分都在主机上,注意查看相关步骤。

#2.这里将主从机的防火墙都关闭是为了更好的演示,实际生产环境中一般不会出现windows主机和linux从机这种情况,因此不应该关闭防火墙,而是根据具体情况配置防火墙规则。


by Shawn Chen,2018.6.30日,下午。


相关内容

MySQL高级知识系列目录

MySQL高级知识(十五)——主从复制的更多相关文章

  1. MySQL高级知识(五)——索引分析

    前言:前面已经学习了explain(执行计划)的相关知识,这里利用explain对索引进行优化分析. 0.准备 首先创建三张表:tb_emp(职工表).tb_dept(部门表)和tb_desc(描述表 ...

  2. MySQL高级知识系列目录

    MySQL高级知识(一)——基础 MySQL高级知识(二)——Join查询 MySQL高级知识(三)——索引 MySQL高级知识(四)——Explain MySQL高级知识(五)——索引分析 MySQ ...

  3. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

  4. MySQL高级知识(十四)——行锁

    前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识.行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高. 0.准备 #1.创建相关测试表tb_ ...

  5. MySQL高级知识(十二)——全局查询日志

    前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能. 1.如何开启 #1.通过my.cnf配置开启该功能. 注:对my.cnf文件配置后,需重启my ...

  6. MySQL高级知识(十)——批量插入数据脚本

    前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用. 0.准备 #1.创建tb_dept_bigdata(部门表). create table tb_dept_bigdata( ...

  7. MySQL高级知识(四)——Explain

    前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句.explain主要用于分析查询语句或表结构的性能瓶颈. 注:本系列随 ...

  8. MySQL高级知识(十一)——Show Profile

    前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量.默认情况下处于关闭状态,并保存最近15次的运行结果. 1.分析步骤 # ...

  9. MySQL高级知识(一)——基础

    前言:MySQL高级知识主要来自尚硅谷中MySQL的视频资源.对于网上视频资源来说,尚硅谷是一个非常好的选择.通过对相应部分的学习,笔者可以说收益颇丰,非常感谢尚硅谷. 1.关于MySQL的一些文件 ...

随机推荐

  1. Android Studio 活动启动模式

    启动模式一共分4种 可以再配置文件中设置 <activity android:name=".MainActivity" android:launchMode="si ...

  2. 最全的.NET Core跨平台微服务学习资源没有之一

    一.Asp.net Core基础 微软英文官网:https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-2.1 .NET Core: ...

  3. IE console.log 调试状态

    最近项目遇到问题,发现alert一个弹窗,在IE中,打开开发人员工具后,可以弹出,但是不打开无法弹出,最后发现是console.log的原因,注释掉console相关的代码,问题就解决了 有些版本的I ...

  4. 24.QTableView函数使用,右击菜单实现

    QTableView view(this); QStandardItemModel model(this); /*设置表头水平标题*/ model.setHorizontalHeaderItem(,n ...

  5. Netty 系列九(支持UDP协议).

    一.基础知识 UDP 协议相较于 TCP 协议的特点: 1.无连接协议,没有持久化连接:2.每个 UDP 数据报都是一个单独的传输单元:3.一定的数据报丢失:4.没有重传机制,也不管数据报是否可达:5 ...

  6. IntelliJ IDEA生成live template(代码模板)

    IntelliJ IDEA生成live template(代码模板) 一.进入live template模板 快捷键:Ctrl+Shift+A进入Find Action,输入live template ...

  7. 10个最佳Node.js企业应用案例:从Uber到LinkedIn

    译者按: Node.js 8已经发布了,NPM模块每周下载量早已超过10亿,从Uber到LinkedIn都在使用Node.js,谁说JavaScript不能写后台? - 原文: 10 best Nod ...

  8. 15-可视化工具Navicat的使用

    [转]15-可视化工具Navicat的使用 本节重点: 掌握Navicat的基本使用 # PS:在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化 ...

  9. 2018-05-09 5分钟入门CTS-尝鲜中文版TypeScript

    知乎原链 本文为中文代码示例之5分钟入门TypeScript的CTS版本. CTS作者是@htwx(github). 它实现了关键词和标准库的所有命名汉化. 本文并未使用附带的vscode相关插件(包 ...

  10. Python 基于Python从mysql表读取千万数据实践

    基于Python 从mysql表读取千万数据实践   by:授客 QQ:1033553122 场景:   有以下两个表,两者都有一个表字段,名为waybill_no,我们需要从tl_waybill_b ...