什么是复制功能?

MySQL

的复制功能是将备份的数据移动到其他服务器的功能,通过简单的设定即可使用

主→从(master ->slave)架构。

主服务器上发生数据变更,变更内容传送到从服务器,从服务器接受主服务器的变更内容,

将变更内容反映到数据库。

复制功能的优点

1.

提高查询性能

查询处理负载高的情况下,可以通过增加从服务器来实现负载均衡,提高性能

2.

实现高可用性

主服务器发生故障时,可以将从服务器升级为主服务器

3.

实现异地复制

构建异地容灾系统

4.

用作备份服务器

在从服务器上进行备份,可以不影响主服务器的性能

例如可以实现主服务器不停机运行,将从服务器的数据库停止以后进行备份

复制功能的组成

主服务器的所有变更点都记录在二进制日志里面。二进制日志里记录了与更新相关的SQL文,执行查询的日期时间等元数据也记录在内。事务提交的同时以二进制的形式进行记录(sync_binlog=1)。

mysqlbinlog

命令可以查看日志内容。指定启动选项进行输出二进制日志。

--log-bin[=file_name]

推荐将输出路径与数据文件路径放在不同的硬盘上。日志文件的扩展名以连号的形式记录

例)file_name-bin.001, file_name-bin.002, 等等。当前正在使用的日志号码会记录在索引文件里面 (file_name.index)

主服务器的所有变更点都记录在日志里面,在从服务器启动复制功能,将二进制日志的内容传送到从服务器后执行。

从服务器上的文件、线程

文件

中继日志文件:记录主服务器变更点的文件。

二进制日志文件:记录从服务器变更点的文件。 (log-slave-updates有效时才会输出)

master.info

:记录连接主服务器的必要信息、读取日志起始位置等信息的文件。 (MySQL 5.6开始可以保存在表内)

relay-log.info

:记录中继日志执行位置的文件。  (MySQL 5.6开始可以保存在表内)

线程

I/O

线程:将从主服务器上接收的二进制日志作为中继日志保存

SQL

线程:将中继日志里面的更新内容反映到DB里面

复制的种类

二进制日志的记录方式不同

STATEMENT

:文(SQL文)

ROW

:行

MIXED

:文和行混合

不确定的SQL文——执行过程中结果可能会发生变化的SQL

UUID()

、UUID_SHORT()

USER()

FOUND_ROWS()

LOAD_FILE()

SYSDATE()

GET_LOCK()

、RELEASE_LOCK()

IS_FREE_LOCK()

、IS_USED_LOCK()

MASTER_POS_WAIT()

SLEEP()

VERSION()

没有排序的LIMIT句

UDF

、非决定性的存储过程/函数

查询INFORMATION_SCHEMA

READ-COMMITTED/READ-UNCOMMITTED

同步方式不同

异步:将变更点异步传送

半同步:将变更点同步传送,向DB反映时候为异步

异步(默认)

异步传送变更点

优点:相比半同期方式,主服务器的更新响应迅速

缺点:主服务器发生故障时,故障发生前的部分内容可能没有传送到从服务器

适用于负载均衡

(故障发生前的数据需要保护的情况下,需要应用程序对应)

半同步(MySQL 5.5开始追加的功能)

变更点同步传送,异步将数据向DB反映

优点:主服务器发生故障时,故障发生前的更新数据可以确保传送到从服务器

缺点:与异步模式相比主服务器的更新响应差

适用于高可用性的运用 (需要保护故障发生前的更新数据)

是否使用GTID

不使用GTID传统的复制模式

使用GTID:MySQL 5.6新追加的模式

多台服务器组成的复制环境里可以很容易的跟踪比较事务

事务在全局里拥有唯一的识别ID,可以记录在二进制日志里面

使用时和传统的方式有变化

复制开始时自动识别位置

故障切换时,可以自动识别最新的从服务器

很容易组成多层复制

GTID

的优点:

可以自动识别日志文件里的位置,不需手动指定

(主服务器发生故障时,无需确认日志的位置可以实现故障切换)

