主从复制前提

  • Master 和 Slave 时间同步
  • 至少 2 台以上实例,需要有角色划分的标识,server_id
  • Master 需要开启 Binlog
  • Master 建立专用复制用户
  • Slave 提前录入Master 的大部分数据
  • Slave 确认复制起点
  • 开启专用复制线程(主库 Dump 线程;从库 IO 线程,SQL 线程)

主从复制原理

文字描述:

主库配置:
# 主库配置 server_id ,开启 bin-log (/etc/my.cnf)
# 主库创建授权主从复制用户(grant replication slave)
# 获取主库的 binlog 信息(file,position)
# 导出主库数据(mysqldump -uroot -p -A -R --triggers --master-data=2 --single-transaction > /tmp/full.sql) 从库配置:
# 从库配置 server_id
# 确认使用主库的主从复制用户可以连接主库
# 导入主库数据(mysql < full.sql)
# 配置主从(change master to),需要 Master节点 IP,用户,端口,binlog-file,binlog-pos
# binlog 配置信息可以从 full.sql 中 22 行获得 工作原理:
# 1. Start slave 之后,从库开启 IO线程 和 SQL线程
# 2. 主库开启 Dump线程
# 3. IO线程 向 Dump线程 发起询问,询问是否有新的数据
# 4. Dump线程 被询问,查找是否有新数据,若有返回给 IO线程
# 5. IO线程 拿到数据,写入TCP缓存
# 6. TCP缓存拿到数据,写入relay-log,并返回给 IO线程一个 ACK报文
# 7. IO线程 收到 ACK报文,会记录当前位置到 master.info(binlog 位置点)
# 8. SQL线程 会主动读取 relay-log,执行主库执行的sql语句
# 9. 执行后,将执行到的位置点,记录到 relay-log.info(relay-log 位置点)

涉及的文件 & 线程

Master 主库

Binlog:主库执行的 SQL语句

Binlog_Dump 线程:用来接收从库的请求,并投递 Binlog 给从库

mysql> show processlist;
+----+------+--------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+--------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
| 2 | rep | 172.16.1.122:44504 | NULL | Binlog Dump | 282 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL |
| 3 | root | localhost | NULL | Query | 0 | init | show processlist |
+----+------+--------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
2 rows in set (0.00 sec)

Slave 从库

Relaylog:中继日志,记录从主库接收的 binlog

master.info:连接主库的信息,以及记录主库 binlog 信息,会随着同步进行更新

relay-log.info:记录sql线程执行到了那里,下次从哪里开始执行

I/O 线程:连接主库,请求 Binlog,接收 Binlog,等待主库发送 Binlog 事件

SQL 线程:读取执行 Relaylog,等待 I/O 线程更新 Relaylog,实质上就是执行从主库接收的 Binlog 事件(Relaylog 中记录着 Binlog 事件)

mysql> show processlist;
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| 3 | system user | | NULL | Connect | 1915 | Waiting for master to send event | NULL |
| 4 | system user | | NULL | Connect | 1635 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL |
| 6 | root | localhost | NULL | Query | 0 | init | show processlist |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec)

主从复制的搭建

主库配置

配置 /etc/my.cnf

[root@db03 ~]#  vim /etc/my.cnf
[mysqld]
server_id=1
log_bin=/service/mysql/data/mysql-bin [root@db03 ~]# /etc/init.d/mysqld start

建立专用复制用户

mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by '123';
Query OK, 0 rows affected (0.03 sec)

查看 Binlog 信息

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 326 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

导出主库全部数据

[root@db03 data]#  mysqldump -uroot -p -A --master-data=2 --single-transaction > /tmp/full.sql

[root@db03 data]#  scp /tmp/full.sql 172.16.1.52:/tmp/

从库配置

配置 /etc/my.cnf

[root@db02 ~]#  vim /etc/my.cnf
[mysqld]
server_id=2 [root@db02 ~]# /etc/init.d/mysqld start

验证专用复制用户

[root@db02 ~]#  mysql -urep -p -h172.16.1.53

导入主库全部数据

[root@db02 ~]#  mysql -uroot -p123 < /tmp/full.sql

配置主从信息

mysql> change master to
-> master_host='172.16.1.121',
-> master_user='rep',
-> master_password='123',
-> master_log_file='mysql-bin.000005',
-> master_log_pos=640;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

