美文网首页
Mysql主从复制

Mysql主从复制

作者: jan29 | 来源:发表于2020-01-29 20:04 被阅读0次

一、主从复制概述

MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群架构的基础。它通过将一台主机的数据复制到其他一台或多台主机上,并重新应用relay log中的SQL语句来实现复制功能。MySQL支持单向、双向、链式级联、异步复制,5.5版本之后加入的半同步复制,5.6版本之后的GTID复制,MySQL5.7的多源复制、并行复制、loss-less复制。

二、常见的几种主从架构

  • 单向主从模式:Master ——> Slave
  • 双向主从模式:Master <====> Master
  • 级联主从模式:Master ——> Slave1 ——> Slave2
  • 一主多从模式
  • 多主一从模式

三、主从复制功能

  • 实时灾备
  • 读写分离
  • 高可用
  • 从库数据统计
  • 从库数据备份
  • 平滑升级

四、主从复制原理

image.png
  1. change master to 时,ip pot user password binlog position写入到master.info进行记录
  2. start slave 时,从库会启动IO线程和SQL线程
  3. IO_T,读取master.info信息,获取主库信息连接主库
  4. 主库会生成一个准备binlog DUMP线程,来响应从库
  5. IO_T根据master.info记录的binlog文件名和position号,请求主库DUMP最新日志
  6. DUMP线程检查主库的binlog日志,如果有新的,TP(传送)给从从库的IO_T
  7. IO_T将收到的日志存储到了TCP/IP 缓存,立即返回ACK给主库 ,主库工作完成
  8. IO_T将缓存中的数据,存储到relay-log日志文件,更新master.info文件binlog 文件名和postion,IO_T工作完成
  9. SQL_T读取relay-log.info文件,获取到上次执行到的relay-log的位置,作为起点,回放relay-log
  10. SQL_T回放完成之后,会更新relay-log.info文件。
  11. relay-log会有自动清理的功能。
  12. 主库一旦有新的日志生成,会发送“信号”给binlog dump ,IO 线程再请求

五、主从复制实验

实验环境 mariadb
master节点 192.168.200.101
slave节点 192.168.200.102

  1. 安装数据库mariadb mariadb-server
[root@master ~]# yum -y install mariadb mariadb-server
[root@slave ~]# yum -y install mariadb mariadb-server
  1. 修改/etc/my.cnf配置文件
[root@master ~]# vi /etc/my.cnf
[mysqld]
log_bin=mysql-bin
server_id=101
[mysql]
prompt=master [\\d]>
[root@slave ~]# vi /etc/my.cnf
[mysqld]
log_bin=mysql-bin
server_id=102
[mysql]
prompt=slave [\\d]>

[mysqld]
log-bin=mysql-bin //启用二进制日志
server-id=222 //服务器唯一ID,默认是1,一般取IP最后一段
[mysql]
prompt=master [\d]> //为了方便区分两节点,可以增加此条目

  1. 启动数据库
[root@master ~]# systemctl start mariadb && systemctl enable mariadb
[root@slave ~]# systemctl start mariadb && systemctl enable mariadb  
  1. 初始化数据库(或使用mysqld)
[root@master ~]# mysql_secure_installation 
[root@slave ~]# mysql_secure_installation

其他初始化数据库方法

  • mysql_install_db --user=mysql --defaults-file=/etc/my.cnf
    mysqld_safe &
    mysqladmin -uroot password 000000
  • 如果是二进制安装包请使用mysqld --initialize-insecure --user=mysql --basedir=/app/mysql --datadir=/data/mysql进行初始化
  1. 在主服务器上创建复制用户
master [(none)]>grant replication slave on *.* to 'mysync'@'%' identified by '000000';
Query OK, 0 rows affected (0.00 sec)
master [(none)]>show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 |      389 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

主库名字为mysync,密码000000
获取主库状态信息,是为了获得binlog文件名和position号

  1. 告知从库关键复制信息
slave [(none)]>help change master to
 CHANGE MASTER TO
  MASTER_HOST='master2.mycompany.com',
  MASTER_USER='replication',
  MASTER_PASSWORD='bigs3cret',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master2-bin.001',
  MASTER_LOG_POS=4,
  MASTER_CONNECT_RETRY=10;

获取chang master to 复制条目帮助信息

slave [(none)]> change master to    
    -> MASTER_HOST='192.168.200.101',
    -> MASTER_USER='mysync',
    -> MASTER_PASSWORD='000000',   
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='mysql-bin.000008',
    -> MASTER_LOG_POS=389;
Query OK, 0 rows affected (0.00 sec)

告知主库地址,名字,密码,密码,端口号,二进制文件及指针号

  1. 开启主从专用线程
slave [(none)]>start slave;  
Query OK, 0 rows affected (0.00 sec)
  1. 配置完成,查看slave状态:
slave [(none)]>show slave status\G
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

如果IO线程状态和SQL状态被告知Yes,说明主从复制成功

  1. 验证
master [(none)]>create database try; 
Query OK, 1 row affected (0.00 sec)
slave [(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| try                |
+--------------------+

主库创建try,从库实时同步

在主从复制之前,需要做好全库得备份及恢复

全库备份
mysqldump -uroot -p000000 -A -R --triggers -E --master-data=2 --single-transaction > /tmp/full.sql
全库恢复
slave [mysql]> set sql_log_bin=0;
slave [mysql]> source /tmp/full.sql;

相关文章

  • MySQL如何配置主从复制,如何修复主从复制出现的异常?

    MySQL如何配置主从复制,如何修复主从复制出现的异常? 一、什么是Mysql主从复制 MySQL主从复制是其最重...

  • MySQL-主从复制&读写分离

    零、本文纲要 一、MySQL主从复制 主从复制 主从复制过程 配置主从复制 二、MySQL读写分离 读写分离 Sh...

  • Mysql 主从复制

    Mysql 主从复制 MySQL Replication 主从复制(也称 AB 复制)允许将来自一个MySQL数据...

  • 主从复制 & MHA

    一,mysql主从复制 (1)场景一(主从复制 _ 全新环境下) (2)场景二(主从复制 _ mysql已经使用一...

  • mysql主从复制

    构建MySQL主从复制 MySQL的主从复制和mysql的读写分离两者有着紧密联系,数据的读写分离实在主从复制的基...

  • Spring Data JPA 使用主从数据源

    Mysql 配置主从复制 参考:Mysql主从复制-半同步复制[https://www.jianshu.com/p...

  • MySQL集群篇

    1 集群之主从复制 1.1 主从复制概述 MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群...

  • 深度探索MySQL主从复制原理

    概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什...

  • 【转】MySQL 8.0复制改进

    1 - MySQL主从复制模型 我们从最基本的主从复制模型开始说起,下图是最经典的MySQL主从复制架构图: My...

  • mysql主从代理

    mysql主从复制+读写分离 环境: mysql主:193.168.1.1 mysql从:193.168.1.2 ...

网友评论

      本文标题:Mysql主从复制

      本文链接:https://www.haomeiwen.com/subject/axqbthtx.html