GTID

的缺点:

限制因素

只能使用InnoDB

不能使用“CREATE TABLE ... SELECT“

不能在事务中使用“CREATE TEMPORARY TABLE” 和 "DROP TEMPORARY TABLE"

不支持sql_slave_skip_counter

从服务器需要输出二进制日志

无法使用复制功能的过滤功能,使用过滤功能GTID里面会出现从未使用过的ID

使GTID有效需要全部的服务器停止后再转成GTID模式。

MySQL 5.7

可以每台服务器轮番启动设置GTID

复制功能的设定方法(不使用GTID)

1

.设定复制功能的参数

2

.在主服务器上建立复制用的用户

3

.备份主服务器数据,将其恢复到从服务器,需要记录备份时的二进制日志名称和位置

4

.从服务器上执行 CHANGE MASTER TO

5

.从服务器上执行 START SLAVE

主服务器:设置下记选项后启动

server-id

log-bin

datadir *

从服务器:设置下记选项后启动

server-id

datadir *

port *

socket *   (Lunix

系OS)

read_only   (

推荐设置)

给用户赋予“REPLICATION SLAVE”权限

CREATE USER 'repl'@'localhost' IDENTIFIED BY 'repl';

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

将主服务器的备份数据恢复到从服务器(不使用GTID)

将冷备份的数据恢复

使用mysqldump进行数据备份和恢复

备份

$ mysqldump --user=root --password=root --master-data=2 \

--socket=/usr/local/mysql/data/mysql.sock \

--hex-blob --default-character-set=utf8 --all-databases \

--single-transaction > mysql_bkup_dump.sql

※需要记录备份的日志文件名称和位置

补充:mysqldump的选项

--master-data=2

将备份时的文件名和位置作为注释记录在备份文件里

--hex-blob

将二进制类型(BINARY、VARBINARY、BLOG) 和BIT类型的数据以16进制输出

--default-character-set

设置mysqldump的默认字符

通常情况下与系统变量default-character-set设置一致

--all-databases

备份全部的数据库

--lock-all-tables

将所有的表加锁后进行备份

--single-transaction

利用InnoDB支持的事务处理,对InnoDB的表进行一致性备份

注意事项:使用mysqldump备份

为了保证数据的完整性,备份中不执行DDL(※)

ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE

引用手册里关于”--single-transaction”的说明

「While a --single-transaction dump is in process, to ensure a valid dump file (correct table contents and binary log coordinates), no other connection should use the following statements: ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE.

4

.从服务器上执行 CHANGE MASTER TO

5

.从服务器上执行 START SLAVE  (不使用GTID)

执行CHANGE MASTER TO

执行START SLAVE

CHANGE MASTER TO MASTER_HOST=‘localhost',

-> MASTER_USER=‘repl',

-> MASTER_PASSWORD=‘repl',

-> MASTER_LOG_FILE='bin.000001',

-> MASTER_LOG_POS=1790;

START SLAVE;

复制功能的设定方法(使用GTID)

1

.设定复制功能的参数

2

.在主服务器上建立复制用户

3

.将主服务器的数据备份后恢复到从服务器,无需使用日志的名称和位置

4

.从服务器执行 CHANGE MASTER TO

5

.从服务器执行 START SLAVE

1

.设置复制功能的参数(使用GTID)

主服务器:设置以下选项后启动

server-id

log-bin

datadir *

gtid-mode=on

enforce-gtid-consistency=on

log-slave-updates

从服务器:设置以下选项后启动

server-id

log-bin

datadir *

port *

socket *   (

使用Lunix)

read_only   (

推荐设置)

gtid-mode=on

enforce-gtid-consistency=on

log-slave-updates

赋予用户“REPLICATION SLAVE”权限

CREATE USER ‘repl'@'localhost' IDENTIFIED BY ‘repl';

GRANT REPLICATION SLAVE ON *.* TO ‘repl'@'localhost';

3

.将主服务器的数据备份后恢复到从服务器(使用GTID)

冷备份后恢复数据

