MySQL之复制(三)

复制

从另一个服务器开始复制

前面的设置都是嘉定主备库均为刚刚安装好且都是默认的数据,也就是说两台服务器上数据相同,并且知道当前主库的二进制日志。这不是典型的案例,大多数情况下有一个已经运行了一段时间的主库,然后用一台新安装的备库与之同步,此时这台备库还没有数据。有几种办法来初始化备库或者从其他服务器克隆到备库。包括从主库复制数据、从另外一台备库克隆数据,以及使用最近的一次备份来启动备库,需要由三个条件来让主库和备库保持同步:

  • 1.在某个时间点的主库的数据快照
  • 2.主库当前的二进制日志文件,和获得数据快照时在该二进制日志文件中的偏移量,我们把这两个值称为日志文件坐标(log file coordinates)。通过这两个值可以确定二进制日志的位置。可以通过SHOW MASTER STATUS命令来获取这些值
  • 3.从快照时间到现在的二进制日志

下面是一些从别的服务器克隆备库的方法:

  • 1.使用冷备份
    最基本的方法是关闭主库,把数据复制到备库.重启主库后,会使用一个新的二进制文件,我们在备库通过执行CHANGE MASTER TO 指向这个文件的起始处。这个方法的缺点很明显:在复制数据时需要关闭主库
  • 2.使用热备份
    如果仅使用了MyISAM表,可以在主库运行时使用mysqlhotcopy或rsync来复制数据
  • 3.使用mysqldump
    如果只包含InnoDB表,那么可以使用以下命令来转储主库数据并将其加载到备库,然后设置相应的二进制日志坐标
$ mysqldump --single-transaction --all-databases --master-data=1--host=server1 \| mysql --host=server2

选项–single-transaction使得转储的数据为事务开始前的数据。如果使用的是非事务型表,可以使用–lock-all-tables选项来获得所有表的一致性转储

  • 4.使用快照或备份
    只要知道对应的二进制日志坐标,就可以使用主库的快照或者备份来初始化备库(如果使用备份,需要确保从备份的时间点开始的主库二进制日志都要存在)。只需要把备份或快照恢复到备库,然后使用CHANGE MASTER TO指定二进制日志的坐标。也可以使用LVM快照、SAN快照、EBS快照——任何快照都可以
  • 5.使用Percona Xtrabackup
    Percona的Xtrabackup是一款开源的热备份工具。它能够再备份时不阻塞服务器的操作,因此可以在不影响主库的情况下设置备库。可以通过克隆主库或另一个已存在的备库的方式来建立备库。创建一个备份(不管是从主库还是从别的备库),并将其转储到目标机器,然后根据备份获得正确的开始复制的位置。
    5.1 如果是从主库获得备份,可以从xtrabackup_binlog_pos_innodb文件中获得复制开始的位置
    5.2 如果是从另外的备库获得备份,可以从xtrabackup_slave_info文件重获得复制开始的位置。
  • 6.使用另外的备库
    可以使用任何一种提及的克隆或者拷贝技术来从任意一台备库上将数据克隆到另外一台服务器。但是如果使用的是mysqldump,–master-data选项就会不起作用。此外,不能使用SHOW MASTER STATUS来获得主库的二进制日志坐标,而是在获取快照时使用SHOW SLAVE STATUS来获取备库在主库上的执行位置。使用另外的备库进行数据克隆最大的缺点是,如果这台备库的数据已经和主库不同步,克隆得到的就是脏数据。

不要使用LOAD DATA FROM MASTER或者LOAD TABLE FROM MASTER!这些命令过时、缓慢,并且非常危险,并且只适用于MyISAM存储引擎。
不管选择哪种技术,都要能熟练运用,要记录详细的文档或编写脚本。因为可能不止一次需要做这样的事情。甚至当错误发生时,也需要能够处理

推荐的复制配置

有许多参数来控制复制,其中一些会对数据安全和性能产生影响。推荐一种"安全"的配置,可以最小化问题发生的概率。在主库上二进制最重要的选项是sync_binlog:

sync_binlog=1

如果开启该选项,MySQL每次在提交事务前会将二进制日志同步到磁盘上,保证在服务器崩溃时不会丢失事件。如果禁止该选项,服务器会少做一些工作,但二进制日志文件可能在服务器崩溃时损坏或丢失信息。在一个不需要作为主库的备库上,该选项带来了不必要的开销。它只适用于二进制日志,而非中继日志。如果无法容忍服务器崩溃导致表损坏,推荐使用InnoDB。在表损坏无关紧要时,MyISAM是可以接受的,但在一次备库服务器崩溃重启后,MyISAM表可能已经处于不一致状态。一种可能是语句没有完全应用到一个或多个表上,那么即使修复了表,数据也可能是不一致的。
如果使用InnoDB,强烈推荐设置如下选项:

