Mysql主从复制原理

主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。

Mysq主从复制的类型

  • 基于语句的复制:

主服务器上面执行的语句在从服务器上面再执行一遍,在MySQL-3.23版本以后支持。

存在的问题:时间上可能不完全同步造成偏差,执行语句的用户也可能是不同一个用户。

  • 基于行的复制:

把主服务器上面改变后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的,在MySQL-5.0版本以后引入。

存在的问题:如果修改的行数过多,造成的开销比较大。

MySQL默认使用基于语句的复制,当基于语句的复制会引发问题的时候就会使用基于行的复制,MySQL会自动进行选择。

在MySQL主从复制架构中,读操作可以在所有的服务器上面进行,而写操作只能在主服务器上面进行。主从复制架构虽然给读操作提供了扩展,可如果写操作也比较多的话(多台从服务器还要从主服务器上面同步数据),单主模型的复制中主服务器势必会成为性能瓶颈。

Mysql主从复制的工作原理

如上图所示,主服务器上面的任何修改都会保存在二进制日志Binary log里面,从服务器上面启动一个I/O thread(实际上就是一个主服务器的客户端进程),连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log里面。从服务器上面开启一个SQL thread定时检查Realy log,如果发现有更改立即把更改的内容在本机上面执行一遍。

如果一主多从的话,这时主库既要负责写又要负责为几个从库提供二进制日志。此时可以稍做调整,将二进制日志只给某一从,这一从再开启二进制日志并将自己的二进制日志再发给其它从。或者是干脆这个从不记录只负责将二进制日志转发给其它从,这样架构起来性能可能要好得多,而且数据之间的延时应该也稍微要好一些。

Mysql主从复制的过程

  1. Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。
  2. Master接收到来自Slave的IO进程的请求后,负责复制的IO进程会根据请求信息读取日志指定位置之后的日志信息,返回给Slave的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置。
  3. Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master从何处开始读取日志。
  4. Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。

linux安装mysql8并且实现主从同步

服务器准备

准备服务器Server1和Server2,如果在同一个服务器的话则安装mysql时需要改变其端口。

卸载mysql

在安装之前必须先检查主机上有没有安装过mysql,如果安装过的话必须先卸载。

安装mysql

下载软件包:

wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm

本地安装:

yum localinstall mysql80-community-release-el7-1.noarch.rpm

安装mysql:

yum install mysql-community-server

设为开机启动:

systemctl enable mysqld

systemctl daemon-reload

启动mysql:

systemctl start mysqld

以上步骤就安装好mysql8了。

获取mysql的临时密码:

grep 'temporary password' /var/log/mysqld.log

登录mysql:

mysql -uroot -p

会提示输入密码,输入之前获取的临时密码即可登录。

此时需要修改mysql的密码,要不然之后的步骤也会强制提示你需要修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '121b33dAj934J1^Sj9ag';

mysql8默认对密码的强度有要求,需要设置复杂一点,要不然也会提示错误。

刷新配置:

FLUSH PRIVILEGES;

主从配置

在主从配置之前需要确保两台mysql需要同步的库状态一致。

配置文件默认在/etc/my.cnf下。

在配置文件中新增配置:

[mysqld]## 同一局域网内注意要唯一server-id=100 ## 开启二进制日志功能,可以随便取(关键)log-bin=mysql-bin

修改配置后需要重启才能生效:

service mysql restart

重启之后进入mysql:

mysql -uroot -p

在master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

CREATE USER 'slave'@'%' IDENTIFIED BY '@#$Rfg345634523rft4fa';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

语句中的%代表所有服务器都可以使用这个用户,如果想指定特定的ip,将%改成ip即可。

查看主mysql的状态:

show master status;

记录下File和Position的值,并且不进行其他操作以免引起Position的变化。

在从my.cnf配置中新增:

mysqld]## 设置server_id,注意要唯一server-id=101 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用log-bin=mysql-slave-bin ## relay_log配置中继日志relay_log=edu-mysql-relay-bin 

修改配置后需要重启才能生效:

service mysql restart

重启之后进入mysql:

mysql -uroot -p

change master to master_host='172.17.0.2', master_user='slave', master_password='@#$Rfg345634523rft4fa', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

master_host :Master的地址

master_port:Master的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

masterlogfile:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

masterlogpos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

masterconnectretry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

在从mysql中查看主从同步状态:

show slave status G;

此时的SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。

开启主从复制:

start slave;

再次查看同步状态:

show slave status G;

SlaveIORunning 和 SlaveSQLRunning 都是Yes说明主从复制已经开启。

若SlaveIORunning一直是Connecting,有下面4种原因:

1、网络不通,检查ip端口

2、密码不对,检查用于同步的用户名和密码

3、pos不对,检查Master的Position

4、mysql8特有的密码规则问题引起:

ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '@#$Rfg345634523rft4fa';

将密码规则修改为:mysqlnativepassword

如果需要指定想要主从同步哪个数据库,可以在master的my.cnf添加配置:

binlog-do-db:指定mysql的binlog日志记录哪个db

或者在slave的my.cnf添加配置:

`replicate-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可replicate-ignore-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可`

如果想要同步所有库和表,在从mysql执行:

STOP SLAVE SQL_THREAD;CHANGE REPLICATION FILTER REPLICATE_DO_DB = ();start SLAVE SQL_THREAD;

