使用mysqldump对MySQL的数据进行备份的操作教程

MySQL 自身的 mysqldump 工具支持单线程工作, 依次一个个导出多个表,没有一个并行的机 ,这就使得它无法迅速的备份数据。

mydumper 作为一个实用工具,能够良好支持多线程工作, 可以并行的多线程的从表中读入数据并同时写到不同的文件里 ,这使得它在处理速度方面快于传统的 mysqldump 。其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起 DML 阻塞。但一般现在的 MySQL 都有主从,备份也大部分在从上进行,所以锁的问题可以不用考虑。这样, mydumper 能更好的完成备份任务。

mydumper 特性

  • 多线程备份
  • 因为是多线程逻辑备份,备份后会生成多个备份文件
  • 备份时对 MyISAM 表施加 FTWRL (FLUSH TABLES WITH READ LOCK), 会阻塞 DML 语句
  • 保证备份数据的一致性
  • 支持文件压缩
  • 支持导出binlog
  • 支持多线程恢复
  • 支持以守护进程模式工作,定时快照和连续二进制日志
  • 支持将备份文件切块

mydumper 备份机制

mydumper 工作流程图

主要步骤概括

  • 主线程 FLUSH TABLES WITH READ LOCK , 施加全局只读锁,以阻止 DML 语句写入,保证数据的一致性
  • 读取当前时间点的二进制日志文件名和日志写入的位置并记录在 metadata 文件中,以供即使点恢复使用
  • N 个(线程数可以指定,默认是 4 ) dump 线程 START TRANSACTION WITH CONSISTENT SNAPSHOT ; 开启读一致的事物
  • dump non-InnoDB tables , 首先导出非事物引擎的表
  • 主线程 UNLOCK TABLES 非事物引擎备份完后,释放全局只读锁
  • dump InnoDB tables , 基于事物导出 InnoDB 表
  • 事物结束
  • 备份所生成的文件

所有的备份文件在一个目录中,目录可以自己指定
目录中包含一个 metadata 文件
记录了备份数据库在备份时间点的二进制日志文件名,日志的写入位置,

如果是在从库进行备份,还会记录备份时同步至主库的二进制日志文件及写入位置

每个表有两个备份文件:

  1. database.table-schema.sql 表结构文件
  2. database.table.sql 表数据文件

如果对表文件分片,将生成多个备份数据文件,可以指定行数或指定大小分片

安装使用实例

假设现有2台DB服务器,分别用于A业务与B业务,其中A业务比较重要,需要对A业务的1个DB(TaeOss)进行热备,大概有40G的数据,并用业务B的DB服务器作为备机,服务器分布如下:
10.137.143.151     A业务
10.137.143.152     B业务
 
假设要达到的要求是:
在导出A业务的DB(TaeOss)时,不能对A业务有影响。同时在B业务的DB服务器上进行恢复时,也不能有较大影响,尽量控制在1分钟以内。
 
采取的方案:
1、mysqldump:属于逻辑备份,会存在锁表,但考虑到数据量比较大,锁表的时间会比较长,业务不允许,pass掉;
2、xtrabackup:属于物理备份,不存在锁表,但考虑到2台DB使用的都是共享表空间,同时在业务B的数据库进行恢复时,一是时间比较长,二是数据肯定不正确,pass掉(测试过);
3、mydumper:属于逻辑备份,是一个多线程、高性能的数据逻辑备份、恢复的工具,且锁表的时间很短(40G数据,10分钟以内),同时会记录binlog file和pos,业务可以接受。
 
mydumper主要有如下特性:
(1)、任务速度要比mysqldump快6倍以上;
(2)、事务性和非事务性表一致的快照(适用于0.2.2以上版本);
(3)、快速的文件压缩;
(4)、支持导出binlog;
(5)、多线程恢复(适用于0.2.1以上版本);
(6)、以守护进程的工作方式,定时快照和连续二进制日志(适用于0.5.0以上版本)。
 
