mysql 复制(主从复制)

一、概述

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

  主要应用:

  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 [email protected]‘192.168.0.%‘ identyfied by ‘password‘;

  2. 配置主库  

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

  

  3. 配置备库

vi /etc/my.conf
    [mysqld]
    log-bin=mysql-bin   //[非必须]启用二进制日志
    server-id=6     //[必须]服务器唯一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.000004 |      308 |              |                  |
       +------------------+----------+--------------+------------------+
       1 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;   //注意不要断开,308数字前后无单引号。

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

Mysql>start slave;   

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

mysql> show slave status\G

           *************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.145.10  //主服务器地址
              Master_User: repl//授权帐户名,尽量避免使用root
              Master_Port: 3306    //数据库端口,部分版本没有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
              Read_Master_Log_Pos: 600     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
              Relay_Log_File: ddte-relay-bin.000003
              Relay_Log_Pos: 251
              Relay_Master_Log_File: mysql-bin.000004
              Slave_IO_Running: Yes    //此状态必须YES
              Slave_SQL_Running: Yes     //此状态必须YES
                    ......

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

参考:

  1) 高性能mysql第三版

  2) itwork的blog

时间: 2024-10-12 16:47:26

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

MySQL 复制过滤器、监控维护及主从复制的读写分离

MySQL 复制过滤器.监控维护及基于SSL的主从复制 =============================================================================== 概述: 本章将主要介绍MySQL复制中如何过滤,监控维护,以及基于SSL的主从复制,具体内容如下: MySQL 复制过滤器 ·从服务器库级别过滤 MySQL 清理日志:PURGE 复制监控 ·Master ·Slave 如何确定主从节点的数据是否一致 MySQL基于SSL的主从复制(

MySql ---- ab复制(主从复制)

ab复制(主从复制)可以让mysql实现:1.数据的备份(主服务器的数据全部同步到从服务器)2.可以负载均衡减小主服务器的压力3.真正实现mysql的读写分离 配置方法主服务器:1. 主服务器 my.cnf 配置cat /etc/my.cnf[mysqld]log-bin=mysql_binserver-id=1    不允许重复2. 授权,指定从服务器只能复制binlog,从服务器的ipgrant replication slave on *.* to 'slave'@'192.168.1.1

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

Mysql复制(replication)是一个异步的复制,从一个Mysql 实例(Master)复制到另一个Mysql 实例(Slave).实现整个主从复制,需要由Master服务器上的IO进程,和Slave服务器上的Sql进程和IO进程共从完成.         要实现主从复制,首先必须打开Master端的binary log(bin-log)功能,因为整个MySQL 复制过程实际上就是Slave从Master端获取相应的二进制日志,然后再在自己slave端完全顺序的执行日志中所记录的各种操作

MySQL的主从复制与MySQL的主主复制

一.MySQL的主从复制 注意事项: 主节点必须开启二进制日志,在从节点上务必开启中继日志: 中继日志:从服务器上记录下来从主服务器的二进制日志文件同步过来的事件: 下面来做一个小的实验,两个空的数据库的主从复制 配置前注意事项:务必同步时间 ntpdate 172.18.0.1 如果服务开启先停止服务,清空数据 systemctl stop mariadb rm -rf /var/lib/mysql/* 实验演示: 1.主节点上的配置文件中定义如下 [server]              

43 MySQL复制及Galera Cluster、MHA

01 MySQL复制及MHA 实战:配置MHA 配置: node1: MHA 192.168.1.130 CentOS7.2 node2:Master 192.168.1.131 CentOS7.2 node3:Slave  192.168.1.132 CentOS7.2 node4:Slave  192.168.1.133 CentOS7.2 一.准备mysql复制环境 [[email protected] ~]# yum -y install mariadb-server [[email p

怎样解决MySQL数据库主从复制延迟的问题?

1.网络超时 2.慢查询 3.流量 问题一:主库的从库太多,导致复制延迟从库数据以3-5个为宜,要复制的从节点数量过多,会导致复制延迟问题二:从库硬件比主库差,导致复制延迟查看Master和Slave的系统配置,可能会因为机器配置不当,包括磁盘I/O.CPU.内存等各方面因素造成复制的延迟.一般发生在高并发大数据量写入场景中问题三:慢SQL语句过多假如一条SQL语句执行时间是20秒,那么从执行完毕到从库上能查到数据至少需要20秒,这样就延迟20秒了.一般要把SQL语句的优化作为常规工作不断地进行

MySQL的主从复制是如何实现的

前言 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果. MySQL主从复制架构图 一主一从 master-slave-replication-01 一主多从 master-slave-replication-02 级联 master-slave-repli

Mysql中主从复制的原理、配置过程以及实际案例

Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6.7_64位操作系统,并分别在两台服务器上安装mysql.我的IP地址分别为:192.168.1.15/192.168.1.16,这里我定义15为主服务器,16为从服务器.首先,我们编辑主服务器中mysql配置文件.(因我的mysql使用非root用户安装,因此配置文件放在/home/formal/

第20章 mysql 复制

2015-10-24 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] Chapter 17 Replication [4] 第6章:MySQL中的复制 [5] 理解MySQL——复制(Replication) [6] MySQL 5.6 复制介绍 [7] MySQL复制原理与配置 [8] mysql主从复制(超简单)

MySQL 数据库主从复制架构

前文<MySQL 数据库事务与复制>分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面. 原生复制架构 MySQL 的原生复制架构原理如上图所示.从库的 I/O Thread 线程负责不断读取主库的 binlog 日志文件并写入本地的 Relay log 临时缓存.从库的 SQL Thread 线程则不断读取 Relay log 重放事件入库.整个过程看起来是比较简单清晰的,但其中有几个点对主从数据一致