使用Xtrabackup备份MySQL数据库

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

转自:http://apps.hi.baidu.com/share/detail/30191931

使用Xtrabackup备份MySQL数据库

一、mysql的备份无非有下面几种方式

1 、mysqldump工具
MySQL自己提供的mysqldump是把数据转换为SQL语句,这种方式的效率比较低,备份和还原的速度都很慢,而且在dump过程中为了保证数据一致性,任何数据插入和更新操作都会被挂起

2 、mysqlhotcopy工具
MySQL自己提供的mysqlhotcopy 是专门针对myisam 数据表进行备份,无法对innodb数据表备份,速度相对快些,因为是文件拷贝,而且在备份的过程中,任何数据插入和更新操作都会被挂起

3 、采用Linux LVM的 snapshot 功能进行数据库分区的备份
这种方法是利用的逻辑卷的 镜像 功能对整个分区进行在线备份,这种备份数据量大,而且备份性能低下

4 、准备一台从服务器,开启日志同步功能,专门做备份(master-slave方式)
这种备份方法个人认为比较好,开始日志同步功能,无论是myisam,还是innodb,都可以在7*24不影响主服务器的情况下,随心所欲的进行备份

 
二、Xtrabackup工具对MySQL数据库进行备份 
1、Xtrabackup简介
官方网站:http://www.percona.com/
下载地址:http://www.percona.com/percona-builds/
Xtrabackup是一个对 InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。本文测试使用的是0.8版本,与当前最新版本是0.9区别并不大。Xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁
(3)使用帮助:http://www.percona.com/docs/wiki/percona-xtrabackup:start

2、安装Xtrabackup
安装Xtrabackup有几种方法:
第一种:通过源码进行安装
第二种:通过yum来安装
[percona]
name=CentOS-$releasever - Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
gpgcheck=0

第三种:直接使用 xtrabackup、innobackupex这两个二进制可执行文件即可
[root@SQL1 ~] wget  http://www.percona.com/percona-builds/XtraBackup/XtraBackup-1.2/Linux/binary/i686/xtrabackup-1.2.tar.gz
[root@SQL1 ~] cp  innobackupex-1.5.1  tar4ibd  xtrabackup /usr/sbin

3、
安装Xtrabackup

1)innobackupex工具

(1)备份操作(下列是几个例子)

####备份employess数据库(普通备份)####
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=employees  /root/backup  1> process_log  2>&1  &
注意:将数据库employees备份到目录/root/backup/XXXX下
[root@SQL1 ~]# ls -l /root/backup
total 4
drwxr-xr-x 3 root root 4096 Apr 13 14:16 2010-04-13_14-14-43

####备份给定的数据库列表中的数据库中(普通备份)####
[root@SQL1 ~]# cat backup_db_name
school
employees
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=/root/backup_db_name  /root/backup  1> process_log  2>&1 &
或者
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases= “school employees”   /root/backup  1> process_log  2>&1 &

####备份 employess数据库 中的 employess表 (普通备份)####
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases="employees.employees"  /root/backup  1> process_log  2>&1 &

####备份所有的数据库,并打包(tar方式)#####
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info  --stream=tar /root/backup  1>  /root/backup/all_databases.tar  2> process_log  &

####备份所有的数据库并压缩,并打包压缩(tar+gzip方式)####
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info  --stream=tar /root/backup  2> process_log  | gzip > /root/backup/all_databases.tar.gz   &
注意:首先要先创建备份目录:/root/backup,--databases=[ db_name.tb_name | db_name ],如果不使用--databases参数的话,那么将备份所有的数据库

(2)恢复操作
(步骤:先apply log,再copy back,最后再chown -R mysql:mysql datadir)