mydumper安装:
https://launchpad.net/mydumper/0.6/0.6.2/+download/mydumper-0.6.2.tar.gz

# yum install glib2-devel mysql-devel zlib-devel pcre-devel
# tar zxvf mydumper-0.6.2.tar.gz
# cd mydumper-0.6.2
# cmake .
# make
# make install

参数如下:

由于DB是部署在比较老的SuSE Linux 10服务器上,安装mydumper时依赖的库比较多,会比较繁琐,同时采用本地备份的话,也会占用大量的磁盘I/O,所以我们选择在同网段的另一台centos 6.4(10.137.143.156)服务器进行备份。
 
步骤如下:
1、在“10.137.143.151、10.137.143.152”上对“10.137.143.156”进行临时授权

# mysql -uroot -e "grant all privileges on *.* to 'backup'@'10.137.143.156' identified by 'backup2015';"
# mysql -uroot -e "flush privileges;"

2、在“10.137.143.156”上对“10.137.143.151”的DB(TaeOss)进行备份

# mydumper -h 10.137.143.151 -u backup -p backup2015 -B TaeOss -t 8 -o /data/rocketzhang

3、将备份数据恢复到“10.137.143.152”

# myloader -h 10.137.143.152 -u backup -p backup2015 -B TaeOss -t 8 -o -d /data/rocketzhang

4、主从关系建立:10.137.143.151(主)、10.137.143.152(从)
在“10.137.143.151”建立授权账号:

# mysql -uroot -e "grant replication slave on *.* to 'repl'@'10.137.143.152' identified by 'repl123456';"
# mysql -uroot -e "flush privileges;"

在“10.137.143.156”查看记录下的binlog信息:

在“10.137.143.152”如下操作:

# vim /etc/my.cnf
……
replicate-do-table = TaeOss.%
replicate-wild-do-table = TaeOss.%
……

# service mysqld reload

# mysql -uroot -e "change master to master_host='10.137.143.151',master_user='repl',master_password='repl123456',master_log_file='mysql-bin.002205',master_log_pos=456584891;"
# mysql -uroot -e "start slave;"

# mysql -uroot -e "show slave status\G;"

出现如下信息:

看来是存在主键冲突,导致主从复制失败。
 
问题分析:
在主DB(10.137.143.151)上执行:

# mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.002205 > mysql-bin.002205.txt
# grep -C 8 529864938 mysql-bin.002205.txt

大概的意思是,在主DB上存在对t_evil_detect_uin_blacklist表的insert操作时,发生了主键冲突,当在从端进行同步的时候,也出现了主键冲突,从而导致主从同步失败。
 
临时的解决办法:
导出从端的表TaeOss.t_evil_detect_uin_blacklist

# mysqldump -uroot --opt TaeOss t_evil_detect_uin_blacklist > TaeOss.t_evil_detect_uin_blacklist.sql

去掉TaeOss.t_evil_detect_uin_blacklist.sql其中的主键语句:

然后再导入:

# mysql -uroot TaeOss < TaeOss.t_evil_detect_uin_blacklist.sql

# mysql -uroot -e "stop slave;"
# mysql -uroot -e "start slave;"
# mysql -uroot -e "show slave status\G;"

(0)