innodb_flush_logs_at_trx_commit #Flush every log write
innodb_support_xa=1 # MySQL 5.0 and newer only
innodb_safe_binlog # MySQL 4.1 only,rounghly equivalent to innodb_support_xa

这些事MySQL5.0及最新版本中的默认配置,我们推荐明确指定二进制日志的名字,以保证二进制日志名在所有服务器上是一致的,避免因为服务器名的变化导致日志文件名变化。你可能认为以服务器名来命名二进制日志无关紧要,但经验表明,当在服务器间转移文件、克隆新的备库、转储备份或者其他一些你想象不到的场景下,可能会导致很多问题。为了避免这些问题,需要给log_bin选项指定一个参数。可以随意地给一个绝对路径,但必须明确地指定基本的命名:

log_bin=/var/lib/ysql/mysql-bin # Good,specifies a path and base name
# log_bin   # Bad, base name will be server's hostname

在备库上,我们同样推荐开启如下配置选项,为中继日志制定绝对路径:

relay_log=/path/to/logs/relay-bin
skip_slave_start
read_only

通过设置relay_log可以避免中继日志文件基于机器名来命名,防止之前提到的可能在主库发生的问题。制定绝对路径可以避免多个MySQL把本中存在的Bug,这些Bug可能会导致中继日志在一个意料外的位置创建。skip_slave_start选项能够阻止备库在崩溃后自动启动复制。这可以给你一些机会来修复可能发生的问题。如果备库在崩溃后自动启动并且处于不一致的状态,就可能导致更多的损坏,最后将不得不把所有数据丢弃,并重新开始配置备库。
read_only选项可以阻止大部分用户更改非临时表,除了复制SQL线程和其他拥有超级权限的用户之外,这也是要尽量避免给正常账号授予超级权限的原因之一。
即使开启了所有我们建议的选项,备库仍然可能在崩溃后被中断,因为master.info和中继日志文件都不是崩溃安全的。默认情况下甚至不会刷新到磁盘,直到MySQL5.5版本才有选项来控制这种行为。如果正在使用MySQL5.5并且不会介意额外的fsync()导致的性能开销,最好设置以下选项:

sync_master_info=1
sync_relay_log=1
sync_relay_log_info=1

如果备库与主库的延迟很大,备库的IO线程可能会写很多中继日志文件,SQL线程在重放完一个中继日志中的事件后会尽快将其删除(通过relay_log_purge选项来控制)。但如果延迟非常严重,IO线程可能会把整个磁盘撑满。解决办法是配置relay_log_space_limit变量。如果所有中继日志的大小之和超过这个值,IO线程会停止,等待SQL线程释放磁盘空间。
尽管听起来很美好,但有一个隐藏的问题。如果备库没有从主库上获取所有的中继日志,这些日志可能在主库崩溃时丢失。早先这个选项存在一些Bug,使用率也不高,所以用到这个选项遇到Bug的风险会更高。除非磁盘空间真的非常紧张,否则最好让中继日志使用其需要的磁盘空间,这也是为什么没有将relay_log_space_limit列入推荐配置选项的原因

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT day04

一、思维导图 二、登录界面优化 代码: 界面: *{background-color: rgb(255, 255, 255); }QFrame#frame{border-image: url(:/Logo/shanChuan.jpg);border-radius:15px; }#frame_2{background-color: rgba(110, 110, 110, 120);border-radius:15px; }Q…

redis-大key及影响

一、什么是大key Redis大Key其实并不是字面意思,不是指存储在Redis中的某个Key的大小超过一定的阈值,而是指该Key所对应的value过大。对于string类型来说,一般情况下超过10KB则认为是大Key,对于set,zset,h…

使用芯片为ZYNQ—7020,基于野火FPGA ZYNQ开发板

使用芯片为ZYNQ—7020,基于野火FPGA ZYNQ开发板 肤色模型简介 YCrCb也称为YUV,主要用于优化彩色视频信号的传输。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其…

国内如何高速下载hugginging face模型

国内如何高速下载hugginging face模型 背景 如今开源大模型很多,相较于线上的调用接口,本地部署更有吸引力。这就免不了需要去Huggingface上下载模型,但因为国内管制要求,huggingface 并不能直接访问,或者下载速度很…

统计学一(术语,正态)

目录 一,常用术语 二,正态分布(Normal Distribution) 三,中心极限定理(Central Limit Theorem) 一,常用术语 population(族群):要统计的总的 populationSize(族群数量):要统计的总…

使用高斯混合模型(GMM)进行猫狗音频聚类(Kaggle Audio Cats and Dogs)