#### (普通备份)的还原操作######
[root@SQL1 ~]# ls -l /root/backup/2010-04-13_15-02-37/
total 223484
-rw-r--r-- 1 root root       348 Apr 13 15:02 backup-my.cnf
drwxr-xr-x 2 root root      4096 Apr 13 15:03 employees
-rw-r--r-- 1 root root 228589568 Apr 13 15:03 ibdata1
-rw-r--r-- 1 root root         0 Apr 13 15:03 mysql-stderr
-rw-r--r-- 1 root root       379 Apr 13 15:03 mysql-stdout
-rw-r--r-- 1 root root         1 Apr 13 15:03 xtrabackup_binlog_info
-rw-r--r-- 1 root root        60 Apr 13 15:03 xtrabackup_checkpoints
-rw-r--r-- 1 root root      2048 Apr 13 15:02 xtrabackup_logfile
-rw-r--r-- 1 root root        53 Apr 13 15:03 xtrabackup_slave_info
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock  --apply-log /root/backup/2010-04-13_15-02-37
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock  --copy-back /root/backup/2010-04-13_15-02-37
[root@SQL1 ~]#  chown -R mysql:mysql /usr/local/mysql/data
[root@SQL1 ~]#  rm -rf  /usr/local/mysql/data/xtrabackup*

#### (tar方式备份)的还原操作######
[root@SQL1 ~]# mkdir /root/backup/db
[root@SQL1 ~]# tar -ixvf all_databases.tar -C /root/backup/db (先解压,注意必须跟-i参数)
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock  --apply-log /root/backup/db
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock  --copy-back /root/backup/db
[root@SQL1 ~]#  chown -R mysql:mysql /usr/local/mysql/data
[root@SQL1 ~]#  rm -rf  /usr/local/mysql/data/xtrabackup
[root@SQL1 ~]#  rm -rf  /root/backup/db

#### (tar+gzip方式备份)的还原操作######
[root@SQL1 ~]# mkdir /root/backup/db
[root@SQL1 ~]# tar -izxvf all_databases.tar.gz  -C /root/backup/db (先解压,注意必须跟-i参数)
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock  --apply-log /root/backup/db
[root@SQL1 ~]# innobackupex-1.5.1  --defaults-file=/usr/local/mysql/etc/my.cnf  --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock  --copy-back /root/backup/db
[root@SQL1 ~]#  chown -R mysql:mysql /usr/local/mysql/data
[root@SQL1 ~]#  rm -rf  /usr/local/mysql/data/xtrabackup
[root@SQL1 ~]#  rm -rf  /root/backup/db
其实:可以不使用copy-back操作,而是直接拷贝备份文件中的数据到datadir目录下即可
cp employees ibdata1 ib_logfile0 ib_logfile1 mysql school test /usr/local/mysql/data/ -rf  && chown -R mysql:mysql /usr/local/mysql/data
如果您不关心binary log position of backup 或者all the tables are innodb,那么可以加上--no-lock参数

四、参数资料


本文转自holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/544944
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
存储 SQL 关系型数据库
|
3天前
|
存储 Oracle 关系型数据库
关系型数据库Oracle备份与恢复
【7月更文挑战第17天】
22 4
|
17小时前
|
SQL Oracle 关系型数据库
关系型数据库Oracle备份工具
【7月更文挑战第19天】
14 4
|
17小时前
|
存储 SQL Oracle
关系型数据库Oracle归档日志备份
【7月更文挑战第19天】
16 5
|
2天前
|
Oracle 关系型数据库 数据库
关系型数据库Oracle增量备份
【7月更文挑战第18天】
10 2
|
2天前
|
存储 Oracle 关系型数据库
关系型数据库Oracle完全备份
【7月更文挑战第18天】
10 2
|
2天前
|
SQL Oracle 关系型数据库
关系型数据库Oracle备份类型
【7月更文挑战第18天】
13 2
|
20天前
|
存储 SQL 监控
关系型数据库备份与恢复基础
【7月更文挑战第1天】
19 2
|
25天前
|
关系型数据库 MySQL 数据库
MySQL mysqldump教程:轻松备份与迁移数据库
MySQL mysqldump教程:轻松备份与迁移数据库
|
16天前
|
SQL 关系型数据库 MySQL
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做