一、概述

  让一台服务器的数据与其他服务器数据保持同步。一台主库的数据可以同步到多台备库上,而备库本身也可以配置成其他服务器的主库。

  主要应用:

  1) 数据分布

  2) 负载均衡

  3) 伪备份。在备份基础上能增加更安全的技术补充

  4) 高可用性和故障切换。避免mysql单点失败

  5) 升级测试。升级数据库前,将数据复制到备库,使得查询能够在备库按照预期执行。

  支持两种复制方式

  1) 基于语句的复制

  2) 基于行的复制

  两种方式复制原理一样:在主库上记录二进制日志、在备库重放日志 实现异步的数据复制。异步代表在同一时间点备库的数据与主库不一致,几秒,几分甚至几个小时的延迟。

  复制是向后兼容,即备库数据库版本高于主库 而不能是 低于主库

  关于开销:

  1) 启用二进制日志带来的开销;

  2) 每个备库也会对主库增加一些I/O开销

  3) 锁竞争也会阻碍事务的提交

二、复制的工作原理

  1. 在主库上把数据更改记录到二进制日志 (binary log) 中。

  2. 备库将主库上的日志复制到中继日志 (relay log) 中。

  3. 备库读取中继日志中的事件,将数据放入备库中。

  

三、配置复制

  1. 创建复制账号

    建议为每台数据库服务器创建相同账号。

mysql> grant replication slave,replication client on *.* to repl@'192.168.0.%' identyfied by 'password';

  2. 配置主库  

vi /etc/my.conf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id= //[必须]服务器唯一ID,默认是1,一般取IP最后一段

  

  3. 配置备库

vi /etc/my.conf
[mysqld]
log-bin=mysql-bin //[非必须]启用二进制日志
server-id= //[必须]服务器唯一ID,默认是1,一般取IP最后一段

  4. 分别重启数据库

/etc/init.d/mysql restart

  5. 登录主服务器的mysql,查询master的状态  

mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin. | | | |
+------------------+----------+--------------+------------------+
row in set (0.00 sec)
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

记下file 和 position 用于配置备库

  6. 配置备库 

mysql>change master to master_host='192.168.145.10',master_user='repl',master_password='password',
master_log_file='mysql-bin.000004',master_log_pos=; //注意不要断开,308数字前后无单引号。

  7. 启动从服务器复制功能 

Mysql>start slave;   

  8. 检查从服务器复制功能状态

mysql> show slave status\G

           *************************** . row ***************************

              Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.145.10 //主服务器地址
Master_User: repl//授权帐户名,尽量避免使用root
Master_Port: //数据库端口,部分版本没有此行
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos: //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
...... 注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

参考:

  1) 高性能mysql第三版

  2) itwork的blog

mysql 复制(主从复制)的更多相关文章

  1. Mysql的AB复制(主从复制)原理及实现

    Mysql复制(replication)是一个异步的复制,从一个Mysql 实例(Master)复制到另一个Mysql 实例(Slave).实现整个主从复制,需要由Master服务器上的IO进程,和S ...

  2. MySQL(mariadb)主从复制模式与复制过滤

    在前一篇文章<mysql多实例与复制应用>中只对mysql的复制做了简单的介绍,本篇内容专门介绍一下mysql的复制. MySQL复制 mysql复制是指将主数据库的DDL和DML操作通过 ...

  3. 实现mysql的读写分离(mysql-proxy)____1(mysql的主从复制,基于gtid的主从复制,半同步复制,组复制)

    主从复制原理: 从库生成两个线程,一个I/O线程,一个SQL线程: i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中:主库会生成一个 log ...

  4. 【3.1】【mysql基本实验】mysql复制(主从复制/异步复制/半同步复制,一主一从)

    关键词:mysql复制(异步复制),mysql异步复制 核心原理: mysql 复制流程原理 一个事务在 mysql异步复制中的流程与生命周期 一个事务,在传统半同步的复制流程 #mysql主从基本实 ...

  5. MySQL复制环境(主从/主主)部署总结性梳理

    Mysql复制概念说明Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves) ...

  6. MySQL 数据库主从复制架构

    前文<MySQL 数据库事务与复制>分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面. 原生复 ...

  7. MySQL 复制介绍及搭建

    MySQL复制介绍 MySQL复制就是一台MySQL服务器(slave)从另一台MySQL服务器(master)进行日志的复制然后再解析日志并应用到自身,类似Oracle中的Data Guard. M ...

  8. mysql的主从复制是如何实现的

    前言 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为 ...

  9. 转mysql复制主从集群搭建

    最近搭了个主从复制,中间出了点小问题,排查搞定,记录下来 1环境:虚拟机:OS:centos6.5Linux host2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 ...

  10. MySQL复制的基本概念和实现

    MySQL的复制的概念是完成水平扩展的架构 MySQL性能方面的扩展方式有scale on(向上扩展,垂直扩展)                          scale out(向外扩展,水平扩 ...

随机推荐

  1. js实现可拖动的布局

    思路:采用flex布局,js即时修改固定列的宽度 注意:父元素需设置position:relative:因offsetLeft和offsetTop是相对于具有定位的(position:absolute ...

  2. 分布式爬虫搭建系列 之二-----神器PyCharm的安装

    这里我们使用PyCharm作为开发工具,以下过程摘抄于:http://blog.csdn.net/qq_29883591/article/details/52664478  作者:陌上行走 Pytho ...

  3. Java面向对象-String类

    1,实例化String对象 有两种方式,我们直接看代码: package com.java1234.chap03.sec08; public class Demo1 { public static v ...

  4. 简单的方法实现仿微信底部的Tab选项卡界面

    在网上看了比较多的关于Tab的教程,发现都很杂乱.比较多的用法是用TitlePagerTabStrip和ViewPaper.不过TitlePagerTabStrip有个很大的缺陷,Tab里面的内容刚进 ...

  5. elastic(9)映射

    转自:https://www.cnblogs.com/eryuan/p/7389728.html?utm_source=debugrun&utm_medium=referral elastic ...

  6. pl/sql Command Window

    由于工作需要,最近需要执行sql脚本,之前一直在用执行按钮操作,但最近公司制定了一套标准,其中就有执行sql脚本规范: 以前执行存存储过程: 现在修改存储过程如下: 第一步,打开对应窗口: 第二步,输 ...

  7. ubuntu14.10下Qt5.4无法输入中文

    最近学习Qt,于是在ubuntu下安装了开发环境.我是从官网上下载安装的Qt5.4版本.安装后发现在开发过程中无法输入中文.于是在网上搜了搜.解决办法如下: 1.安装fcitx-frontend-qt ...

  8. Codeforces Round #499 (Div. 2)(1011)

    Natasha is planning an expedition to Mars for nn people. One of the important tasks is to provide fo ...

  9. bash&nbsp;shell笔记7&nbsp;创建函数

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/525126 知 ...

  10. zookeeper介绍及集群的搭建(利用虚拟机)

    ZooKeeper ​ ZooKeeper是一个分布式的,开放源码(apache)的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase.dubbox.kaf ...