Audio Cats and Dogs | Kaggle 目录 一、实验目标 二、数据分析 三、实验结果 四、改进方向 一、实验目标 数据集包括164个标注为猫的.wav文件,总共1323秒和113个标注为狗叫声的.wav文件,总共598秒,要求判别每个音频是狗叫还是猫叫 二、…

反激开关电源保险丝以及热敏电阻的选型

保险丝(2A/250V) 保险丝的选型及计算 1、保险丝的作用就是在电路出现故障造成过流甚至短路时能及时切断电路电源的联系。( 保护后 级电路,一旦出现故障,由于电流过大温度过高,保险丝熔断 ) 2、…

6月18日 Qtday4

作业day4.1 作业4.2

第1天:Python简介与环境设置

学习目标 了解Python的基本概念和特点安装Python并配置开发环境理解Python的基本语法 学习内容 1. 了解Python Python是一种高级编程语言,以其简洁、易读和强大的功能而闻名。它支持多种编程范式,包括面向对象、过程式和函数式编程。 主要特点&…

ros1转ros2的注意事项

在将ROS 1迁移到ROS 2的过程中,有几个重要的注意事项需要考虑: 1. **先决条件**:在迁移之前,确保ROS 1包的所有依赖项在ROS 2中都是可用的。 2. **包规范格式**:ROS 2不支持ROS 1的包规范格式1,只支持较新…

SpringBoot快速入门-上

Apache Tomcat Apache Tomcat是一个开源的Servlet 或 web容器,它实现了Java Servlet、JavaServer Pages (JSP)、Java Unified Expression Language (JUEL) 和 Java WebSocket 规范。 使用 官网下载 安装:绿色版 , 直接解压 卸载:直接删除目录 改编码: # conf/l…

多路h265监控录放开发-(1)建立head窗口并实现鼠标拖动整个窗口

头文件: //鼠标事件 用于拖动窗口//一下三个函数都是QWidget的可重载成员函数void mouseMoveEvent(QMouseEvent* ev) override;void mousePressEvent(QMouseEvent* ev) override;void mouseReleaseEvent(QMouseEvent* ev) override; 源文件: / /// 鼠标…

玩了两年黑苹果+两年MBP,macOS究竟好在哪?

注:本文仅为个人观点,仅供参考。 前言 今天比较无聊,小白突然盘点了一下自己使用macOS系统的点点滴滴,这也算是一个闲聊帖子吧。 首先,本帖子无任何广告行为,纯属唠嗑文。 声明一下,以防有小…

如何评价2023年亚太杯数学建模竞赛?

APMCM亚太数学建模大赛的含金量在数学建模比赛中虽然不是最高水平,但是也属于比较高的水平了,值得参加试一试。 比如本次C题, 问题一:研究分析影响中国新能源汽车发展的主要因素,建立数学模型,描述这些因…

[14] CUDA_使用Opencv处理图像

CUDA_使用Opencv处理图像 1. Opencv中的图像表示 Opencv 提供了Mat 类来存储图像,如下: cv::Mat img; imgcv::imread("cameraman.tif);定义图像的示例: //定义单通道图像 cv::Mat img(6,6,CV_8UC1); //32位浮点型 Mat img2(256,256,…

sharePoint-基于sharepoint列表中的其他列值自动更新值列

首先进入网站,点击网站内容 点击想要操作的数据表后面的按钮,点击设置 点击创建栏 填写栏名,类型选择计算值,公式用于对列表或库中的值执行计算,然后点击右下角的确定就添加成功了 公式参考: 公式SharePoi…

android studio通过WiFi无线调试安卓手机APP(至少需要Android 11)

要在手机上启用Wireless Debugging(无线调试),你可以按照以下步骤进行操作(这里以Android 11或更高版本为例): 确保设备连接到Wi-Fi网络: 确保你的Android设备和你的开发机器(运行…

Windows系统下制作Windows 11系统U盘启动及安装指导

Windows系统下制作Windows 11系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口);下载好对应的系统镜像;下载RUFUS或者软通碟U盘制作启动软件; 二、Windows操作系统下制作U盘启动(这里以使用RUFUS软件为例&…

Chromium 开发指南2024 Mac篇-安装和配置depot_tools工具(三)

1.引言 在前两篇指南中,我们详细介绍了在 macOS 环境下编译 Chromium 所需的硬件要求和系统依赖,并具体讲解了如何正确安装和配置 Xcode。通过这些步骤,您已经为编译 Chromium 打下了坚实的基础。然而,编译 Chromium 还需要配置一…

电路分析期末总结笔记上

电流,电压定义及单位 电流(Current) 的定义是单位时间内通过导体横截面的电荷量。 电压(Voltage),又称作电势差或电位差,是衡量单位电荷在静电场中由于电势不同而产生的能量差的物理量。 参考…