如果以上步骤出现问题,可以查看日志:

/etc/log/mysqld.log

至此完成了mysql8主从同步搭建工作。

查看mysql 二进制日志_Mysql主从复制原理及搭建相关推荐

  1. 查看mysql更新日志_mysql 的日志查看

    mysql有以下几种日志: 错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-queries 更新日志: -log-update 二进制日志: -log-bin 默 ...

  2. mysql 二进制日志详解_Mysql二进制日志详解

    引言 注:图片取自网络 提一下比较重要的几个: 重做日志(Redo Log):重做日志是实现mysql事务的持久性的原理之一,当新增数据时,Redo Log会备份新数据,在事务提交前,只要持久化Red ...

  3. mysql二进制日志内容说明_MySQL二进制日志相关问题详细说明

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  4. mysql 多项式_mysql主从复制原理及实现

    一.主从复制原理 利用MySQL提供的Replication,其实就是Slave从Master获取Binary log文件,然后再本地镜像的执行日志中记录的操作.由于主从复制的过程是异步的,因此Sla ...

  5. 不属于mysql二进制日志相关的参数_MySQL二进制日志相关问题详解

    本文出处: (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 今天无意中发现了一个云栖社区举行的MySQL"第一 ...

  6. MySQL三大日志及主从复制的原理

    MySQL三大日志及主从复制的原理 文章目录 MySQL三大日志及主从复制的原理 一.binlog 1.概念 2.分类 3.binlog使用场景 4.binlog刷盘时机 5.binlog日志格式 二 ...

  7. mysql二进制日志管理_MYSQL二进制日志管理脚本

    MYSQL二进制日志管理脚本脚本原理是每小时对进行flush生成新的二进制日志,将二进制日志备份至NFS,并压缩存放:#!/bin/bash#Purpose:管理二进制日志,每小时刷新二进制日志,并将 ...

  8. mysql 二进制日志 解析c++_mysql二进制日志文件恢复数据库

    二进制日志的文件的作用 mysql二进制日志文件用来记录所有用户对数据库操作,即记录用户对数据库操作的sql语句.如果有此文件,当数据库发生意外时,可以通过此文件查看到用户在此文件记录的时间段内用户所 ...

  9. mysql 二进制日志变化_MySQL运维之二进制日志

    MySQL二进制日志里保存会造成或可能造成数据变化的SQL语句.通过二进制日志可以完成如实时异地容灾备份.读写分离.数据恢复等功能.下面,我们一起来看看Mysql二进制日志. 开启bin-log日志 ...

  10. mysql 二进制日志大小_mysql二进制日志。

    mysql二进制日志: 命令行参数: --log-bin[=file_name]   文件名 --log-bin-index[=file]文件索引 --max_binlog_size     单个文件 ...

最新文章

  1. vim 配置文件 C/C++
  2. 32位浮点数在威纶触摸屏显示_MCGS触摸屏与与西门子 S7-1200 PLC以太网通讯
  3. 【实习项目记录】(一)加密算法MD5和RSA
  4. Ubuntu上安装显卡驱动
  5. TP6返回插入数据的自增ID
  6. 如何用python编程制作出表格_使用Python轻松制作漂亮的表格
  7. 为什么本地图片都不能直接浏览器_抖音精选答疑解惑!你的视频为什么不能被下载?...
  8. linux进程线程协程的区别,进程和线程、协程的区别
  9. 进程间通信(未完成)
  10. checkbox复选框,如何让其勾选时触发一个事件,取消勾选时不触发
  11. VC++字符串类型转换
  12. OC中ACES流程色差问题解决方法!
  13. 声纹识别demo_科学网—声纹识别、说话人识别软件,SPEAKER v0.1 - 石自强的博文...
  14. matlab符号函数绘图法_[单选] MATLAB中函数()实现符号函数三维曲线的绘图。
  15. 您的自动化测试糟透了
  16. 微信停止为苹果服务器,苹果手机终于解决了微信延迟
  17. java实现树形菜单_Java构建树形菜单的实例代码(支持多级菜单)
  18. IB中文:文学作品中幽默手法的表现方式(下)
  19. 一款国产的自动摘要在线工具-文皮皮
  20. 线性dp,后缀处理——cf1016C好题

热门文章

  1. Atitit table的读取解析from html by jsoup java html paresr 目录 1. atitit.gui控件的定位与选择器 1 2. 读取表格流程 遍历表格ta
  2. Atitit 四种自动机 fsm pda 目录 1. 自动机可分为有限自动机、后进先出自动机、线性有界自动机、图灵机等几种。它们对语言的识别能力各不相同。 2 1.1. 抽象自动机的理论。 2 1.
  3. Atitit.在线充值功能的设计
  4. Atitit.pdf 预览 转换html attilax总结
  5. atitit.修复xp 操作系统--重装系统--保留原来文件不丢失
  6. paip.调试js 查看元素事件以及事件断点
  7. paip.提升性能---并行多核编程哈的数据结构list,set,map
  8. Julia: Dates =DateFormat, format,parse.......
  9. 特稿:OceanBase 连破纪录的背后,是技术人的砥砺前行 | 凌云时刻
  10. 【大云制造】大云运营管理平台V1.4发布——不忘初心,砥砺前行,为了创造无限的价值!...