MySQL大库搭建主从的一种思路分享

这个周忙的就像打仗一样,感觉有点被别人牵着鼻子走了,每天都是早出晚归,干不完的活儿,有时候感觉DBA这碗饭真的不好吃,要有强大的抗压能力和心理承受能力。今天下午吃饭的时候,真的感觉整个人快要垮掉了,吃完饭就依然决然的下班了,走在路上,看着下班的人群,心想这不就是正常的下班时间么,为什么我还有种早走惭愧的感觉?可能整个人都被洗脑了吧。

这个周的公众号内容更新也是耽搁了两天,周二那天实在是太累了,就直接休息了。 昨晚要走的时候,大概九点多,工作了一天比较累,然后就大脑不听使唤,弄了一个故障,把线上一台环境的账号权限表给删掉了,然后发现那套环境还是个新的,没有进行备份,我了个苍天,当时感觉天都快塌了,幸好我平时有保留变更的习惯,在自己的txt文件里面找到了之前给业务方开过的一些账号权限,花了两个小时给修复了,期间包括测试服务是否可用,同步是否及时等等。回来一看时间,已经是十一点半了,赶紧抓时间写公众号,结果呢,写完的时候已经零点六分了,就索性没有更新公众号。

这种感觉真的很不好,不知道在哪儿看到过一句话,“毁掉一个ITer最好的方式,就是让他忙到没有时间成长”,我现在感觉自己就在这种恶性循环当中,又想起一个哥们儿给我说过的话,“埋头给公司拉车的时候,要时不时抬头看看前方的路。”

希望能够快速调整过来,我相信在北漂的人一定有一些跟我相同的感触,对于忙碌可能大家都有自己的定义,在这一点上我想可能和一些公众号的观众能够实现共鸣^_^。

废话也说了那么多了,光抱怨也解决不了问题,还是把目光放在当下吧,写点儿有用的东西,希望对大家有所帮助,也算是自己的一个整理吧。

大库搭建主从的一种方式

今天早上去公司,遇到了一个问题,就是报警信息中显示一个分布式的集群中的一些主从关系down掉了,也就是从库断开了,然后查看了一下原因,是因为业务方和另外一个同事在同时对主库进行数据导入,而这两个人所做的操作是有依赖关系的,而且都包含大量事务,由于产生了冲突,事务进行了回滚,而从库上发现要回滚的数据已经不存在了,所以就导致了从库的断开。

看到这个问题,我先尝试着修复了一下从库,因为是使用gtid搭建的主从复制,所以就尝试着使用set next gtid的方法修复了一下,具体方法可以在gtid那篇文章中看一下,文章在公众号底部有分类。然后begin;commit;设置自动gtid之后发现修复好了,但是过了大概五分钟,就又不行了,很显然,这个方法不是个长久之计,而业务方那边的数据还有很多没有流进来。最终考虑了各种方案之后,不得已而为之,重新搭建从库。

我查看了一下主库的数据量,大概100G左右吧,我想到的两种直观的方法如下:

1、直接备份在服务器上

2、备份在远程nfs挂载备份机里面

来看这两种方法,服务器本身没有那么多剩余的空间可供使用,强行备份也可以,但是会导致磁盘报警,这肯定不是一个好的方法。况且要是使用xtrabackup的方法去搞,apply log和copy back这两步花费的时间相当长。

再来看远程nfs备份机,备份机容量很大,解决了磁盘问题,但是远程传输需要的带宽是无法提供的,如果并行进行备份,那么带宽肯定是不够的,并发的备份进程都会比较慢,保守估计5套主从应该需要8个小时左右。

那么怎么办呢?这里使用了一种比较粗暴的方法,直接跟业务方沟通,暂时把服务停了,打通了两个机器的ssh互信,配置了scp工具,直接通过物理文件拷贝的方式给吧文件复制到从库去,也不进行压缩了,因为100G的文件压缩和解压需要大量的时间。这样做的好处有下面几个:

