zoukankan      html  css  js  c++  java
  • mysql数据库热备份

    使用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 2014 |head -n 1`  #得到时间戳名字
        
        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 2014 |head -n 1`  #得到时间戳名字
        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 2014 |head -n 1`  #得到时间戳名字
        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
  • 相关阅读:
    今发现“最全前端资源汇集”,果断收藏
    js基础
    重排版与重绘
    小乌龟的配置
    考试网站
    苹果手机上时间的兼容
    自定义alert
    [概率dp] 流浪地球
    [权值线段树] 1163B2 Cat Party (Hard Edition)
    [单调栈]1156E Special Segments of Permutation
  • 原文地址:https://www.cnblogs.com/trying/p/3439082.html
Copyright © 2011-2022 走看看