开启从库线程

mysql> start slave;
Query OK, 0 rows affected (0.04 sec)

检验是否成功

mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主从数据库出错

I/O 线程出错

mysql> show slave status\G
Slave_IO_Running: No
Slave_SQL_Running: Yes mysql> show slave status\G
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes # 排查思路
1.网络
[root@db02 ~]# ping 172.16.1.53
2.端口
[root@db02 ~]# telnet 172.16.1.53 3306
3.防火墙
4.主从授权的用户错误
5.反向解析
skip-name-resolve
6.UUID或server_id相同

SQL 线程出错

mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: No # 原因:
1.主库有的数据,从库没有
2.从库有的数据,主库没有 # 处理方式三:正解
重新同步数据,重新做主从

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

  1. 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  2. 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离

    实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...

  3. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  4. MySQL主从复制(Master-Slave)实践

    MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...

  5. 2.快速部署MySQL主从复制

      1.快速部署MySQL主从复制 [root@mysql ~]# mysql -uroot -p123456 -S /data/3307/mysql.sock -e "show slave ...

  6. MySQL 主从复制与读写分离概念及架构分析

    1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...

  7. MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现

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

  8. MySQL主从复制

    Mysql主从复制介绍 MySQL支持单向.双向.链式级联.实时.异步复制.在复制过程中,一台服务器充当服务器(Master),而一个或多个其它的服务器充当从服务器(Slave). 复制可以是单向:M ...

  9. mysql主从复制实现数据库同步

    mysql主从复制相信已经用得很多了,但是由于工作原因一直没怎么用过.趁着这段时间相对空闲,也就自己实现一遍.尽管互联网上已有大把类似的文章,但是自身实现的仍然值得记录. 环境: 主服务器:cento ...

  10. mysql主从复制配置

    使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3. ...

随机推荐

  1. kubernets之机理概览

    一  了解kubernets的运行机理 1.1  了解架构 众所周知,kubernets的组成由2个部分组成 kubernets  平面 node节点  (工作节点) 控制平面的组成 etcd  分布 ...

  2. CTFHub - Web(六)

    命令注入: 1.进入页面,测试127.0.0.1, 关键代码: <?php $res = FALSE; if (isset($_GET['ip']) && $_GET['ip'] ...

  3. firewalld原理和基础命令

    firewalld防火墙 Firewalld是什么? Firewalld提供了支持网络.防火墙定义网络看见以及接口安全等级的动态防火墙管理工具

  4. pandas的级联操作

    级联操作 pd.concat, pd.append import pandas as pd from pandas import DataFrame import numpy as np pandas ...

  5. 计算机网络安全 —— 非对称加密算法 RSA 和数字签名(二)

    一.非对称加密算法基本概念 在对称密钥系统中,两个参与者要共享同一个秘密密钥.但怎样才能做到这一点呢?一种是事先约定,另一种是用信使来传送.在高度自动化的大型计算机网络中,用信使来传送密钥显然是不合适 ...

  6. Ubuntu14.04系统安装

    1. 使用U盘或光盘进行引导进入系统安装向导. 2. 安装类型选择,选择中文(简体).然后点安装ubuntu. 3. 安装ubuntu电脑必须接入外网(外网的方式有自动获取或手动编辑IP地址). 网络 ...

  7. 一套高可用、易伸缩、高并发的IM群聊、单聊架构方案设计实践

    一套高可用.易伸缩.高并发的IM群聊.单聊架构方案设计实践 一套高可用.易伸缩.高并发的IM群聊.单聊架构方案设计实践-IM开发/专项技术区 - 即时通讯开发者社区! http://www.52im. ...

  8. autocommit 隔离级别 next lock gap lock 事务隔离级别和锁

    autocommit 隔离级别 https://www.ibm.com/developerworks/cn/opensource/os-mysql-transaction-isolation-leve ...

  9. https://design-patterns.readthedocs.io/zh_CN/latest/index.html

    图说设计模式 - Graphic Design Patterns https://design-patterns.readthedocs.io/zh_CN/latest/index.html

  10. Webpack4.0各个击破(8)tapable篇

    目录 一. tapable概述 二. tapable-0.2源码解析 2.1 代码结构 2.2 事件监听方法 2.3 事件触发方法 三. tapable1.0概述 一. tapable概述 tapab ...