使用Percona XtraBackup

先安装依赖包

yum install -y perl-DBD-MySQL perl-DBI  perl-Time-HiRes libaio*

到Percona官网下载Percona XtraBackup,安装

然后执行热备份,官网有详细教程:http://www.percona.com/doc/percona-xtrabackup/2.1/howtos/setting_up_replication.html

最后面的参数是备份的目录;

#使用默认的 /etc/my.cnf 配置文件

innobackupex --user=xxx --password=xxx  /home/data/bak_mysql/

由于我们使用的是单机多实例,所以配置文件里面修改了[mysqld]项,xtrabackup无法正确识别datadir,所以复制了一份,使用原来单数据库的格式,将默认的数据库datadir改为我们的主数据库datadir

#自定义配置文件

innobackupex --user=xxx --password=xxx --defaults-file=/home/data/xtrabackup.my.cnf /home/data/bak_mysql/

innobackupex备份速度非常快,完成后会显示:innobackupex: completed OK!

--apply-log操作

innobackupex --user=yourDBuser --password=xxx --apply-log /path/to/backupdir/$TIMESTAMP/

这一步会将ibdata1与ib_logfile0,ib_logfile1的log sequence number对应起来,否则可能会出现表空间和事务日志不一致的情况,

InnoDB: Error: page xxx log sequence number xxx InnoDB: is in the future! Current system log sequence number xxx.

虽然数据库有重建innodb日志的功能,但是,还是避免的好...

下面可以直接用这个备份来做一个Mysql_multi的单机多实例,并且,不需要关闭原来的mysql;

将备份的目录$DATETIME目录改名为mysql2,

mv /home/data/bak_mysql/xxx /home/data/mysql2

chown -R mysql.mysql /home/data/mysql2

cp /etc/my.cnf /home/data/my.cnf

vim /home/data/my.cnf

#修改my.cnf,改为 多实例,参考mysqld_multi --example输出的例子;

启动新增的实例;

mysqld_multi --defaults-file=/home/data/my.cnf start 2

附上一些代码:

#!/bin/bash

DB_CONFIG=/data2/data/xtrabackup.my.cnf
DB_USER=xxx
DB_PASS_FILE='/etc/db/'$DB_USER
BACKUP_HOME=/data2/data # get database password
function getDbPass()
{
RET=`cat $DB_PASS_FILE`
echo $RET
}
DB_PASS=$(getDbPass) cd $BACKUP_HOME
# partial backup
function partial_backup(){
innobackupex --defaults-file=$DB_CONFIG \
--user=$DB_USER --password=$DB_PASS \
--databases=/xxx/dump.tables \
$BACKUP_HOME
YEAR=`date +"%Y"`
timestamp=`ls |grep |head -n ` #得到时间戳名字 innobackupex --user=$DB_USER -password=$DB_PASS --apply-log --export $BACKUP_HOME/$timestamp/
chown -R mysql.mysql $BACKUP_HOME/$timestamp/
} #full backup , can be used as a slave , or base backup
function full_backup(){
innobackupex --defaults-file=$DB_CONFIG \
--user=$DB_USER --password=$DB_PASS \
$BACKUP_HOME
timestamp=`ls |grep |head -n ` #得到时间戳名字
innobackupex --defaults-file=$DB_CONFIG --user=$DB_USER --password=$DB_PASS --apply-log $BACKUP_HOME/$timestamp/
chown -R mysql.mysql $BACKUP_HOME/$timestamp/
} #incremental backup , can be used as a slave , or base backup
function incremental_backup(){
timestamp=`ls |grep |head -n ` #得到时间戳名字
INCREMENTAL_BASE_DIR=/data2/data/mysql3/
BACKUP_DIR=/data2/data/backups/
innobackupex --user=$DB_USER --password=$DB_PASS \
--incremental $BACKUP_DIR \
--incremental-basedir=$INCREMENTAL_BASE_DIR
#同样可以使用LSN来进行增量备份
#innobackupex --incremental $BACKUP_DIR --incremental-lsn=XXX
} full_backup

