【澳门金沙vip】Xtrabackup 进行线上 MySQL 数据库主从恢复

mysql数据表最快速迁移,mysql的存储引擎为:myisam

需求:

开发产品过程中,有个项目分支,数据库需要带数据拷贝,但是表的数据很大,用传统的insert
into …. select * …非常慢!!

过程:

1.进入的mysql在linux上的文件目录

在/etc/my.cnf中可以找到mysql数据文件的地址

[[email protected] etc]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


default-character-set=utf8
[client]
password=123qwe

2.查看数据库目录

澳门金沙vip 1

澳门金沙vip 2

数据库列表:

澳门金沙vip 3

澳门金沙vip 4

我们的目标是从test复制数据到test1中:

test目录结构:

澳门金沙vip 5

澳门金沙vip 6

表信息:

澳门金沙vip 7澳门金沙vip 8

test1目录和表都是空的:

澳门金沙vip 9澳门金沙vip 10

3.拷贝文件

澳门金沙vip 11澳门金沙vip 12

4.修改权限

澳门金沙vip 13澳门金沙vip 14

5.查询

澳门金沙vip 15

澳门金沙vip 16

完成!!

需求:
开发产品过程中,有个项目分支,数据库需要带数据拷贝,但是表的数据很大,用传统的in…

xtrabackup介绍

Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL
数据库物理热备的备份工具,支持 MySQl(Oracle)、Percona Server 和
MariaDB,并且全部开源,真可谓是业界良心。

1  概述

在集成项目中需要应对不同环境下的安装配置,主流操作系统大致可以分为三种:Linux、Windows以及UNIX。其中Linux备受青睐的主要原因有两个:

首先,Linux作为自由软件有两个特点:一是它免费提供源码,二是爱好者可以按照自己的需要自由修改、复制和发布程序的源码,并公布在Internet上。这就吸引了世界各地的操作系统高手为Linux编写各种各样的驱动程序和应用软件,使得Linux成为一种不仅只是一个内核,而且包括系统管理工具、完整的开发环境和开发工具、应用软件在内,用户很容易获得的操作系统。

其次,究其根本,Linux是一个UNIX系统变种,因此也就具有了UNIX系统的一系列优良特性,UNIX上的应用可以很方便地移植到Linux平台上,这使得UNIX用户很容易掌握Linux。

基于Linux的安全可靠、效率高、免费、良好的网络支持、与UNIX完全兼容等方面的考虑,Linux算是最常用的一种。这样,在项目中就会有在Linux下安装数据库的需求,例如Oracle、MySQL等。本文主要介绍在Linux环境下安装MySQL数据库的两种方式,以及MySQL数据库的相关配置步骤,其中常见的一些问题也会进行说明,最后会展示一种比较常见的MySQL数据库的备份方式——双机热备。

xtrabackup命令参数解释

--defaults-file
同xtrabackup的–defaults-file参数
--apply-log
对xtrabackup的–prepare参数的封装
--copy-back
做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir ;
--remote-host=HOSTNAME
通过ssh将备份数据存储到进程服务器上;
--stream=[tar]
备 份文件输出格式, tar时使用tar4ibd , 该文件可在XtarBackup
binary文件中获得.如果备份时有指定–stream=tar,
则tar4ibd文件所处目录一定要在$PATH中(因为使用的是tar4ibd去压缩,
在XtraBackup的binary包中可获得该文件)。

使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话
xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数–tmpdir指定目录来解决这个问题。
--tmpdir=DIRECTORY
当有指定–remote-host or –stream时, 事务日志临时存储的目录,
默认采用MySQL配置文件中所指定的临时目录tmpdir
--redo-only
强制备份日志时只redo ,跳过rollback。这在做增量备份时非常必要。
--use-memory=#
该参数在prepare的时候使用,控制prepare时innodb实例使用的内存量
--throttle=IOS
同xtrabackup的–throttle参数
--sleep=是给ibbackup使用的,指定每备份1M数据,过程停止拷贝多少毫秒,也是为了在备份时尽量减小对正常业务的影响,具体可以查看ibbackup的手册

--compress[=LEVEL]
对备份数据迚行压缩,仅支持ibbackup,xtrabackup还没有实现;
--include=REGEXP

xtrabackup参数–tables的封装,也支持ibbackup。备份包含的库表,例如:–include=”test.“,意思是要备份
test库中所有的表。如果需要全备份,则省略这个参数;如果需要备份test库下的2个表:test1和test2,则写
成:–include=”test.test1|test.test2″。也可以使用通配符,如:–include=”test.test
“。
--databases=LIST
列出需要备份的databases,如果没有指定该参数,所有包含MyISAM和InnoDB表的database都会被备份;
--uncompress
解压备份的数据文件,支持ibbackup,xtrabackup还没有实现该功能;
--slave-info
备 份从库, 加上–slave-info备份目录下会多生成一个xtrabackup_slave_info
文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO
MASTER_LOG_FILE=”, MASTER_LOG_POS=0
--socket=SOCKET
指定mysql.sock所在位置,以便备份进程登录mysql.

