##MySQL-主从复制:基于二进制文件复制详解

###前言

主从复制是指把一个MySQL的数据库服务器作为主服务器(master),然后把master的数据复制到一个或者多个MySQL数据库服务器作为从服务器(slave)。从master到slave的复制一般是异步复制,所以从服务器的复制可以随时停止,也不会影响到主服务器的使用。可以通过配置来决定只复制哪些数据库或者哪些表的数据。

###主从复制的优点

读写分离提高负载:master服务器不在负载读操作,只处理写入和更新操作,可显著提升主服务器的写操作的性能。而读操作是通过多个slave服务器来读取数据,多个slave服务器可以分散读操作的压力,减少对单机I/O和带宽的依赖,也可以提升读操作的性能。

数据安全:因为数据是异步复制过来的,可以在slave服务器上进行测试,或者进行数据分析。即不会更改master服务器的数据,也不会影响master服务器的性能

远程数据分发:当你需要在本地使用数据时,可以通过复制功能把数据复制到本地,这样就不需要访问远程master服务器

###基于二进制文件(binary log)复制

####原理介绍

1、master服务器把对源数据库的写入和更新操作以事件的方式记录到二进制日志文件(binary log)中。不同的操作方式会以不同的日志格式记录到文件中

2、slave服务器开启一个I/O线程连接master服务器去请求binary log,然后写入到本地的中继文件(relay log)中

3、master的开启一个log dump线程读取binary log并传送给slave的I/O线程

4、slave开启一个SQL线程读取relay log中的命令,在slave服务器上执行

>线程说明参考

####环境准备

| 操作系统 |数据库 |ip地址 |端口 |主/从 |

| --- | --- | --- | --- |--- |

| window server 2008 r2 | mysql 8.0.12 |10.119.173.98 |3006 |主|

| window server 2008 r2 | mysql 8.0.12 |10.119.173.97 |3006 |从|

| window server 2008 r2 | mysql 8.0.12 |10.119.173.96 |3006 |从|

####1.Master配置

1.需要设置一个唯一的 server-id ,并且设置二进制日志文件 log-bin=[file_name]。

MySQL8.0之前的版本默认log_bin=OFF是关闭日志记录的,设置了log-bin,就会开启记录日志log_bin=ON

编辑master的配置文件my.ini,在[mysqld]下添加如下内容

[mysqld]

server-id=1 #服务器id

log-bin=mysql-bin #二进制日志文件的基名字

#设置需要写日志的数据库的名称,不设置默认所有数据库。一个配置项只能配置一个数据库,如果要设置写多个数据库,那么需要写多份配置项,用逗号来分割多个数据库是无效。

binlog-do-db=test

#binlog-do-db=test1

#binlog-do-db=test2

#设置不需要写日志的数据库的名称,一个配置项只能配置一个数据库,如果要设置写多个数据库,那么需要写多份配置项,用逗号来分割多个数据库是无效。

binlog-ignore-db=mysql

#日志记录格式,默认是ROW行模式。还有STATEMENT语句模式和MIXED混合模式。不同的记录格式会对binlog-do-db和binlog-ignore-db产生影响

#STATEMENT模式:记录执行的SQL语句

#Row模式:记录语句执行后对单个行做的修改,而不是记录执行的语句

binlog-format=ROW

> binlog-format的参考

> binlog-do-db的说明以及和binlog-format关系的参考

2、在InnoDB存储引擎时,为了获得最大持久性和一致性,需要增加下面两个配置

#控制写入二进制日志的频率。

#0表示mysql服务器依赖与操作系统来把二进制文件写入到磁盘中,这种情况下性能最好。但是在断电或者操作系统崩溃时,服务器可能提交了未同步到二进制文件的事务。

#1表示在提交事务前先把二进制文件写入到磁盘中,可能会对性能有印象

sync_binlog=1

#控制事物提交时ACID的遵守的严格性和性能之间的平衡。默认1时,表示每次事务提交时记录日志的同时马上写入磁盘

innodb_flush_log_at_trx_commit=1

> sync_binlog的参考

> innodb_flush_log_at_trx_commit的参考

3、在master上给slave创建一个拥有复制权限的账号repl,密码是123456

CREATE USER 'repl'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

####2.Slave配置

1、需要给slave设置一个唯一的 server-id ,值不要和master和其他slave重复。如果需要只复制特定的数据库或者排除特定的数据库,可以使用 replicate-do-db 和 replicate-ignore-db 配置。