第一:各个备份之间解耦合,不受其他环境的影响。

第二:可以通过机器之间的带宽导入主库上的原生文件到从库,能够保证数据的完全一致。

第三:时间比较快

于是就这么做了,大概看了一下,100G的文件scp拷贝的话大概就17分钟左右,这样就解决了备份时间长的问题。并行5个窗口,互不影响,也就30分钟左右,5套环境的数据就过去了。现在主库和从库的数据已经完全一致了,现在开始搭建从库,需要做的事情有以下几个:

1、将从库中原来的my.cnf文件替换拷贝过来的主库的my.cnf文件,否则server_id将会重复,导致搭建主从报错。

2、将从库中原来的slave-relay-log.index文件拷贝到新目录下面,否则搭建主从的时候,会提示无法找到这个文件。

3、改变一下从库的UUID,这个玩意儿在搭建GTID复制的时候需要使用,主从环境不能重复,否则会导致服务不可用,这个UUID的变更,一般是在auto.cnf文件中,这个文件保存的是当前库的UUID值。

4、在从库上reset slave all,然后使用auto_position=1的复制方式搭建主从复制,搭建好主从之后,校验主从数据的一致性。

5、在搭建好的从库上设置read-only选项,禁止从库上直接执行DML操作

以上就是MySQL大库搭建主从的一种思路分享的详细内容,更多关于MySQL大库搭建主从的资料请关注我们其它相关文章!

(0)