mysql数据库热备份的更多相关文章

  1. mysql 数据库热备份

    https://www.percona.com/doc/percona-xtrabackup/2.2/index.html

  2. Xtrabackup全量备份与恢复mysql数据库

    一.Xtrabackup简单概述: Percona  Xtrabackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同 ...

  3. MySQL数据库双机热备份

    MySQL数据库双机热备份 1.mysql 数据库没有增量备份的机制 当数据量太大的时候备份是一个很大的问题.还好 mysql 数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备 ...

  4. MySQL数据库的热备份和冷备份

    冷备份(off, 慢, 时间点上恢复)冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库.冷备份是将关键性文件拷贝到另外位置的一种说法.对于备份数据库信息而言,冷备份是最 ...

  5. [转]MySQL数据库的热备份

    一.系统环境描述:      1.两台数据库服务器,A和B:      2.当前A正在使用,将作为主服务器,B为准备用来做备用数据库服务器:      3.要进行热备份的数据库中含有类型为MyISAM ...

  6. MySQL 数据库通过日志恢复

    http://blog.csdn.net/hanxin1987216/article/details/5976856 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选 ...

  7. Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复

    Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...

  8. Centos下mysql数据库备份与恢复的方法

    一.mysqldump工具备份 mysqldump由于是mysql自带的备份工具,所以也是最常用的mysql数据库的备份工具.支持基于InnoDB的热备份.但由于是逻辑备份,所以速度不是很快,适合备份 ...

  9. 学会4种备份MySQL数据库(基本备份方面没问题了)

    前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么 ...

随机推荐

  1. DOM元素尺寸offsetWidth,scrollWidth,clientWidth等具体解释

    样例: <div id="div" style="height: 200px;width: 200px;border:solid 50px red;overflow ...

  2. Python3中使用Mysql的用法。

    一.Python2中一般使用MySqldb来调用Mysql,但是在Python3中不支持该包,使用pymysql来代替了,用法一模一样. 二.安装: pip install pymysql 三.例子: ...

  3. POSTGRESQL 查看数据库 数据表大小

    1.查看数据库大小: select pg_database_size('log_analysis'); select pg_database_size('log_analysis'); pg_data ...

  4. JERSEY中文翻译(第一章、Getting Started、1.1.7)

    最近发现jersey特别流行,但是中文资料非常少,深感没有资料的痛苦,所以分享一下看到的内容供他人快速入门. 今天翻译第一章.Getting Started.https://jersey.java.n ...

  5. 使用Gulp

    为什么要使用Gulp 在前端开发中通常须要做,预处理语言的编译.js文件的压缩.css文件的压缩.图片的压缩等一系列工作,而使用Gulp能够自己主动化的完毕这些工作,从而提高站点的开发效率,在我的博客 ...

  6. Python两个变量的值进行交换的方法

    Python两个变量的值进行交换的方法 使用第三方变量: '''这是第一种赋值方法,采用第三方变量''' c = a a = b b = c 使用两个变量: '''使用两个变量''' a = a+b ...

  7. elasticsearch备忘

    1.解决java.lang.RuntimeException: can not run elasticsearch as rootadduser *** //添加用户passwd *** //给用户赋 ...

  8. Definitaion of 'utsname' must be imported from module 'Darwin.POSIX.sys.utsname' before it is required

    https://stackoverflow.com/questions/34430354/objective-c-gettimeofday-must-be-imported

  9. 如何在MyEclipse配置Gradle

    1.首先下载gradle gdk http://services.gradle.org/distributions 选一个bin或者all的下载即可 2.配置path GRADLE_HOME  D:\ ...

  10. Linux下找不到动态链接库(转)

    1.生成静态库 生成静态库使用ar工具,其实ar是archive的意思 $ar cqs libhello.a hello.o 2.生成动态库 用gcc来完成,由于可能存在多个版本,因此通常指定版本号: ...