当启用slave的log-bin日志记录,配合log-slave-updates=ON时,slave会在复制master的数据时也记录到自己的二进制日志中。这样方便以后的主从切换,数据恢复。甚至可以实现更复杂的多级复制拓扑,比如:master->slave->slave

编辑slave的配置文件my.ini,在[mysqld]下添加如下内容

[mysqld]

server-id=2 #服务器id

log-bin=mysql-bin #二进制日志文件的基名字

#当开启了log-bin时,并且log-slave-updates=ON时slave复制master的数据时也记录到自己的二进制日志中,默认值ON

log-slave-updates=ON

#中继日志的基名称

relay-log=mysql-relay

#设置需要复制的数据库的名称,不设置默认所有数据库。一个配置项只能配置一个数据库,如果要设置写多个数据库,那么需要写多份配置项,用逗号来分割多个数据库是无效,效果同binlog-do-db。

replicate-do-db=test

#设置不需要复制的数据库的名称,一个配置项只能配置一个数据库,如果要设置写多个数据库,那么需要写多份配置项,用逗号来分割多个数据库是无效,效果同binlog-ignore-db。

replicate-ignore-db=mysql

#告诉slave服务器在启动时不开启复制功能,默认值OFF

skip-slave-start=OFF

>其他slave服务器配置一样,只有server-id不同

slave的配置参考

####3.配置和开启复制功能

1、查询master当前的状态

因为是InnoDB,首先在master上执行FLUSH TABLES WITH READ LOCK;语句,关闭所有打开的表,刷新缓存。并且用全局读锁锁住所有的表。

然后在master上执行下面sql获取binary log的文件名称和当前写入的坐标

SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 | 115 | test | mysql |

+------------------+----------+--------------+------------------+

2、复制master库的数据到slave库

如果在slave开启复制之前,master的test库已经有数据了,那么需要先把master的数据快照dump下来,然后复制到slave服务器。如果是新库没有数据要复制,可以跳过此步骤到下一步。

使用mysqldump工具命令如下:

mysqldump -h[IP地址] -P[端口号] -u[用户名] -p[密码] --databases test > dump.sql

mysqldump -h10.119.173.98 -P3006 -uroot -p123456 --databases test > dump.sql

>复制数据快照参考

3、释放master上的全局读锁

UNLOCK TABLES;

4、导入master的test库数据到slave服务器,导入第2步中dump.sql文件。如果是新库没有数据导入,则跳过此步骤,进行到第5步。

mysql -h[IP地址] -P[端口号] -u[用户名] -p[密码] < dump.sql

mysql -h10.119.173.96 -P3006 -uroot -p123456 < dump.sql

5、在slave服务器上配置slave要复制的文件和开始的坐标

CHANGE MASTER TO

MASTER_HOST='10.119.173.98',

MASTER_PORT=3006,

MASTER_USER='repl',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='mysql-bin.000001',

MASTER_LOG_POS=115;

>MASTER_LOG_FILE=3.配置复制功能第1步查询出来的File

>MASTER_LOG_POS=3.配置复制功能第1步查询出来的Position

>CHANGE MASTER TO参考

6.开启复制功能

在slave服务器上执行START SLAVE语句,开启slave的复制功能。

START SLAVE;

7.查看从库的复制状态信息

SHOW SLAVE STATUS

Slave_IO_Running和Slave_SQL_Running都=Yes,就表明复制功能正常运行

>Slave_IO_Running:从master读取二进制文件,写入到slave的中继日志的I/O线程。yes表示正常

>Slave_SQL_Running:从中继日志中读取新的命令执行到slave的库中的SQL线程。yes表示正常

>Master_Log_File:表示I/O线程当前正在读取的master的二进制文件名称

>Read_Master_Log_Pos:表示I/O线程当前正在读取的master的二进制文件中的位置信息

>Relay_Log_File:当前在执行的中继日志名称

>Relay_Log_Pos:当前在执行的中继日志中执行到的位置

>Last_Errno:最后一次复制失败的错误日志号

>Last_Error:最后一次复制失败的错误日志

当slave服务器停止了复制功能,要重新开始时,要从停止前读取的位置开始继续复制命令。第5步中MASTER_LOG_FILE=Master_Log_File的值,MASTER_LOG_POS=Read_Master_Log_Pos的值

>SHOW SLAVE STATUS参考

这样就配置好了一个master->slave的主从复制,多个从库的配置可以重复【3.配置和开启复制功能的4-7步】即可。

###后记

如果想配置成复杂的多级复制拓扑,比如A->B->C,那么先配置A作为master,B作为slave,B复制A的数据。然后在配置B作为master,C作为slave,C复制B的数据。

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[MySQL 主从复制:基于二进制文件复制配置详解]http://www.zyiz.net/tech/detail-130981.html