删除Datadir下面的auto.cnf

(

目的为主从服务器的server-uuid一致(※))

使用mysqldump进行备份和恢复

备份例

$ mysqldump --user=root --password=root –master-data=2 \

--socket=/usr/local/mysql/data/mysql.sock \

--hex-blob --default-character-set=utf8 --all-databases \

--single-transaction --triggers --routines --events > mysql_bkup_dump.sql

4

.从服务器执行 CHANGE MASTER TO

5

.从服务器执行 START SLAVE (使用GTID)

CHANGE MASTER TO MASTER_HOST=‘localhost',

-> MASTER_USER=‘repl',

-> MASTER_PASSWORD=‘repl',

-> MASTER_AUTO_POSITION=1;

START SLAVE;

管理日志

使用SHOW MASTER STATUS 确认现在的日志名称和位置

使用SHOW MASTER LOGS 列出全部的日志文件名

使用FLUSH [BINARY] LOGS 命令或者MySQL服务器再启动的时候日志轮换

使用PURGE MASTER 删除特定时点的日志

使用RESET MASTER 删除全部的日志

管理复制功能的命令(从服务器)

START SLAVE [SLAVE_TYPE]

启动从服务器

STOP SLAVE [SLAVE_TYPE]

停止从服务器

SHOW SLAVE STATUS

确认从服务器的状态

确认I/O线程传送二进制日志的位置

确认SQL线程执行的relay日志位置

STOP SLAVE;

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

STAT SLAVE;

忽略下一个事务

发生错误时,确认状态以后需要将特定的事务忽略的情况下使用

GTID

模式下该方法不适用

其他注意事项

MySQL

复制自身不具备的功能

高可用时候的故障切换功能

=>MySQL 5.6的MySQL Utilities提供自动故障切换的脚本

读写分离、负载均衡的控制功能

=>Connector/J(Java)或mysqlnd_ms(PHP)等可以控制

一次不要执行大量的更新处理

防止从服务器的延迟

主服务器事务提交后,将变更的内容传送到从服务器,如果事务执行时间过长的话,反映到从服务器会产生延迟

监视复制功能

通过SHOW SLAVE STATUS的结果,来监视下面内容

I/O

线程、SQL线程是否正常活动?

I/O

线程 : Slave_IO_Running

SQL

线程 : Slave_SQL_Running

复制是否有延迟?

复制是否有延迟 : Seconds_Behind_Master

二进制日志和中继日志的执行位置等

二进制日志的传送状况 : Master_Log_File、Read_Master_Log_Pos

中继日志的执行状况 : Relay_Master_Log_File、Exec_Master_Log_Pos

确认网络延时需要在主服务器上执行SHOW MASTER STATUS 来确认。(比较SHOW SLAVE STATUS 的Master_Log_File、Read_Master_Log_Pos)

监视慢查询日志

确认延迟原因和查询执行时间长的原因

主从服务器的磁盘剩余空间

从服务器的磁盘空间减少的话无法删除中继日志,复制功能会停止

主从服务器的资源使用状况

(CPU

、内存、I/O量,网络流量)

复制功能构成高可用性

优点

MySQL

的标准功能不需要使用共享磁盘、软件等等,成本低廉

可以实现高可用性和查询处理的负载均衡

缺点

故障切换需要使用其他方法实现,运用的时候考虑事项较多

发生故障时候,使用什么样的方法进行切换?

发生故障切换的时候,应用程序的连接需要切换

(MySQL 5.5

之前) 没有崩溃安全机制,从服务器发生故障时,需要重新安装从服务器。