相关推荐

  • 基于Docker的MySQL主从复制环境搭建的实现步骤

    1. 前言 之前的程序架构可能是这样的一种形式: 当程序体量扩大后,我们进行扩展,可能会扩展多个后台服务实例,但数据库还是只有一个,所以系统的瓶颈还是在数据库上面,所以这次的主要任务就是对数据库进行扩展,主要形式为:扩展多台数据库实例,实现读写分离,对于一些写的任务分配到主数据库,对于读的任务使用子数据库进行读取.从而提高系统性能. 修改后的架构如下所示: 2. 环境预搭建 这次使用docker来进行这个环境的搭建,使用MySQL版本为5.7.13. docker pull mysql:5.7.

  • 在centos7上搭建mysql主从服务器的方法(图文教程)

    本文主要是介绍在centos上搭建mysql的主从服务器.如果没有搭建过的,可以查看我以前的博客,里面有详细的安装centos和在centos上安装mysql的说明. 一.安装从虚拟机: 1.右键->管理->克隆 2.选择完整克隆 3.修改虚拟机的位置,默认在C盘下. 4.当克隆完成后,就有这样两台虚拟机了, 由于克隆的两台服务器,ip是一样的,所以需要修改从服务虚拟机ip: 5.修改从服务虚拟机的配置,打开配置文件 如果不知道配置文件是哪个,可以按照下面的方式找到, 6.找到下面红线部分,将

  • CentOS服务器平台搭建mysql主从复制与读写分离的方法

    本文实例讲述了CentOS服务器搭建mysql主从复制与读写分离的方法.分享给大家供大家参考,具体如下: mysql 主从复制的优点: ① 如果主服务器出现问题, 可以快速切换到从服务器提供的服务,保证高可用性 ② 可以在从服务器上执行查询操作, 降低主服务器的访问压力 ③ 可以在从服务器上执行备份, 以避免备份期间影响主服务器的服务 注意事项: ① server-id必须唯一,一般使用ip的后三位 ② 从库Slave_IO_Running:NO 可能原因:帐号无权限操作 ③ Can't exe

  • mysql 5.7 docker 主从复制架构搭建教程

    分享mysql 5.7 docker 主从复制架构搭建教程,供大家参考,具体内容如下 环境版本: MySQL :  5.7.13 Docker : 1.11.2 CentOS : 7.1 1.先在两个物理机上分别安装两个MySQL.命令如下 复制代码 代码如下: docker pull mysql:5.7.13  docker run --name anuo-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=qaz.00JK -d mysql:5.7.13 2.

  • MySQL主从数据库搭建方法详解

    本文实例讲述了MySQL主从数据库搭建方法.分享给大家供大家参考,具体如下: 主从服务器是mysql实时数据同步备份的一个非常好的方案了,现在各大中小型网都都会使用mysql数据库主从服务器功能来对网站数据库进行异步备份了,下面我们来给大家介绍主从服务器配置步骤. Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务. (1)首先确保主从服务器上的Mysql版本相同 (2)在主服务器上,设置一个从数据库的账户,使用R

  • MySQL5.7.18主从复制搭建(一主一从)教程详解

    一.复制原理 主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新. MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句.主服务器创建一个线程将

  • 使用Docker容器搭建MySql主从复制

    1. 编写主MySQL的Docker文件 新建文件夹,命名为MySQL-master-v1.在文件夹mysql-master-v1中新建文件Dockerfile和master.cnf.笔者推荐使用的编辑器是Visual Studio Code.利用编辑器将这两个文件的编码设置成UTF-8.因为本文介绍安装到Linux系统下,所以笔者建议读者把换行符设置成LF,以兼顾Linux操作系统.按照如下内容编写这两个文件. Dockerfile FROM mysql:5.7 # set timezone

  • 详解MySQL主从复制读写分离搭建

    MySQL主从设置 MySQL主从复制,读写分离的设置非常简单: 修改配置my.cnf文件 master 和 slave设置的差不多: [mysqld] log-bin=mysql-bin server-id=222 log-bin=mysql-bin的意思是:启用二进制日志. server-id=222的意思是设置了服务器的唯一ID,默认是1,一般取IP最后一段,可以写成别的,只要不和其他mysql服务器重复就好. 这里,有的MySQL默认的my.cnf文件引用了/etc/mysql/conf

  • 如何快速使用mysqlreplicate搭建MySQL主从

    简介 mysql-utilities工具集是一个集中了多种工具的合集,可以理解为是DBA的工具箱,本文介绍利用其中的mysqlreplicate工具来快速搭建MySQL主从环境. HE1:192.168.1.248 slave HE3:192.168.1.250 master 实战 Part1:安装mysql-utilities [root@HE1 ~]# tar xvf mysql-utilities-1.5.4.tar.gz [root@HE1 ~]# cd mysql-utilities-

  • MySQL大库搭建主从的一种思路分享

    这个周忙的就像打仗一样,感觉有点被别人牵着鼻子走了,每天都是早出晚归,干不完的活儿,有时候感觉DBA这碗饭真的不好吃,要有强大的抗压能力和心理承受能力.今天下午吃饭的时候,真的感觉整个人快要垮掉了,吃完饭就依然决然的下班了,走在路上,看着下班的人群,心想这不就是正常的下班时间么,为什么我还有种早走惭愧的感觉?可能整个人都被洗脑了吧. 这个周的公众号内容更新也是耽搁了两天,周二那天实在是太累了,就直接休息了. 昨晚要走的时候,大概九点多,工作了一天比较累,然后就大脑不听使唤,弄了一个故障,把线上一

  • MySQL中大数据表增加字段的实现思路

    前言 增加字段相信大家应该都不陌生,随手就可以写出来,给 MySQL 一张表加字段执行如下 sql 就可以了: ALTER TABLE tbl_tpl ADD title(255) DEFAULT '' COMMENT '标题' AFTER id; 但是线上的一张表如果数据量很大呢,执行加字段操作就会锁表,这个过程可能需要很长时间甚至导致服务崩溃,那么这样操作就很有风险了. 那么,给 MySQL 大表加字段的思路如下: ① 创建一个临时的新表,首先复制旧表的结构(包含索引) create tab

  • MySQL 搭建主从同步实现操作

    目录 一.MySQL8.0主从同步 二.MySQL主从搭建 2.1Master上的操作 2.2Slave上的操作 一.MySQL 8.0 主从同步 主从同步的流程(原理): master 将变动记录到二进制日志文件(binary log)中,即配置文件中 log-bin 指定的文件,这些记录叫做二进制日志事件(binary log events): master 将二进制日志文件发送给 slave: slave 通过 I/O 线程读取文件中的内容写到 relay 日志中: slave 执行 re

  • Mysql双主搭建的方法步骤

    目录 1. Mysql binlog参数配置 2. Mysql binlog查看详细内容 3. Mysql双主搭建 4. Mysql双主解决数据回环 4.1 双主同步测试一 4.2 双主同步测试二 4.3 双主同步测试三 1. Mysql binlog参数配置 log-bin=mysql-bin 打开二进制日志功能,默认在datadir下 binlog-ignore-db binlog-ignore-db=mysql binlog-ignore-db=information_schema bin

  • MySQL从库维护经验分享

    前言: MySQL 主从架构应该是最常用的一组架构了.从库会实时同步主库传输来的数据,一般从库可以作为备用节点或作查询使用.其实不只是主库需要多关注,从库有时候也要经常维护,本篇文章将会分享几点从库维护经验,一起来学习吧. 1.主从复制建议采用 GTID 模式 GTID 即全局事务 ID(Global Transaction ID),GTID 实际上是由 server_uuid:transaction_id 组成的.其中 server_uuid 是一个 MySQL 实例的唯一标识, transa

  • MySQL 有关MHA搭建与切换的几个错误log汇总

    1:masterha_check_repl 副本集方面报错  replicates is not defined in the configuration file! 具体信息如下: # /usr/local/bin/masterha_check_repl --conf=/etc/mha/app1.cnf Thu Nov 21 15:33:15 2018 - [warning] Global configuration file /etc/masterha_default.cnf not fou

  • mysql 大表批量删除大量数据的实现方法

    问题参考自:https://www.zhihu.com/question/440066129/answer/1685329456 ,mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉.请问如何操作?答案为个人原创 假设表的引擎是 Innodb, MySQL 5.7+ 删除一条记录,首先锁住这条记录,数据原有的被废弃,记录头发生变化,主要是打上了删除标记.也就是原有的数据 deleted_flag

  • 基于Docker的Mysql主备搭建的实现步骤

    目录 前期规划: 配置过程: Docker mysql主从配置.我们会在一台centos的虚拟机上,配置mysql主备 前期规划: docker mysql版本 mysql:5.7 docker网络配置,我们会创建名称为mysql的网络,子网掩码为 172.88.0.0/16 docker mysql主对应的容器名称:mysql-master, ip地址:172.88.0.11,映射端口:3307,文件卷配置(配置文件和数据文件持久化)mysql配置文件地址:/usr/local/docker/

  • 详解mysql跨库查询解决方案

    1.第一种跨库查询,是在同一个mysql服务器下两个不同的数据库之间的联查,关系如下图 在同一个mysql服务器下,不同的两个数据直接加上库名就可以实现跨库查询了 select * from t_test1 t1, test2.t_test2 t2 where t1.id = t2.id 执行sql查询到一下结果 2.第二种跨库查询,是在两台不同服务器(物理服务器)上分别安装的mysql服务器,实现跨库查询,其实现原理类似一个虚拟映射,需要用到mysql的另一个存储引擎Federated,FED

  • 详解MySQL集群搭建

    概述 MySQL Cluster 是MySQL 适合于分布式计算环境的高实用.可拓展.高性能.高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可靠性要达到99.999%.MySQL Cluster允许在无共享的系统中部署"内存中"数据库集群,通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求.此外,由于每个组件有自己的内存和磁盘,不存在单点故障. 实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MyS

随机推荐