相关推荐

  • mysql数据库备份及恢复命令 mysqldump,source的用法

    还原一个数据库:mysql -h localhost -u root -p123456 www<c:\www.sql 备份一个数据库:mysqldump -h localhost -u root -p123456 www > d:\www2008-2-26.sql //以下是在程序中进行测试 //$command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile&qu

  • MySQL数据备份之mysqldump的使用详解

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文件(转储文件)中,比如: mysqldump -uroot -p123 test > test.dump 生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句. B. --opt 如果加上--opt参数则生成的du

  • linux下改良版本mysqldump来备份MYSQL数据库

    因为MYSQLDUMP会为整个库来加一个全局锁定. 如果单纯用MYSQLDUMP进行全库备份会造成以下三个方面的影响. 1.服务器CPU严重阻塞. 2.磁盘I/O直线增加. 3.所有的查询都成了慢查询. 我现在的网站数据库大概是5个G左右,而且每天都有增大. 表结构是MYISAM,INNODB,MEMORY三者混合. 所以单纯用HOTCOPY工具恐怕有点困难.所以我今天简单变了一下我上次写的关于用OUTFILE来备份MYSQL的脚本. 可以解决上面说的三个缺点. 1.备份脚本内容 [david_

  • 使用mysqldump导入数据和mysqldump增量备份(mysqldump使用方法)

    1.各种用法说明 A. 最简单的用法: 复制代码 代码如下: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文件(转储文件)中,比如: 复制代码 代码如下: mysqldump -uroot -p123 test > test.dump 生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句. B. --opt 如果加上--opt参数则生成的dump文件

  • mysqldump数据库备份参数详解

    mysqldump备份: 复制代码 代码如下: mysqldump -u用户名 -p密码 -h主机 数据库 a -w "sql条件" –lock-all-tables > 路径 mysqldump还原: 复制代码 代码如下: mysqldump -u用户名 -p密码 -h主机 数据库 < 路径 mysqldump按条件导出: 复制代码 代码如下: mysqldump -u用户名 -p密码 -h主机 数据库 a –where "条件语句" –no-建表&g

  • 最简便的MySql数据库备份方法MySQLdump第1/2页

    使用MYSQL进行数据库备份,有很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但有没有想过,MySQL会有更简捷的使用文件目录的备份方法,而且又快有好.  一.数据备份捷径 因为这个方法没有得到官方正式文档的验证,我们暂称为试验吧.  目的:备份hostA主机中一个MySQL数据库TestA,并恢复到到hostB机中 试验环境: 操作系统:WinNT4.0,MySQL3.22.34,PHPMyAdmin 2.1.0 Chinaz 在hostA中安装MySQL数据库并建立TestA数据

  • mysqldump加-w参数备份数据时需要注意的事项

    我们在用mysqldump备份数据时,有个选项是 –where / -w,可以指定备份条件,这个选项的解释是: -w, --where=name    Dump only selected records. Quotes are mandatory 我们可以做个测试,例如: mysqldump --single-transaction -w ' id < 10000 ' mydb mytable > mydump.sql 这时候就可以备份出mytable表中 id< 10000 的所有记

  • mysql mysqldump数据备份和增量备份

    本篇文章主要讲如何使用shell实现mysql全量,增量备份.增量备份在周一-周六凌晨3点,会复制mysql-bin.00000*到指定目录:而全量备份则使用mysqldump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-bin.00000*.然后对mysql的备份操作会保留在bak.log文件中.如下图:开始:2013年05月02日 15:10:57 结束:2013年05月02日 15:12:16 20130502.sql.tgz succ是由DBFullyBak.sh产生

  • 使用mysqldump对MySQL的数据进行备份的操作教程

    MySQL 自身的 mysqldump 工具支持单线程工作, 依次一个个导出多个表,没有一个并行的机 ,这就使得它无法迅速的备份数据. mydumper 作为一个实用工具,能够良好支持多线程工作, 可以并行的多线程的从表中读入数据并同时写到不同的文件里 ,这使得它在处理速度方面快于传统的 mysqldump .其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起 DML 阻塞.但一般现在的 MySQL 都有主从,备份也大部分在从上进行,所以锁的问题可以不

  • MySQL数据库入门之备份数据库操作详解

    本文实例讲述了MySQL数据库入门之备份数据库操作.分享给大家供大家参考,具体如下: 接上一次:MySQL数据库入门多实例配置 一提到数据,大家神经都会很紧张,数据的类型有很多种,但是总归一点,数据很重要,非常重要,因此,日常的数据备份工作就成了运维工作的重点中的重点的重点................. 首先来看看数据库中的数据 mysql> select * from test; +-----+------+ | id | name | +-----+------+ | 1 | 1 | |

  • MySQL 表数据的导入导出操作示例

    本文实例讲述了MySQL 表数据的导入导出操作.分享给大家供大家参考,具体如下: 数据导出 1.  使用 SELECT ...INTO OUTFILE ...命令来导出数据,具体语法如下. mysql> SELECT * FROM tablename INTO OUTFILE 'target_file' [option]; 其中 option 参数可以是以下选项: FIELDS TEMINATED BY 'string' (字符分断符) FIELDS [OPTIONALLY] ENCLOSED

  • MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程

    大数据量备份与还原,始终是个难点.当MYSQL超10G,用mysqldump来导出就比较慢了.在这里推荐xtrabackup,这个工具比mysqldump要快很多. 一.Xtrabackup介绍 1.Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具:xtrabackup.innobackupex 1.xtraback

  • MySQL中数据导入恢复的简单教程

    有两个简单的方法MySQL中的数据加载到MySQL数据库从先前备份的文件. LOAD DATA导入数据: MySQL提供了LOAD DATA语句,作为一个大容量数据加载.下面是一个例子声明中,读取一个文件dump.txt,,从当前目录加载到当前数据库中的表mytbl: mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl; 如果本地的关键字是不存在的,MySQL的外观使用绝对路径名寻找到完全指定位置的文件在服务器主机上的数据文件,从文

  • MySQL使用profile查询性能的操作教程

    MYSQL的profiling功能要在Mysql版本5.0.37以上才能使用. 查看profile是否开启 mysql> show variables like '%profil%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | profiling | OFF | --开启SQL语句剖析功能 | profiling_history_size |

  • MySQL基于java实现备份表操作

    核心是mysqldump和Runtime 操作其实并不是很困难,创建一个进行备份操作的类,接收到备份调用后,标记该表正在备份,然后创建一个子线程进行备份操作.所需的配置信息是从配置文件读取的,也要注意在Windows和linux下路径问题. 配置文件如下: Java代码 收藏代码 # 数据库地址 dbAddress=localhost # 要备份的数据库名称 databaseName=nms # 数据库用户名 username = root # 数据库密码 password = root # m

  • percona-toolkit对MySQL的复制和监控类操作教程

    复制类工具 1.  pt-heartbeat 功能介绍: 监控mysql复制延迟 用法介绍: pt-heartbeat [OPTION...] [DSN] --update|--monitor|--check|--stop 测量复制落后主mysql或者主PostgreSQL多少时间,你可以使用这个脚本去更新主或者监控复制,具体用法见后面的示例. 原理:pt-heartbeat通过真实的复制数据来确认mysql和postgresql复制延迟,这个避免了对复制机制的依赖,从而能得出准确的落后复制时间

  • Linux下将数据库从MySQL迁移到MariaDB的基础操作教程

    自从2012年来,维基百科已经开始从MySQL迁移到MariaDB的过程,是维基媒体数据库架构变革的一个重大里程碑,将英文和德文版的维基百科数据库Wikidata移植到了MariaDB 5.5版本上. 在过去几年中,维基百科一直使用 Facebook 的 MySQL 5.1 衍生版本 作为我们的产品数据库,构建版本号是r3753.我们很高兴该产品的性能表现,Facebook 有着全世界最棒的数据库工程师,他们为 MySQL 生态系统带去了很多改进. 现在 MariaDB 的优化器的增强.Perc

  • PureFTP借助MySQL实现用户身份验证的操作教程

    pureftp集成mysql身份验证是将ftp用户信息保存到mysql数据库中,这样可以对大量的ftp服务器做集中管理,对用户帐号的维护只要通过mysql的操作就可以完成. 一.下载pureftp源代码,并确定mysql已经安装好 tar zxvf pure-ftpd-1.0.20.tar.gz cd pure-ftpd-1.0.20 ./configure --prefix=/usr/local/pureftpd \ --with-cookie \ --with-throttling \ --

随机推荐