mysql 复制_MySQL的复制功能相关推荐

  1. mysql复制_MySQL主从复制

    前言 配置MySQL主从复制,先来讲讲一些理论. MySQL复制功能提供分担读负载. 基于二进制日志的复制是异步的,那么复制有什么好处? 1.实现在不同服务器上的数据分布,利用二进制日志增量进行,不需 ...

  2. 单机 mysql 复制_MySQL单机复制

    MySQL5.5 IP 192.168.60.134 hostnameora01.dh.cn master port 3306 slave2 prot 3307 slave3 prot 3308 配置 ...

  3. mysql 5.7配置多线程复制,MySQL5.7复制功能实战,基于事务的复制,多源复制和多线程复制配置...

    这篇是幕课网-MySQL5.7复制功能实战视频教程的学习笔记.http://www.imooc.com/learn/589 第1章 MySQL复制基础 MySQL是异步复制 采取针对特定用户的读写分离 ...

  4. mysql 环形复制_mysql复制(Replication)

    1.复制概述 1.1.复制解决的问题 数据复制技术有以下一些特点: (1)    数据分布 (2)    负载平衡(load balancing) (3)    备份 (4)    高可用性(high ...

  5. mysql 基于语句的复制_MySQL 复制 - 性能与扩展性的基石 1:概述及其原理

    1. 复制概述 MySQL 内置的复制功能是构建基于 MySQL 的大规模.高性能应用的基础,复制解决的基本问题是让一台服务器的数据与其他服务器保持同步.接下来,我们将从复制概述及原理.复制的配置.常 ...

  6. mysql 复制方式_MySQL复制方法

    MySQL的二进制日志,MySQL复制原理,MySQL主从模式搭建,MySQL双主模式搭建,MySQL级联模式搭建,MySQL半同步模式复制 一.二进制日志 1.概念 MySQL的二进制日志(bina ...

  7. 以下关于mysql复制关系_MySQL 复制

    MySQL复制介绍 •MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例(slave)上,默认情况下复制是异步进行的,从库也不需要一直连接到主库来同步数据 • MySQL复制的数 ...

  8. Java mysql同步复制_MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.mysql数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  9. mysql 半同步复制_Mysql半同步复制原理及问题排查

    mysql半同步复制和异步复制的差别如上述架构图所示:在mysql异步复制的情况下,Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Master ...

最新文章

  1. 图片分类赛官方baseline解读!
  2. 【leetcode238】Product of Array Except Self
  3. 数据库优化之统计分析实战篇
  4. Git复习(一)之简介、安装、集中式和分布式
  5. boost::hana::concat用法的测试程序
  6. 请先设置tkk_理光MP2014扫描至文件夹的设置方法
  7. python 创建工具包_使用Python工具建立网站
  8. php 签名 bom,PHP与Unicode签名(BOM)
  9. 计算机更新有用吗,驱动有必要升级吗_n卡驱动有必要更新吗
  10. python识别手写数字knn_手写数字识别以及Python sklearn KNN实现
  11. 用极域课堂软件卸载软件
  12. TFIDF理解和应用
  13. 关于华为P9手机的解锁、刷Recovery、获取Root、安装Busybox,以及升级降级的全过程(和一些错误的解决方法)
  14. Android10.0CarAudioZone(一)
  15. 基于Ant Design vue框架之三 删除功能细分
  16. 【Lesson 10】中古调式
  17. latex输入3.3.1类型的标题
  18. 思岚激光建图传感器slamtec Mapper使用便捷性测评
  19. 操作系统高级课程-1
  20. SIGIR‘21因果推断——不要把流行度偏差一棍子打死Causal Intervention for Leveraging Popularity Bias in Recommendation

热门文章

  1. opencv 从原始的图像中找出ROI区域
  2. 用phpcms如何将静态页面制作成企业网站(上)
  3. python当作为条件表达式时_2019知到Python程序设计基础(山东联盟)结课测验答案...
  4. C语言和设计模式(桥接模式)
  5. python打包安卓的方法_打包发布Python模块的方法详解
  6. stmcubemx 脉冲计数_STM32CubeMX:ETR外部脉冲计数器
  7. linux添加自己的键盘映射,Linux 键盘映射
  8. python实现模拟浏览器登录_Python使用win32com实现的模拟浏览器功能示例
  9. html5中如何使图片滚动条,如何使RMarkdown代码块中出现垂直滚动条(html视图)
  10. python不用中间变量交换值_不使用中间变量,交换int型的 a, b两个变量的值。