mysql二进制文件复制_MySQL 主从复制:基于二进制文件复制配置详解相关推荐

  1. mysql主从配置 ssl_Mysql主从基本配置及基于ssl的配置详解

    一.网络拓扑图 二.实验简介 如图所示,本实验主要是实现两台Mysql服务器之间的主从复制,包括:设置主从服务器之间的半同步.mysql的复制过滤.和基于SSL的mysql主从复制功能,上图中 主服务 ...

  2. 给mysql 授权 命令_mysql中授权命令grant用法详解:

    mysql中授权命令grant用法详解: mysql中可以给你一个用户授予如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,用法格式为: gra ...

  3. mysql escape关键字_MySQL中ESCAPE关键字的用法详解

    MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. MySQL中,转义字符以"\" ...

  4. mysql binlog 回退_MYSQL Binglog分析利器:binlog2sql使用详解

    大部分使用mysql的业务也都会开启binlog,用以记录数据库的更新操作.当然binlog的格式大家也都比较清楚,分别是statement.mixed.row模式.针对row格式的binlog,它以 ...

  5. mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解

    概述 MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数.并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引 ...

  6. mysql事务并发控制_mysql事务和多版本并发控制详解

    一.mysql事务 事务就是一组原子性的SQL查询,或者说一个独立的工作单元.如果数据库引擎可以成功执行该组全部语句,那么就执行该组语句.如果其中有任何一条语句不能执行,那么所有的语句都不会执行.也就 ...

  7. mysql密码高级_MySQL数据库高级操作(图文详解)

    数据表高级操作 准备工作:安装MySQL数据库 create database CLASS; use CLASS; create table TEST (id int not null,name ch ...

  8. mysql week 参数_MySQL week()函数及参数mode详解

    通常,一年的正常年份为365天,闰年为366天.一年又可以分为许多周,每周有7天. 所以一年,我们经常有365/7 = 52周,周范围是从1到52. 要查看给定日期属于哪个周数,您可以使用WEEK函数 ...

  9. jdbc mysql 换行符_mysql JDBC URL格式各个参数详解

    mysql JDBC URL格式如下: jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值 ...

  10. mysql linux文件_MySQL在Linux系统下配置文件详解

    在日常的的开发过程中接触到了SQLServer和MySQL数据库的操作性问题,可能是以前接触的都是SQL Server,才开始接触MySQL,总感觉使用MySQL没有使用SQLserver那么顺手,一 ...

最新文章

  1. 人工智能从业者:大牛,工程师和调参狗
  2. springframework引入不进来_啥?你不知道JWT
  3. php显示玩家,php.取得玩家IP
  4. memcached 介绍
  5. 胆战心惊形容什么_阿里员工感慨:加班累死累活,还胆战心惊,难道IT公司都这个样?...
  6. 计算机无法正常更新,无法完成更新正在撤销更改请不要关闭你的计算机如何修复...
  7. CF603E-Pastoral Oddities【CDQ分治,可撤销并查集】
  8. linux网络编程之多路I/O转接服务器poll函数
  9. 中国基站射频设备行业市场供需与战略研究报告
  10. 随机读写工具,手写,百度云源码直接下载
  11. LNMP(Nginx服务,MySQL 服务,安装PHP服务 手动安装技术文档)
  12. 【论文阅读-表情捕捉】High-quality Real Time Facial Capture Based on Single Camera
  13. 百度EasyDL图像分类的使用
  14. IC设计多时钟域处理
  15. vue动态面包屑导航的使用
  16. Powershell 操作Excel的基本命令
  17. python123基本数据类型有哪些_python的基本数据类型
  18. 前端初学——模拟做的旧版小网站
  19. 高斯积分e^(-x^2)在无限域上的定积分
  20. hdu4504 威威猫系列故事——篮球梦 解题报告

热门文章

  1. 2.1.5 编码与调制(1)
  2. Spring boot的Spring MVC自动配置
  3. Spring RabbitMQ使用
  4. SpringIOC容器中Bean的生命周期
  5. 【leetcode】762. 二进制表示中质数个计算置位
  6. 【数据结构-图】1.图的构造和遍历(基本理论+代码)
  7. 【2019暑假刷题笔记-STL绪论】总结自《算法笔记》
  8. 2021-10-7 !二叉树的层序遍历
  9. JPA持久化异常:PersistenceException: org.hibernate.PersistentObjectException
  10. CentOS下配置HTTPS访问主机并绑定访问端口号