2  预期读者

  • 数通畅联新员工

  • 广大技术爱好者

恢复MySQL主从

数据库主从因为各种原因断了,而且没办法恢复。线上数据库也不能停止。这时候想恢复主从关系就可以借助热备份工具xtrabackup

第一步:备份线上数据库

[root@ddz_db5 data]# innobackupex --slave-info /data/

如果没有指定备份目录,xtrabackup会在当前目录自动生成以当前时间命名的备份文件夹。100G数据用时在半小时左右。

[root@ddz_db5 data]# ll
drwxr-x--- 5 root  root     4096 May 27 10:16 2017-05-27_09-57-24
drwxr-xr-x 5 mysql mysql    4096 May 27 16:40 mysql

第二步:xtrabackup --apply-log把已提交的事务合并到ibdata文件
这一步持续时间会很长,1小时左右。

[root@ddz_db5 data] xtrabackup --apply-log 2017-05-27_09-57-24
170527 11:10:23 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.
           At the end of a successful apply-log run innobackupex
           prints "completed OK!".

innobackupex version 2.4.7 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 6f7a799)
xtrabackup: cd to /data/2017-05-27_10-36-22/
xtrabackup: This target seems to be not prepared yet.
InnoDB: Number of pools: 1
xtrabackup: xtrabackup_logfile detected: size=822542336, start_lsn=(16153415803165)
xtrabackup: using the following InnoDB configuration for recovery:
xtrabackup:   innodb_data_home_dir = .
xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend
...

InnoDB: Highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 16153415803165
InnoDB: Doing recovery: scanned up to log sequence number 16153421045760 (0%)
InnoDB: Doing recovery: scanned up to log sequence number 16153426288640 (1%)
InnoDB: Doing recovery: scanned up to log sequence number 16153431531520 (2%)
InnoDB: Doing recovery: scanned up to log sequence number 16153436774400 (2%)
InnoDB: Doing recovery: scanned up to log sequence number 16153442017280 (3%)
InnoDB: Doing recovery: scanned up to log sequence number 16153447260160 (4%)
InnoDB: Doing recovery: scanned up to log sequence number 16153452503040 (5%)
InnoDB: Doing recovery: scanned up to log sequence number 16153457745920 (5%)
InnoDB: Doing recovery: scanned up to log sequence number 16153462988800 (6%)
...
InnoDB: Doing recovery: scanned up to log sequence number 16153788440576 (50%)
InnoDB: Doing recovery: scanned up to log sequence number 16153793683456 (51%)
InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percent: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
InnoDB: Apply batch completed
InnoDB: Doing recovery: scanned up to log sequence number 16153798926336 (52%)
InnoDB: Doing recovery: scanned up to log sequence number 16153804169216 (53%)

第三步:scp备份目录到从机

[root@ddz_db5 data] scp -r 2017-05-27_09-57-24 slave:/data/

第四步:启动从机的数据库

[root@slave data] mv 2017-05-27_09-57-24 mysql
[root@slave data] service mysqld start

第五步:建立主从关系

[root@slave data] cat mysql/xtrabackup_binlog_info
mysqlbin-log.011197     1057212057
[root@slave data] mysql
...
mysql> change master to master_host='master',master_user='slave',master_password='slave',master_log_file='mysqlbin-log.011197',master_log_pos=1057212057;
mysql> start slave;

以上,不需要停止线上业务,成功恢复了主从关系。

3  环境信息

操作系统:CentOS 6.4

MySQL:版本为MySQL5.6

热备份数据库

TODO

4  名词解释

Linux:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

CentOS:(CommunityEnterprise Operating
System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red
Hat Enterprise
Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red
Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。

MySQL:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB
公司开发,目前属于 Oracle 旗下产品。MySQL
最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS
(Relational Database Management System,关系数据库管理系统)
应用软件之一。

MYISAM:MySQL两种常见的存储引擎之一,特点是表数据文件和表索引文件都是独立存放,适合记录少于2000万以下、并发量不是很高的环境,适合简单的查询,不支持事务,容易出现数据丢失,表损坏,经常需要修复,修复往往也导致数据丢失,适合读多写少的环境

INNODB:MySQL两种常见的存储引擎之一,特点是表数据文件和表索引文件是共同一个文件,适合大规模数据,小规模的数据反而效率不高,适合并发量高的环境、复杂的查询,支持事务,支持数据自动修复,保证了数据丢失最少

从热备恢复数据

TODO

5  操作步骤