zoukankan      html  css  js  c++  java
  • xtrabackup之Innobackupex全备恢复

    一、当前环境

    [mysql@hadoop1 ~]$ mysql --defaults-file=/mysql/mysqldata/3306/my.cnf -uroot -p123456 -P3306
    mysql> show variables like 'version';
    +---------------+------------+
    | Variable_name | Value      |
    +---------------+------------+
    | version       | 5.6.29-log | 
    +---------------+------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    #完全备份集
    [root@hadoop1 2016-05-27_00-23-05]# ls -l
    total 153824
    -rw-rw-r-- 1 mysql mysql       290 May 27 00:23 backup-my.cnf
    -rw-rw---- 1 mysql mysql 104857600 May 27 00:23 ibdata01
    drwx------ 2 mysql mysql      4096 May 27 00:23 mysql
    drwxrwxr-x 2 mysql mysql      4096 May 27 00:23 performance_schema
    drwx------ 2 mysql mysql      4096 May 27 00:23 pls_innodb
    drwxrwxr-x 2 mysql mysql      4096 May 27 00:23 pls_myisam
    drwxrwxr-x 2 mysql mysql      4096 May 27 00:23 test
    -rw-rw---- 1 mysql mysql  10485760 May 27 00:23 undo001
    -rw-rw---- 1 mysql mysql  10485760 May 27 00:23 undo002
    -rw-rw---- 1 mysql mysql  10485760 May 27 00:23 undo003
    -rw-rw---- 1 mysql mysql  10485760 May 27 00:23 undo004
    -rw-rw---- 1 mysql mysql  10485760 May 27 00:23 undo005
    -rw-rw-r-- 1 mysql mysql        13 May 27 00:23 xtrabackup_binary
    -rw-rw-r-- 1 mysql mysql        24 May 27 00:23 xtrabackup_binlog_info
    -rw-rw---- 1 mysql mysql        77 May 27 00:23 xtrabackup_checkpoints
    -rw-rw---- 1 mysql mysql      2560 May 27 00:23 xtrabackup_logfile
    [root@hadoop1 2016-05-27_00-23-05]# 

    二、关闭原有实例

    [mysql@hadoop1 ~]$ mysqladmin --defaults-file=/mysql/mysqldata/3306/my.cnf -uroot -p123456 -S /mysql/mysqldata/3306/mysql.sock shutdown
    [mysql@hadoop1 ~]$ netstat -an|grep 3306
    #将原有数据库重命名
    [mysql@DBMysql mysql]$ mv 3306  3306_bk
    [mysql@DBMysql mysql]$ mkdir 3306
    
    #将备份集备份
    [root@hadoop1 3306_full]# ls
    2016-05-27_00-23-05
    [root@hadoop1 3306_full]# cp -rf  2016-05-27_00-23-05 2016-05-27_00-23-05_02

    三、准备全备文件,当前并不做实际的恢复

    #创建临时文件夹,否则会报错
    [mysql@hadoop1 3306]$ mkdir tmp 
    [mysql@hadoop1 3306]$ innobackupex --defaults-file=/mysql/mysqldata/my.cnf --apply-log /mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05
    
    InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
    and Percona Ireland Ltd 2009-2012.  All Rights Reserved.
    
    This software is published under
    the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
    
    IMPORTANT: Please check that the apply-log run completes successfully.
               At the end of a successful apply-log run innobackupex
               prints "completed OK!".
    
    
    
    160527 01:14:19  innobackupex: Starting ibbackup with command: xtrabackup_56  --defaults-file="/mysql/mysqldata/my.cnf"  --defaults-group="mysqld" --prepare --target-dir=/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05 --tmpdir=/mysql/mysqldata/3306/tmp
    
    xtrabackup_56 version 2.0.7 for MySQL server 5.6.10 Linux (x86_64) (revision id: 552)
    xtrabackup: cd to /mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05
    xtrabackup: This target seems to be not prepared yet.
    xtrabackup: xtrabackup_logfile detected: size=2359296, start_lsn=(1527120)
    xtrabackup: Temporary instance for recovery is set as followings.
    xtrabackup:   innodb_data_home_dir = ./
    xtrabackup:   innodb_data_file_path = ibdata01:100M:autoextend
    xtrabackup:   innodb_log_group_home_dir = ./
    xtrabackup:   innodb_log_files_in_group = 1
    xtrabackup:   innodb_log_file_size = 2359296
    xtrabackup: Temporary instance for recovery is set as followings.
    xtrabackup:   innodb_data_home_dir = ./
    xtrabackup:   innodb_data_file_path = ibdata01:100M:autoextend
    xtrabackup:   innodb_log_group_home_dir = ./
    xtrabackup:   innodb_log_files_in_group = 1
    xtrabackup:   innodb_log_file_size = 2359296
    xtrabackup: Starting InnoDB instance for recovery.
    xtrabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)
    InnoDB: The InnoDB memory heap is disabled
    InnoDB: Mutexes and rw_locks use GCC atomic builtins
    InnoDB: Compressed tables use zlib 1.2.3
    InnoDB: CPU does not support crc32 instructions
    InnoDB: Initializing buffer pool, size = 100.0M
    InnoDB: Completed initialization of buffer pool
    InnoDB: Opened 5 undo tablespaces
    InnoDB: Highest supported file format is Barracuda.
    InnoDB: The log sequence numbers 1512687 and 1512687 in ibdata files do not match the log sequence number 1527120 in the ib_logfiles!
    InnoDB: Database was not shutdown normally!
    InnoDB: Starting crash recovery.
    InnoDB: Reading tablespace information from the .ibd files...
    InnoDB: Restoring possible half-written data pages 
    InnoDB: from the doublewrite buffer...
    InnoDB: Last MySQL binlog file position 0 1714, file name mysql-bin.000003
    InnoDB: 128 rollback segment(s) are active.
    InnoDB: Waiting for purge to start
    2016-05-27 01:14:20 2b7849f40940  InnoDB: Warning: table 'mysql/innodb_index_stats'
    InnoDB: in InnoDB data dictionary has unknown flags 50.
    2016-05-27 01:14:20 2b7849f40940  InnoDB: Warning: table 'mysql/innodb_table_stats'
    InnoDB: in InnoDB data dictionary has unknown flags 50.
    InnoDB: 1.2.10 started; log sequence number 1527120
    
    [notice (again)]
      If you use binary log and don't use any hack of group commit,
      the binary log position seems to be:
    InnoDB: Last MySQL binlog file position 0 1714, file name mysql-bin.000003
    
    xtrabackup: starting shutdown with innodb_fast_shutdown = 1
    InnoDB: FTS optimize thread exiting.
    InnoDB: Starting shutdown...
    InnoDB: Shutdown completed; log sequence number 1527144
    
    160527 01:14:22  innobackupex: Restarting xtrabackup with command: xtrabackup_56  --defaults-file="/mysql/mysqldata/my.cnf"  --defaults-group="mysqld" --prepare --target-dir=/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05 --tmpdir=/mysql/mysqldata/3306/tmp
    for creating ib_logfile*
    
    xtrabackup_56 version 2.0.7 for MySQL server 5.6.10 Linux (x86_64) (revision id: 552)
    xtrabackup: cd to /mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05
    xtrabackup: This target seems to be already prepared.
    xtrabackup: notice: xtrabackup_logfile was already used to '--prepare'.
    xtrabackup: Temporary instance for recovery is set as followings.
    xtrabackup:   innodb_data_home_dir = ./
    xtrabackup:   innodb_data_file_path = ibdata01:100M:autoextend
    xtrabackup:   innodb_log_group_home_dir = ./
    xtrabackup:   innodb_log_files_in_group = 3
    xtrabackup:   innodb_log_file_size = 134217728
    xtrabackup: Temporary instance for recovery is set as followings.
    xtrabackup:   innodb_data_home_dir = ./
    xtrabackup:   innodb_data_file_path = ibdata01:100M:autoextend
    xtrabackup:   innodb_log_group_home_dir = ./
    xtrabackup:   innodb_log_files_in_group = 3
    xtrabackup:   innodb_log_file_size = 134217728
    xtrabackup: Starting InnoDB instance for recovery.
    xtrabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)
    InnoDB: The InnoDB memory heap is disabled
    InnoDB: Mutexes and rw_locks use GCC atomic builtins
    InnoDB: Compressed tables use zlib 1.2.3
    InnoDB: CPU does not support crc32 instructions
    InnoDB: Initializing buffer pool, size = 100.0M
    InnoDB: Completed initialization of buffer pool
    InnoDB: Setting log file ./ib_logfile101 size to 128 MB
    InnoDB: Progress in MB: 100
    InnoDB: Setting log file ./ib_logfile1 size to 128 MB
    InnoDB: Progress in MB: 100
    InnoDB: Setting log file ./ib_logfile2 size to 128 MB
    InnoDB: Progress in MB: 100
    InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
    InnoDB: New log files created, LSN=1527144
    InnoDB: Opened 5 undo tablespaces
    InnoDB: Highest supported file format is Barracuda.
    InnoDB: 128 rollback segment(s) are active.
    InnoDB: Waiting for purge to start
    2016-05-27 01:14:24 2ac2c62dd940  InnoDB: Warning: table 'mysql/innodb_index_stats'
    InnoDB: in InnoDB data dictionary has unknown flags 50.
    2016-05-27 01:14:24 2ac2c62dd940  InnoDB: Warning: table 'mysql/innodb_table_stats'
    InnoDB: in InnoDB data dictionary has unknown flags 50.
    InnoDB: 1.2.10 started; log sequence number 1527308
    
    [notice (again)]
      If you use binary log and don't use any hack of group commit,
      the binary log position seems to be:
    InnoDB: Last MySQL binlog file position 0 1714, file name mysql-bin.000003
    
    xtrabackup: starting shutdown with innodb_fast_shutdown = 1
    InnoDB: FTS optimize thread exiting.
    InnoDB: Starting shutdown...
    InnoDB: Shutdown completed; log sequence number 1527318
    160527 01:14:26  innobackupex: completed OK!
    [mysql@hadoop1 3306]$ 

    四、查看备份集的变化

    [root@hadoop1 2016-05-27_00-23-05]# pwd
    /mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05
    [root@hadoop1 2016-05-27_00-23-05]# ls -l
    total 549744
    -rw-rw-r-- 1 mysql mysql       290 May 27 00:23 backup-my.cnf
    -rw-rw---- 1 mysql mysql 104857600 May 27 01:14 ibdata01
    -rw-rw-r-- 1 mysql mysql 134217728 May 27 01:14 ib_logfile0
    -rw-rw-r-- 1 mysql mysql 134217728 May 27 01:14 ib_logfile1
    -rw-rw-r-- 1 mysql mysql 134217728 May 27 01:14 ib_logfile2
    drwx------ 2 mysql mysql      4096 May 27 00:23 mysql
    drwxrwxr-x 2 mysql mysql      4096 May 27 00:23 performance_schema
    drwx------ 2 mysql mysql      4096 May 27 00:23 pls_innodb
    drwxrwxr-x 2 mysql mysql      4096 May 27 00:23 pls_myisam
    drwxrwxr-x 2 mysql mysql      4096 May 27 00:23 test
    -rw-rw---- 1 mysql mysql  10485760 May 27 01:14 undo001
    -rw-rw---- 1 mysql mysql  10485760 May 27 01:14 undo002
    -rw-rw---- 1 mysql mysql  10485760 May 27 01:14 undo003
    -rw-rw---- 1 mysql mysql  10485760 May 27 01:14 undo004
    -rw-rw---- 1 mysql mysql  10485760 May 27 01:14 undo005
    -rw-rw-r-- 1 mysql mysql        13 May 27 00:23 xtrabackup_binary
    -rw-rw-r-- 1 mysql mysql        24 May 27 00:23 xtrabackup_binlog_info
    -rw-rw-r-- 1 mysql mysql        22 May 27 01:14 xtrabackup_binlog_pos_innodb
    -rw-rw---- 1 mysql mysql        77 May 27 01:14 xtrabackup_checkpoints
    -rw-rw---- 1 mysql mysql   2359296 May 27 01:14 xtrabackup_logfile
    [root@hadoop1 2016-05-27_00-23-05]# 

    注意文件时间的变化,说明准备全备文件的操作只是对备份集本身做了相关处理,所以在准备恢复前最好对备份集再次备份

    五、将已经恢复好的数据文件复制回原始位置

    #手动创建相关目录 否则会报错
    [mysql@hadoop1 3306]$ mkdir data
    [mysql@hadoop1 3306]$ mkdir binlog
    [mysql@hadoop1 3306]$ mkdir logs
    [mysql@hadoop1 3306]$ mkdir redo
    [mysql@hadoop1 3306]$ mkdir undo
    
    [mysql@hadoop1 3306]$ innobackupex --defaults-file=/mysql/mysqldata/my.cnf --copy-back /mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05
    InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
    and Percona Ireland Ltd 2009-2012.  All Rights Reserved.
    
    This software is published under
    the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
    
    IMPORTANT: Please check that the copy-back run completes successfully.
               At the end of a successful copy-back run innobackupex
               prints "completed OK!".
    
    innobackupex: Starting to copy files in '/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05'
    innobackupex: back to original data directory '/mysql/mysqldata/3306/data'
    innobackupex: Copying '/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05/xtrabackup_binlog_pos_innodb' to '/mysql/mysqldata/3306/data/xtrabackup_binlog_pos_innodb'
    innobackupex: Creating directory '/mysql/mysqldata/3306/data/test'
    innobackupex: Creating directory '/mysql/mysqldata/3306/data/mysql'
    .......拷贝相关文件
    innobackupex: Creating directory '/mysql/mysqldata/3306/data/performance_schema'
    .......拷贝相关文件
    innobackupex: Creating directory '/mysql/mysqldata/3306/data/pls_innodb'
    .......拷贝相关文件
    nnobackupex: Creating directory '/mysql/mysqldata/3306/data/pls_myisam'
    .......拷贝相关文件
    
    innobackupex: Starting to copy InnoDB system tablespace
    innobackupex: in '/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05'
    innobackupex: back to original InnoDB data directory '/mysql/mysqldata/3306/data'
    innobackupex: Copying '/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05/ibdata01' to '/mysql/mysqldata/3306/data/ibdata01'
    
    innobackupex: Starting to copy InnoDB undo tablespaces
    innobackupex: in '/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05'
    innobackupex: back to '/mysql/mysqldata/3306/data'
    innobackupex: Copying '/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05/undo005' to '/mysql/mysqldata/3306/data'
    .......拷贝相关文件
    
    innobackupex: Starting to copy InnoDB log files
    innobackupex: in '/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05'
    innobackupex: back to original InnoDB log directory '/mysql/mysqldata/3306/redo'
    innobackupex: Copying '/mysql/mysqldata/backup/3306_full/2016-05-27_00-23-05/ib_logfile1' to '/mysql/mysqldata/3306/redo'
    .......拷贝相关文件
    innobackupex: Finished copying back files.
    
    160527 01:27:10  innobackupex: completed OK!
    [mysql@hadoop1 3306]$  

    疑问:undo文件还原的位置为data目录,并不是my.cnf中指定的(innodb_undo_directory= /mysql/mysqldata/3306/undo)目录。需手动移到该目录

    六、测试恢复结果

    [mysql@hadoop1 logs]$  mysqld_safe --defaults-file=/mysql/mysqldata/3306/my.cnf &
    
    #启动日志
    [mysql@hadoop1 logs]$ more mysql-error.log 
    160527 01:38:38 mysqld_safe Starting mysqld daemon with databases from /mysql/mysqldata/3306/data
    2016-05-27 01:38:48 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.6.29-log) starting as process 14386 ...
    2016-05-27 01:38:49 14386 [Note] InnoDB: Using atomics to ref count buffer pool pages
    2016-05-27 01:38:49 14386 [Note] InnoDB: The InnoDB memory heap is disabled
    2016-05-27 01:38:49 14386 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
    2016-05-27 01:38:49 14386 [Note] InnoDB: Memory barrier is not used
    2016-05-27 01:38:49 14386 [Note] InnoDB: Compressed tables use zlib 1.2.3
    2016-05-27 01:38:49 14386 [Note] InnoDB: Not using CPU crc32 instructions
    2016-05-27 01:38:49 14386 [Note] InnoDB: Initializing buffer pool, size = 256.0M
    2016-05-27 01:38:51 14386 [Note] InnoDB: Completed initialization of buffer pool
    2016-05-27 01:38:52 14386 [Note] InnoDB: Opened 5 undo tablespaces
    2016-05-27 01:38:52 14386 [Note] InnoDB: Highest supported file format is Barracuda.
    2016-05-27 01:38:53 14386 [Note] InnoDB: 128 rollback segment(s) are active.
    2016-05-27 01:38:53 14386 [Note] InnoDB: Waiting for purge to start
    2016-05-27 01:38:53 14386 [Note] InnoDB: 5.6.29 started; log sequence number 1527318
    2016-05-27 01:38:53 14386 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID:
     4c2b3a8e-23cd-11e6-bc50-080027c83f2b.
    2016-05-27 01:38:53 14386 [Note] Server hostname (bind-address): '*'; port: 3306
    2016-05-27 01:38:53 14386 [Note] IPv6 is not available.
    2016-05-27 01:38:53 14386 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
    2016-05-27 01:38:53 14386 [Note] Server socket created on IP: '0.0.0.0'.
    2016-05-27 01:38:53 14386 [Note] Event Scheduler: Loaded 0 events
    2016-05-27 01:38:53 14386 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
    Version: '5.6.29-log'  socket: '/mysql/mysqldata/3306/mysql.sock'  port: 3306  For mysqltest
    [mysql@hadoop1 logs]$ 

    七、小结

    a、Xtrabackup恢复的目的要是保证事务(数据)的一致性,Xtrabackup log会记录这些事务备份期间的状态
    b、恢复过程分为2个阶段,一个是Prepare阶段,一个是copy back阶段,恢复前关闭原有实例
    c、Prepare阶段会根据从innodb logfile捕获出来的信息(记录在xtrabackup log)来进行相应的前滚或回滚
    d、Prepare阶段会在成功前滚或回滚后创建新的innodb logfile(空)
    e、copy back阶段则是将成功恢复的全部文件复制回原来或指定的数据目录(目录应为空目录)
    f、copy back前需要关闭原有实例,如果恢复到不同的实例则不需要
    g、copy back完成后应做相应的权限修改
    h、启动恢复后的实例并进行相关验证
  • 相关阅读:
    基于遗传算法(Genetic Algorithm)的TSP问题求解(C)
    分治思想:合并排序和快速排序
    冒泡排序和选择排序
    WPF线程
    DataGrid属性和事件
    WPF限制TextBox只能输入数字
    键盘键值对应表
    转换人民币大小金额
    查找DataGrid某个单元格中的控件
    WPF中DataGrid使用初步
  • 原文地址:https://www.cnblogs.com/polestar/p/5618791.html
Copyright © 2011-2022 走看看