zoukankan      html  css  js  c++  java
  • xtrabackup的使用

    Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具。

    一、安装xtrabackup

    采用rpm包的方式进行安装

    [root@server-1 ~]# cd /usr/local/src/
    [root@server-1 src]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
    [root@server-1 src]# yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

     二、xtrabackup工具介绍

    xtrabackup主要包含两个工具:

    xtrabackup:用于热备innodb,xtraxdb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构。

    innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。

    常用选项:

    --host:指定主机

    --user:指定用户名

    --password:指定密码

    --port:指定端口

    --databases:指定数据库

    --incremental:创建增量备份

    --incremental-basedir:指定包含完全备份的目录

    --incremental-dir:指定包含增量备份的目录

    --apply-log:对备份进行预处理操作

    一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

    --redo-only: 不回滚未提交事务

    --copy-back:恢复备份目录

    使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件,这些文件会被保存到一个以时间命名的目录当中。在备份的同时,innobackupex还会在备份目录中创建如下文件:

    xtrabackup_checkpoints -- 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息:每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN,LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

    xtrabackup_binlog_info -- mysql服务器当前正在使用的二进制日志文件及备份这一刻位置二进制日志时间的位置。xtrabackup_binlog_pos_innodb -- 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

    xtrabackup_binary -- 备份中用到的xtrabackup的可执行文件;

    backup-my.cnf -- 备份命令用到的配置选项信息:在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录:如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。

    三、主库全库备份

    在主库上执行如下命令

    [root@server-1 bak]# innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=xxxxxx /home/mysql-5.7.26/bak
    191213 10:52:21 innobackupex: Starting the backup operation
    
    IMPORTANT: Please check that the backup run completes successfully.
               At the end of a successful backup run innobackupex
               prints "completed OK!".
    
    191213 10:52:21  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup' as 'root'  (using password: YES).
    Failed to connect to MySQL server: DBI connect(';mysql_read_default_group=xtrabackup','root',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at - line 1314.
    191213 10:52:21 Connecting to MySQL server host: localhost, user: root, password: set, port: not set, socket: not set
    Failed to connect to MySQL server: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2).
    [root@server-1 bak]# 

    报错,sock文件找不到,因为my.cnf里配置了另外一个路径的socket,所以找不到默认路径的文件,我们指定Socket连接方式来连接mysql

    innobackupex --user=root --password=xxxxxxx --socket=/home/mysql-5.7.26/mysql.sock /home/mysql-5.7.26/bak/

    执行到最后,显示如下信息

    191213 11:00:55 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
    xtrabackup: The latest check point (for incremental): '2591312'
    xtrabackup: Stopping log copying thread.
    .191213 11:00:55 >> log scanned up to (2591321)
    
    191213 11:00:56 Executing UNLOCK TABLES
    191213 11:00:56 All tables unlocked
    191213 11:00:56 [00] Copying ib_buffer_pool to /home/mysql-5.7.26/bak/2019-12-13_11-00-50/ib_buffer_pool
    191213 11:00:56 [00]        ...done
    191213 11:00:56 Backup created in directory '/home/mysql-5.7.26/bak/2019-12-13_11-00-50/'
    MySQL binlog position: filename 'master-18-69.000001', position '1857'
    191213 11:00:56 [00] Writing /home/mysql-5.7.26/bak/2019-12-13_11-00-50/backup-my.cnf
    191213 11:00:56 [00]        ...done
    191213 11:00:56 [00] Writing /home/mysql-5.7.26/bak/2019-12-13_11-00-50/xtrabackup_info
    191213 11:00:56 [00]        ...done
    xtrabackup: Transaction log of lsn (2591312) to (2591321) was copied.
    191213 11:00:56 completed OK!
    completed OK!,表示备份成功
    查看备份目录显示如下文件:
    [root@server-1 2019-12-13_11-00-50]# ll
    总用量 12340
    -rw-r----- 1 root root      429 12月 13 11:00 backup-my.cnf
    -rw-r----- 1 root root      301 12月 13 11:00 ib_buffer_pool
    -rw-r----- 1 root root 12582912 12月 13 11:00 ibdata1
    drwxr-x--- 2 root root     4096 12月 13 11:00 mysql
    drwxr-x--- 2 root root     8192 12月 13 11:00 performance_schema
    drwxr-x--- 2 root root     8192 12月 13 11:00 sys
    drwxr-x--- 2 root root      202 12月 13 11:00 test
    -rw-r----- 1 root root       25 12月 13 11:00 xtrabackup_binlog_info
    -rw-r----- 1 root root      113 12月 13 11:00 xtrabackup_checkpoints
    -rw-r----- 1 root root      537 12月 13 11:00 xtrabackup_info
    -rw-r----- 1 root root     2560 12月 13 11:00 xtrabackup_logfile

    backup-my.cnf:备份用到的配置文件
    ibdata1:数据文件
    xtrabackup_binlog_info:
    mysql服务器当前正在使用的二进制日志文件及备份这一刻位置二进制日志时间的位置
    xtrabackup_checkpoints:备份的类型、状态和LSN状态信息文件
    xtrabackup_logfile:备份的日志文件

    四、从库恢复备份

    1、将从库的msyql停掉

    [root@localhost data]# mysqladmin -uroot -pZaq1xsw@ -S /home/mysql-5.7.26/mysql.sock shutdown

    2、在主库上复制备份目录到从库一个指定目录上

    [root@server-1 bak]# scp -r 2019-12-13_11-00-50/ root@172.28.18.71:/home/mysql-5.7.26

    3、从库上删除已有的data目录

    root@localhost mysql-5.7.26]# ll
    总用量 4
    drwxr-x--- 6 root  root   235 12月 13 11:22 2019-12-13_11-00-50
    drwxr-xr-x 6 mysql mysql 4096 12月 13 11:17 data
    drwxr-xr-x 2 mysql mysql   24 6月   6 2019 log

    查看已经有了刚才复制的主库备份目录,删除从库的data目录

    [root@localhost mysql-5.7.26]# rm -rf data/

    4、从库上也安装好percona-xtrabackup工具

    执行--apply-log ,将数据合并,使数据文件处于一致性状态

    [root@localhost mysql-5.7.26]# innobackupex --apply-log /home/mysql-5.7.26/2019-12-13_11-33-29/
    InnoDB: PUNCH HOLE support available
    InnoDB: Mutexes and rw_locks use GCC atomic builtins
    InnoDB: Uses event mutexes
    InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
    InnoDB: Compressed tables use zlib 1.2.7
    InnoDB: Number of pools: 1
    InnoDB: Using CPU crc32 instructions
    InnoDB: Initializing buffer pool, total size = 100M, instances = 1, chunk size = 100M
    InnoDB: Completed initialization of buffer pool
    InnoDB: page_cleaner coordinator priority: -20
    InnoDB: Highest supported file format is Barracuda.
    InnoDB: Removed temporary tablespace data file: "ibtmp1"
    InnoDB: Creating shared tablespace for temporary tables
    InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
    InnoDB: File './ibtmp1' size is now 12 MB.
    InnoDB: 96 redo rollback segment(s) found. 1 redo rollback segment(s) are active.
    InnoDB: 32 non-redo rollback segment(s) are active.
    InnoDB: 5.7.13 started; log sequence number 2591803
    xtrabackup: starting shutdown with innodb_fast_shutdown = 1
    InnoDB: FTS optimize thread exiting.
    InnoDB: Starting shutdown...
    InnoDB: Shutdown completed; log sequence number 2591822
    191213 11:43:57 completed OK!

    最后显示191213 11:43:57 completed OK!,表示数据文件一致性准备成功

     5、将主库备份目录更名为从库的data目录

    [root@localhost mysql-5.7.26]# mv 2019-12-13_11-00-50/ data
    [root@localhost mysql-5.7.26]# ll
    总用量 0
    drwxr-x--- 6 root  root  235 12月 13 11:22 data
    drwxr-xr-x 2 mysql mysql  24 6月   6 2019 log
    [root@localhost mysql-5.7.26]# 

    此时看到data目录的所有者是root,我们将mysql授权给data

    [root@localhost mysql-5.7.26]# chown -R mysql:mysql data/
    [root@localhost mysql-5.7.26]# ll
    总用量 0
    drwxr-x--- 6 mysql mysql 235 12月 13 11:22 data
    drwxr-xr-x 2 mysql mysql  24 6月   6 2019 log

    启动msyql

    [root@localhost mysql-5.7.26]# systemctl start mysqld

    进入mysql

    [root@localhost mysql-5.7.26]# mysql -uroot -pxxxx -S /home/mysql-5.7.26/mysql.sock

    查看数据库

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | test               |
    +--------------------+
    5 rows in set (0.01 sec)

    跟主库的数据一样了

    五、设置从库同步

    1、查看复制过来的data目录下的xtrabackup_info文件获取到binlog和pos位置

    uuid = 57dcc063-1d59-11ea-a759-14feb5dc2c77
    name = 
    tool_name = innobackupex
    tool_command = --user=root --password=... --socket=/home/mysql-5.7.26/mysql.sock /home/mysql-5.7.26/bak/
    tool_version = 2.4.9
    ibbackup_version = 2.4.9
    server_version = 5.7.26-log
    start_time = 2019-12-13 11:33:29
    end_time = 2019-12-13 11:33:35
    lock_time = 0 
    binlog_pos = filename 'master-18-69.000001', position '2121'
    innodb_from_lsn = 0 
    innodb_to_lsn = 2591653
    partial = N 
    incremental = N 
    format = file
    compact = N 
    compressed = N 
    encrypted = N 
    binlog_pos = filename 'master-18-69.000001', position '2121'

    2、连接mysql,执行从库命令
    mysql> change master to
        -> master_host='172.28.18.69',
        -> master_port=3306,
        -> master_user='repl',
        -> master_password='Xxxxxxxx',
        -> master_log_file='master-18-69.000001',
        -> master_log_pos=2121;
    Query OK, 0 rows affected, 2 warnings (0.10 sec)

    3、启动从库同步

    mysql> start slave;
    Query OK, 0 rows affected (0.01 sec)

    4、显示从库状态

    mysql> show slave statusG;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.28.18.69
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: master-18-69.000001
              Read_Master_Log_Pos: 2121
                   Relay_Log_File: localhost-relay-bin.000002
                    Relay_Log_Pos: 323
            Relay_Master_Log_File: master-18-69.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 2121
                  Relay_Log_Space: 534
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 693306
                      Master_UUID: ee3e292b-866b-11e9-9df8-14feb5dc2c77
                 Master_Info_File: /home/mysql-5.7.26/data/master.info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
               Master_Retry_Count: 86400
                      Master_Bind: 
          Last_IO_Error_Timestamp: 
         Last_SQL_Error_Timestamp: 
                   Master_SSL_Crl: 
               Master_SSL_Crlpath: 
               Retrieved_Gtid_Set: 
                Executed_Gtid_Set: d24d8a53-880d-11e9-b1f3-842b2b5cdc15:1-7,
    ee3e292b-866b-11e9-9df8-14feb5dc2c77:1-23
                    Auto_Position: 0
             Replicate_Rewrite_DB: 
                     Channel_Name: 
               Master_TLS_Version: 
    1 row in set (0.00 sec)
    
    ERROR: 
    No query specified
    
    mysql> 
     Slave_IO_Running: Yes
     Slave_SQL_Running: Yes
    从库同步成功,


  • 相关阅读:
    springMVC:HandlerInterceptor拦截器的使用
    SpringMVC:JSON形式输出(基于Fastjson)
    Callable接口解析
    FastJson一些常见方法(API):处理JSON变得好简单
    Spring@Autowired注解
    一些错误和解决办法--01
    线程池的原理及实现
    Rotate Image(二位数组顺时针旋转)
    JAVA内部类
    jdk9模块化--特性
  • 原文地址:https://www.cnblogs.com/sky-cheng/p/12034369.html
Copyright © 2011-2022 走看看