首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

mysql xtrabackup备份工具使用

2023-11-13 来源:花图问答

工具介绍:1、xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表, 也不能备份数据表结构;2、innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。3、xtrabackup 2.3版本开始innobackupex全部集成到xtrabackup,innobackupex已经被废弃。

1.检查和安装与Perl相关的模块 xtrabackup工具是使用Perl语言编写和执行的,所以需要系统中有Perl环境。 依赖包检查命令为: rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL 如果有依赖包确实,可以使用下面的命令安装: yum -y install perl-DBI yum -y install perl-DBD-MySQL yum install perl-Time-HiRes yum install perl-IO-Socket-SSL

2、安装过程Warning: Make sure that you have the libev package installed before installing Percona XtraBackup. The libev package is available from the EPEL repositories.

从http://rpmfind.net/linux/rpm2html/search.php上下载 libev-4.03-3.el6.x86_64.rpm安装包,然后安装即可,如下所示

[root@oracle12c /]# rpm -ivh libev-4.03-3.el6.x86_64.rpm

[root@oracle12c /]# rpm -ivh mysql-community-libs-compat-5.7.19-1.el6.x86_64.rpm

[root@oracle12c /]# rpm -ivh perl-DBD-MySQL-4.022-1.el6.rfx.x86_64.rpm

[root@oracle12c /]# rpm -ivh percona-xtrabackup-80-8.0.6-1.el6.x86_64.rpm检查安装[root@oracle12c /]# rpm -qa |grep xtrabackuppercona-xtrabackup-80-8.0.6-1.el6.x86_64

 

3、备份过程:全备:xtrabackup --backup --password=123456 --target-dir=/mysql/backups/base/增量:xtrabackup --backup --password=123456 --target-dir=/mysql/backups/inc1 --incremental-basedir=/mysql/backups/basextrabackup --backup --password=123456 --target-dir=/mysql/backups/inc2 --incremental-basedir=/mysql/backups/inc1

4、恢复过程:

前提要求 1、Backup needs to be prepared before it can be restored.2、mysql服务datadir目录为空。3、mysql服务停止运行。4、有需要恢复的时间范围的binlog日志。

基于时间点恢复,确定恢复到哪个增量备份cat /path/to/backup/xtrabackup_binlog_info mysql-bin.000003 57

数据增量恢复xtrabackup --prepare --apply-log-only --target-dir=/mysql/backups/basextrabackup --prepare --apply-log-only --target-dir=/mysql/backups/base --incremental-dir=/mysql/backups/inc1xtrabackup --prepare --apply-log-only --target-dir=/mysql/backups/base --incremental-dir=/mysql/backups/inc2

恢复数据文件到my.cnf指定的datadirxtrabackup --copy-back --target-dir=/mysql/backups/baseOR:rsync -avrP /mysql/backups/ /mysql/data/

修改权限chown -R mysql:mysql /mysql/data/

启动数据库service mysqld start

binlog日志挖掘并恢复数据mysqlbinlog /path/to/datadir/mysql-bin.000003 /path/to/datadir/mysql-bin.000004 --start-position=57 --stop-datetime="11-12-25 01:00:00" | mysql -u root -p

 

mysql xtrabackup备份工具使用

标签:sock   相关   增量备份   启动数据库   target   权限   osi   tor   word   

小编还为您整理了以下内容,可能对您也有帮助:

如何使用xtrabackup备份来恢复到已有mysql上

Xtrabackup 是由 percona 开源的免费数据库热备份软件,它能对 InnoDB 和 XtraDB 存储引擎的数据库非阻塞地备份。

为了方便建立从库,Xtrabackup 在备份完成后会将 binlog position 与 GTID 的相关信息保存于 xtrabackup_binlog_info 文件中。但是当你使用 Xtrabackup 生成的备份建立一个从库时,会发现恢复后的实例执行 show master status,显示的 Executed_Gtid_Set 与 xtrabackup_binlog_info 文件中记录的信息并不一致,而且使用 Xtrabackup 2.4 与 8.0(对 MySQL 8.0 进行备份)生成的备份在恢复后,信息不一致的表现又不相同。本篇文章主要针对该现象进行简单的分析。一、Xtrabackup 2.4.18 for MySQL 5.7.26

现象

1. 使用 Xtrabackup 工具备份后,xtrabackup_binlog_info 文件记录的信息如下:# cat xtrabackup_binlog_infomysql-bin.000003    86412752    55d3d9b9-4d49-11ea-932c-02000aba3fa6:1-5958592. 将该备份恢复至一个新实例并启动该实例,执行 show master status; 查看信息:mysql> show master statusG*************************** 1. row ***************************             File: mysql-bin.000001         Position: 154     Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set: 55d3d9b9-4d49-11ea-932c-02000aba3fa6:1-3266611 row in set (0.00 sec)此时会发现使用备份恢复的实例显示已执行过的 GTID 是 1-326661,而备份文件显示的是 1-595859,这是否表示两者相差的 GTID:326662-595859 代表的事务丢失了?通过对原实例(进行备份的实例)的 binlog 进行解析,来查询 GTID:326662-595859 这部分事务所生成的数据在新实例(通过备份恢复的实例)上是否存在。可以发现 GTID:326662-595859 这部分事务的数据都存在于新实例上,也就是说数据与 xtrabackup_binlog_info 文件记录的是一致的,只不过与 show master status 命令获取的信息的不一致。

原因分析

首先我们要清楚 Xtrabackup 2.4 的备份流程,大致如下:

1. start backup

2. copy ibdata1 / copy .ibd file

3. Excuted ftwrl

4. backup non-InnoDB tables and files

5. Writing xtrabackup_binlog_info

6. Executed FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS

7. Executed UNLOCK TABLES

8. Copying ib_buffer_pool

9. completed OK!

结合备份时的 general log 可知,Xtrabackup 在执行 ftwrl 并备份完所有非 InnoDB 表格的文件后通过 show master status 获取了 binlog position 和 GTID 的信息,将其记录到 xtrabackup_binlog_info 文件中。

那么 show master status 获取的是哪些信息?

该命令提供本实例的 binlog 文件的状态信息,显示正在写入的 binlog 文件,以及当前的binlog position,并且 MySQL 5.7 在 MySQL 库下引入了 gtid_executed 表,该表会记录当前执行过的 GTID。

那么目前看来问题可能就出在 gtid_executed 表格上,通过测试和官方文档提供的信息可知,该表格虽然是 InnoDB 表,但是其中的数据并非是实时更新的,且该表格记录信息的方式存在以下两个情况:1. 如果禁用了 log_bin,实例不会在该表格记录任何信息;若从库的 log_slave_updates 为 OFF,那么从库会在应用 relay-log 中的每个事务时执行一次 insert mysql.gtid_executed 的操作。2. 如果启用了 log_bin,则该表格记录的是在 binlog 发生切换(rotate)的时候直到上一个 binlog 文件执行过的全部 GTID,而此时 show master status 获取的 Gtid 信息不再由 mysql.gtid_executed 表提供,而是由全局系统变量 gtid_exected 提供;如果服务器意外停止,则当前 binlog 文件中的 Gtid 集合不会保存在 mysql.gtid_executed 表中,在实例恢复期间,这些 Gtid 从 binlog 文件中读取并添加到表中。

小结

所以当备份恢复时,实际 show master status 可能会出现以下情况:1. 当 log_bin 禁用或者 log_slave_updates 为 OFF 时,备份恢复后的实例 show master status 显示为空。2. 当开启了 log_bin,但是该实例并未发生过 binlog 的切换时,备份恢复后的实例 show master status 显示也为空。3. 当开启了 log_bin,其该实例的 binlog 发生过切换时,备份恢复后的实例 show master status 显示的信息会比 xtrabackup_binlog_info 文件中记录的 GTID 缺失一部分,这一部分就是 mysql.gtid_executed 表格未记录的部分。二、Xtrabackup 8.0.8 for MySQL 8.0.18现象1. 使用 Xtrabackup 工具备份后,xtrabackup_binlog_info 文件记录的信息如下:# # cat xtrabackup_binlog_infobinlog.000033    1459    70ec927f-4c6d-11ea-b88c-02000aba3fb1:1-6216832. 查看备份实例相对应的 binlog 解析后的内容:

    # mysqlbinlog -vv binlog.000033 | less

    定位至 70ec927f-4c6d-11ea-b88c-02000aba3fb1:621683

    # at 508

    #200213 13:46:47 server id 663728  end_log_pos 583      GTID    last_committed=0        sequence_number=2       rbr_only=yes    original_committed_timestamp=1581572807720907   immediate_commit_timestamp=15815728

    07720907     transaction_length=317

    /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;

    # original_commit_timestamp=1581572807720907 (2020-02-13 13:46:47.720907 CST)

    # immediate_commit_timestamp=1581572807720907 (2020-02-13 13:46:47.720907 CST)

    /*!80001 SET @@session.original_commit_timestamp=1581572807720907*//*!*/;

    /*!80014 SET @@session.original_server_version=80018*//*!*/;

    /*!80014 SET @@session.immediate_server_version=80018*//*!*/;

    SET @@SESSION.GTID_NEXT= '70ec927f-4c6d-11ea-b88c-02000aba3fb1:621683'/*!*/;

    # at 583

    #200213 13:46:47 server id 663728  end_log_pos 659      Query   thread_id=214   exec_time=0     error_code=0

    SET TIMESTAMP=1581572807/*!*/;

    BEGIN

    /*!*/;

    # at 659

    #200213 13:46:47 server id 663728  end_log_pos 708      Rows_query

    # insert into t1 values(null,2)

    # at 708

    #200213 13:46:47 server id 663728  end_log_pos 758      Table_map: `mysqlslap`.`t1` mapped to number 314

    # at 758

    #200213 13:46:47 server id 663728  end_log_pos 798      Write_rows: table id 314 flags: STMT_END_F

    BINLOG '

    x+JEXh2wIAoAMQAAAMQCAACAAB1pbnNlcnQgaW50byB0MSB2YWx1ZXMobnVsbCwyKQ==

    x+JEXhOwIAoAMgAAAPYCAAAAADoBAAAAAAEACW15c3Fsc2xhcAACdDEAAgMDAAIBAQA=

    x+JEXh6wIAoAKAAAAB4DAAAAADoBAAAAAAEAAgAC/wCKAAEAAgAAAA==

    '/*!*/;

    ### INSERT INTO `mysqlslap`.`t1`

    ### SET

    ###   @1=65674 /* INT meta=0 nullable=0 is_null=0 */

    ###   @2=2 /* INT meta=0 nullable=1 is_null=0 */

    # at 798

    #200213 13:46:47 server id 663728  end_log_pos 825      Xid = 2436045

    COMMIT/*!*/;

    可以发现该文件提供的 binlog position 与 GTID 并不对应。而 binlog.000033:1459 对应的 GTID 是 70ec927f-4c6d-11ea-b88c-02000aba3fb1:621685 提交后的下一个位置:

    # at 1142

    #200213 13:46:47 server id 663728  end_log_pos 1217     GTID    last_committed=2        sequence_number=4       rbr_only=yes    original_committed_timestamp=1581572807724646   immediate_commit_timestamp=15815728

    07724646     transaction_length=317

    /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;

    # original_commit_timestamp=1581572807724646 (2020-02-13 13:46:47.724646 CST)

    # immediate_commit_timestamp=1581572807724646 (2020-02-13 13:46:47.724646 CST)

    /*!80001 SET @@session.original_commit_timestamp=1581572807724646*//*!*/;

    /*!80014 SET @@session.original_server_version=80018*//*!*/;

    /*!80014 SET @@session.immediate_server_version=80018*//*!*/;

    SET @@SESSION.GTID_NEXT= '70ec927f-4c6d-11ea-b88c-02000aba3fb1:621685'/*!*/;

    # at 1217

    #200213 13:46:47 server id 663728  end_log_pos 1293     Query   thread_id=215   exec_time=0     error_code=0

    SET TIMESTAMP=1581572807/*!*/;

    BEGIN

    /*!*/;

    # at 1293

    #200213 13:46:47 server id 663728  end_log_pos 1342     Rows_query

    # insert into t1 values(null,2)

    # at 1342

    #200213 13:46:47 server id 663728  end_log_pos 1392     Table_map: `mysqlslap`.`t1` mapped to number 314

    # at 1392

    #200213 13:46:47 server id 663728  end_log_pos 1432     Write_rows: table id 314 flags: STMT_END_F

    BINLOG '

    x+JEXh2wIAoAMQAAAD4FAACAAB1pbnNlcnQgaW50byB0MSB2YWx1ZXMobnVsbCwyKQ==

    x+JEXhOwIAoAMgAAAHAFAAAAADoBAAAAAAEACW15c3Fsc2xhcAACdDEAAgMDAAIBAQA=

    x+JEXh6wIAoAKAAAAJgFAAAAADoBAAAAAAEAAgAC/wCMAAEAAgAAAA==

    '/*!*/;

    ### INSERT INTO `mysqlslap`.`t1`

    ### SET

    ###   @1=65676 /* INT meta=0 nullable=0 is_null=0 */

    ###   @2=2 /* INT meta=0 nullable=1 is_null=0 */

    # at 1432

    #200213 13:46:47 server id 663728  end_log_pos 1459     Xid = 2436047

    COMMIT/*!*/;

    # at 1459

    3. 再看将备份恢复到一个新实例并启动后,执行 show master status 显示的信息:mysql> show master statusG*************************** 1. row ***************************             File: binlog.000034         Position: 191     Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set: 70ec927f-4c6d-11ea-b88c-02000aba3fb1:1-6216851 row in set (0.00 sec)


    可以发现与 Xtrabackup 2.4 不同的是,该备份的 xtrabackup_binlog_info 文件记录的信息并不准确,而备份恢复后显示的信息却是准确的。

    原因

    首先我们来看一下 Xtrabackup 8.0 针对 MySQL 8.0 备份的大致过程:1. start backup2. copy .ibd file3. backup non-InnoDB tables and files4. Executed FLUSH NO_WRITE_TO_BINLOG BINARY LOGS5. Selecting LSN and binary log position from p_s.log_status6. copy last binlog file7. Writing /mysql/backup/backup/binlog.index8. Writing xtrabackup_binlog_info9. Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS10. copy ib_buffer_pool11. completed OK!由以上步骤可知,Xtrabackup 8.0 对 MySQL 8.0 的备份与 Xtrabackup 2.4 略有不同,根据 percona 官方文档的信息,当 MySQL 8.0 中仅存在 InnoDB 引擎的表格时,不再执行ftwrl(当存在非 InnoDB 的表格或者使用 --slave-info 选项时会执行),而是根据上述步骤的第 5 步,Xtrabackup 8.0 会通过SELECT server_uuid, local, replication, storage_engines FROM performance_schema.log_status


    来获取 LSN 、binlog position and Gtid。1. performance_schema.log_status 是 MySQL 8.0 提供给在线备份工具获取复制日志文件信息的表格。查询 log_status 表时,服务器将阻止日志的记录和相关的更改来获取足够的时间以填充该表,然后释放资源。Log_status 表通知在线备份工具应记录主库的 binlog 的哪个位点和 gtid_executed 的值,还有每个复制通道的 relay log。它还为各个存储引擎提供了相关信息,例如 InnoDB 存储引擎使用的最后一个日志序列号(LSN)和最后一个检查点的 LSN。2. 经过测试发现,当无数据写入时, performance_schema.log_status 提供的 binlog position 与 GTID 是一致的,但是当有大量数据持续写入时,该表格提供的 binlog position 与 GTID 信息将不再一致,如下图:

    3. 既然 performance_schema.log_status 提供的信息不一致,那么为什么备份恢复后,GTID 没有缺失?这是因为 Xtrabackup 8.0 在备份过程中多了两步操作,FLUSH NO_WRITE_TO_BINLOG BINARY LOGS 和 copy binlog,Xtrabackup 8.0 在备份完非 InnoDB 表格的文件时会先切换 binlog,然后将切换后的 binlog 也进行备份,这样使用该备份恢复的新实例在启动后不仅会读取 gtid_executed 表,也会读取 binlog 文件来更新 GTID,就可以保持与备份时 xtrabackup_binlog_info 文件记录的 binlog position 保持一致(需要注意的是 MySQL 8.0 的 gtid_executed 表格不再是当 binlog 切换时更新,而是会不断的实时更新,但需要注意在有大量数据写入时也不能做到和全局变量 gtid_exeuted 保持严格一致)。4. 当 MySQL 8.0 中存在非 InnoDB 的表格,比如 MyISAM 表时,Xtrabackup 8.0 会在执行完 FLUSH NO_WRITE_TO_BINLOG BINARY LOGS 后执行 ftwrl,此时查询 performance_schema.log_status 得到的 binlog position 与 GTID 是一致的,且备份恢复后 show master status 显示的信息也与 xtrabackup_binlog_info 文件记录的信息一致。


    总结1. Xtrabackup 2.4 备份后生成的 xtrabackup_binlog_info 文件记录的 GTID 信息是准确的,但是备份恢复后 show master status 显示的 GTID 是不准确的。2. Xtrabackup 8.0 在备份只有 InnoDB 表的实例时,xtrabackup_binlog_info 文件记录的 GTID 信息不一定是准确的,但是备份恢复后 show master status 显示的 GTID 是准确的。3. Xtrabackup 8.0 在备份有非 InnoDB 表格的实例时,xtrabackup_binlog_info 文件记录的 GTID 信息是准确的,备份恢复后 show master status 显示的 GTID 也是准确的。

    注意:此处的“准确”主要指 xtrabackup_binlog_info 文件中记录的 GTID 与备份中实际的 binlog position & 数据是否一致。

如何使用xtrabackup备份来恢复到已有mysql上

Xtrabackup 是由 percona 开源的免费数据库热备份软件,它能对 InnoDB 和 XtraDB 存储引擎的数据库非阻塞地备份。

为了方便建立从库,Xtrabackup 在备份完成后会将 binlog position 与 GTID 的相关信息保存于 xtrabackup_binlog_info 文件中。但是当你使用 Xtrabackup 生成的备份建立一个从库时,会发现恢复后的实例执行 show master status,显示的 Executed_Gtid_Set 与 xtrabackup_binlog_info 文件中记录的信息并不一致,而且使用 Xtrabackup 2.4 与 8.0(对 MySQL 8.0 进行备份)生成的备份在恢复后,信息不一致的表现又不相同。本篇文章主要针对该现象进行简单的分析。一、Xtrabackup 2.4.18 for MySQL 5.7.26

现象

1. 使用 Xtrabackup 工具备份后,xtrabackup_binlog_info 文件记录的信息如下:# cat xtrabackup_binlog_infomysql-bin.000003    86412752    55d3d9b9-4d49-11ea-932c-02000aba3fa6:1-5958592. 将该备份恢复至一个新实例并启动该实例,执行 show master status; 查看信息:mysql> show master statusG*************************** 1. row ***************************             File: mysql-bin.000001         Position: 154     Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set: 55d3d9b9-4d49-11ea-932c-02000aba3fa6:1-3266611 row in set (0.00 sec)此时会发现使用备份恢复的实例显示已执行过的 GTID 是 1-326661,而备份文件显示的是 1-595859,这是否表示两者相差的 GTID:326662-595859 代表的事务丢失了?通过对原实例(进行备份的实例)的 binlog 进行解析,来查询 GTID:326662-595859 这部分事务所生成的数据在新实例(通过备份恢复的实例)上是否存在。可以发现 GTID:326662-595859 这部分事务的数据都存在于新实例上,也就是说数据与 xtrabackup_binlog_info 文件记录的是一致的,只不过与 show master status 命令获取的信息的不一致。

原因分析

首先我们要清楚 Xtrabackup 2.4 的备份流程,大致如下:

1. start backup

2. copy ibdata1 / copy .ibd file

3. Excuted ftwrl

4. backup non-InnoDB tables and files

5. Writing xtrabackup_binlog_info

6. Executed FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS

7. Executed UNLOCK TABLES

8. Copying ib_buffer_pool

9. completed OK!

结合备份时的 general log 可知,Xtrabackup 在执行 ftwrl 并备份完所有非 InnoDB 表格的文件后通过 show master status 获取了 binlog position 和 GTID 的信息,将其记录到 xtrabackup_binlog_info 文件中。

那么 show master status 获取的是哪些信息?

该命令提供本实例的 binlog 文件的状态信息,显示正在写入的 binlog 文件,以及当前的binlog position,并且 MySQL 5.7 在 MySQL 库下引入了 gtid_executed 表,该表会记录当前执行过的 GTID。

那么目前看来问题可能就出在 gtid_executed 表格上,通过测试和官方文档提供的信息可知,该表格虽然是 InnoDB 表,但是其中的数据并非是实时更新的,且该表格记录信息的方式存在以下两个情况:1. 如果禁用了 log_bin,实例不会在该表格记录任何信息;若从库的 log_slave_updates 为 OFF,那么从库会在应用 relay-log 中的每个事务时执行一次 insert mysql.gtid_executed 的操作。2. 如果启用了 log_bin,则该表格记录的是在 binlog 发生切换(rotate)的时候直到上一个 binlog 文件执行过的全部 GTID,而此时 show master status 获取的 Gtid 信息不再由 mysql.gtid_executed 表提供,而是由全局系统变量 gtid_exected 提供;如果服务器意外停止,则当前 binlog 文件中的 Gtid 集合不会保存在 mysql.gtid_executed 表中,在实例恢复期间,这些 Gtid 从 binlog 文件中读取并添加到表中。

小结

所以当备份恢复时,实际 show master status 可能会出现以下情况:1. 当 log_bin 禁用或者 log_slave_updates 为 OFF 时,备份恢复后的实例 show master status 显示为空。2. 当开启了 log_bin,但是该实例并未发生过 binlog 的切换时,备份恢复后的实例 show master status 显示也为空。3. 当开启了 log_bin,其该实例的 binlog 发生过切换时,备份恢复后的实例 show master status 显示的信息会比 xtrabackup_binlog_info 文件中记录的 GTID 缺失一部分,这一部分就是 mysql.gtid_executed 表格未记录的部分。二、Xtrabackup 8.0.8 for MySQL 8.0.18现象1. 使用 Xtrabackup 工具备份后,xtrabackup_binlog_info 文件记录的信息如下:# # cat xtrabackup_binlog_infobinlog.000033    1459    70ec927f-4c6d-11ea-b88c-02000aba3fb1:1-6216832. 查看备份实例相对应的 binlog 解析后的内容:

    # mysqlbinlog -vv binlog.000033 | less

    定位至 70ec927f-4c6d-11ea-b88c-02000aba3fb1:621683

    # at 508

    #200213 13:46:47 server id 663728  end_log_pos 583      GTID    last_committed=0        sequence_number=2       rbr_only=yes    original_committed_timestamp=1581572807720907   immediate_commit_timestamp=15815728

    07720907     transaction_length=317

    /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;

    # original_commit_timestamp=1581572807720907 (2020-02-13 13:46:47.720907 CST)

    # immediate_commit_timestamp=1581572807720907 (2020-02-13 13:46:47.720907 CST)

    /*!80001 SET @@session.original_commit_timestamp=1581572807720907*//*!*/;

    /*!80014 SET @@session.original_server_version=80018*//*!*/;

    /*!80014 SET @@session.immediate_server_version=80018*//*!*/;

    SET @@SESSION.GTID_NEXT= '70ec927f-4c6d-11ea-b88c-02000aba3fb1:621683'/*!*/;

    # at 583

    #200213 13:46:47 server id 663728  end_log_pos 659      Query   thread_id=214   exec_time=0     error_code=0

    SET TIMESTAMP=1581572807/*!*/;

    BEGIN

    /*!*/;

    # at 659

    #200213 13:46:47 server id 663728  end_log_pos 708      Rows_query

    # insert into t1 values(null,2)

    # at 708

    #200213 13:46:47 server id 663728  end_log_pos 758      Table_map: `mysqlslap`.`t1` mapped to number 314

    # at 758

    #200213 13:46:47 server id 663728  end_log_pos 798      Write_rows: table id 314 flags: STMT_END_F

    BINLOG '

    x+JEXh2wIAoAMQAAAMQCAACAAB1pbnNlcnQgaW50byB0MSB2YWx1ZXMobnVsbCwyKQ==

    x+JEXhOwIAoAMgAAAPYCAAAAADoBAAAAAAEACW15c3Fsc2xhcAACdDEAAgMDAAIBAQA=

    x+JEXh6wIAoAKAAAAB4DAAAAADoBAAAAAAEAAgAC/wCKAAEAAgAAAA==

    '/*!*/;

    ### INSERT INTO `mysqlslap`.`t1`

    ### SET

    ###   @1=65674 /* INT meta=0 nullable=0 is_null=0 */

    ###   @2=2 /* INT meta=0 nullable=1 is_null=0 */

    # at 798

    #200213 13:46:47 server id 663728  end_log_pos 825      Xid = 2436045

    COMMIT/*!*/;

    可以发现该文件提供的 binlog position 与 GTID 并不对应。而 binlog.000033:1459 对应的 GTID 是 70ec927f-4c6d-11ea-b88c-02000aba3fb1:621685 提交后的下一个位置:

    # at 1142

    #200213 13:46:47 server id 663728  end_log_pos 1217     GTID    last_committed=2        sequence_number=4       rbr_only=yes    original_committed_timestamp=1581572807724646   immediate_commit_timestamp=15815728

    07724646     transaction_length=317

    /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;

    # original_commit_timestamp=1581572807724646 (2020-02-13 13:46:47.724646 CST)

    # immediate_commit_timestamp=1581572807724646 (2020-02-13 13:46:47.724646 CST)

    /*!80001 SET @@session.original_commit_timestamp=1581572807724646*//*!*/;

    /*!80014 SET @@session.original_server_version=80018*//*!*/;

    /*!80014 SET @@session.immediate_server_version=80018*//*!*/;

    SET @@SESSION.GTID_NEXT= '70ec927f-4c6d-11ea-b88c-02000aba3fb1:621685'/*!*/;

    # at 1217

    #200213 13:46:47 server id 663728  end_log_pos 1293     Query   thread_id=215   exec_time=0     error_code=0

    SET TIMESTAMP=1581572807/*!*/;

    BEGIN

    /*!*/;

    # at 1293

    #200213 13:46:47 server id 663728  end_log_pos 1342     Rows_query

    # insert into t1 values(null,2)

    # at 1342

    #200213 13:46:47 server id 663728  end_log_pos 1392     Table_map: `mysqlslap`.`t1` mapped to number 314

    # at 1392

    #200213 13:46:47 server id 663728  end_log_pos 1432     Write_rows: table id 314 flags: STMT_END_F

    BINLOG '

    x+JEXh2wIAoAMQAAAD4FAACAAB1pbnNlcnQgaW50byB0MSB2YWx1ZXMobnVsbCwyKQ==

    x+JEXhOwIAoAMgAAAHAFAAAAADoBAAAAAAEACW15c3Fsc2xhcAACdDEAAgMDAAIBAQA=

    x+JEXh6wIAoAKAAAAJgFAAAAADoBAAAAAAEAAgAC/wCMAAEAAgAAAA==

    '/*!*/;

    ### INSERT INTO `mysqlslap`.`t1`

    ### SET

    ###   @1=65676 /* INT meta=0 nullable=0 is_null=0 */

    ###   @2=2 /* INT meta=0 nullable=1 is_null=0 */

    # at 1432

    #200213 13:46:47 server id 663728  end_log_pos 1459     Xid = 2436047

    COMMIT/*!*/;

    # at 1459

    3. 再看将备份恢复到一个新实例并启动后,执行 show master status 显示的信息:mysql> show master statusG*************************** 1. row ***************************             File: binlog.000034         Position: 191     Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set: 70ec927f-4c6d-11ea-b88c-02000aba3fb1:1-6216851 row in set (0.00 sec)


    可以发现与 Xtrabackup 2.4 不同的是,该备份的 xtrabackup_binlog_info 文件记录的信息并不准确,而备份恢复后显示的信息却是准确的。

    原因

    首先我们来看一下 Xtrabackup 8.0 针对 MySQL 8.0 备份的大致过程:1. start backup2. copy .ibd file3. backup non-InnoDB tables and files4. Executed FLUSH NO_WRITE_TO_BINLOG BINARY LOGS5. Selecting LSN and binary log position from p_s.log_status6. copy last binlog file7. Writing /mysql/backup/backup/binlog.index8. Writing xtrabackup_binlog_info9. Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS10. copy ib_buffer_pool11. completed OK!由以上步骤可知,Xtrabackup 8.0 对 MySQL 8.0 的备份与 Xtrabackup 2.4 略有不同,根据 percona 官方文档的信息,当 MySQL 8.0 中仅存在 InnoDB 引擎的表格时,不再执行ftwrl(当存在非 InnoDB 的表格或者使用 --slave-info 选项时会执行),而是根据上述步骤的第 5 步,Xtrabackup 8.0 会通过SELECT server_uuid, local, replication, storage_engines FROM performance_schema.log_status


    来获取 LSN 、binlog position and Gtid。1. performance_schema.log_status 是 MySQL 8.0 提供给在线备份工具获取复制日志文件信息的表格。查询 log_status 表时,服务器将阻止日志的记录和相关的更改来获取足够的时间以填充该表,然后释放资源。Log_status 表通知在线备份工具应记录主库的 binlog 的哪个位点和 gtid_executed 的值,还有每个复制通道的 relay log。它还为各个存储引擎提供了相关信息,例如 InnoDB 存储引擎使用的最后一个日志序列号(LSN)和最后一个检查点的 LSN。2. 经过测试发现,当无数据写入时, performance_schema.log_status 提供的 binlog position 与 GTID 是一致的,但是当有大量数据持续写入时,该表格提供的 binlog position 与 GTID 信息将不再一致,如下图:

    3. 既然 performance_schema.log_status 提供的信息不一致,那么为什么备份恢复后,GTID 没有缺失?这是因为 Xtrabackup 8.0 在备份过程中多了两步操作,FLUSH NO_WRITE_TO_BINLOG BINARY LOGS 和 copy binlog,Xtrabackup 8.0 在备份完非 InnoDB 表格的文件时会先切换 binlog,然后将切换后的 binlog 也进行备份,这样使用该备份恢复的新实例在启动后不仅会读取 gtid_executed 表,也会读取 binlog 文件来更新 GTID,就可以保持与备份时 xtrabackup_binlog_info 文件记录的 binlog position 保持一致(需要注意的是 MySQL 8.0 的 gtid_executed 表格不再是当 binlog 切换时更新,而是会不断的实时更新,但需要注意在有大量数据写入时也不能做到和全局变量 gtid_exeuted 保持严格一致)。4. 当 MySQL 8.0 中存在非 InnoDB 的表格,比如 MyISAM 表时,Xtrabackup 8.0 会在执行完 FLUSH NO_WRITE_TO_BINLOG BINARY LOGS 后执行 ftwrl,此时查询 performance_schema.log_status 得到的 binlog position 与 GTID 是一致的,且备份恢复后 show master status 显示的信息也与 xtrabackup_binlog_info 文件记录的信息一致。


    总结1. Xtrabackup 2.4 备份后生成的 xtrabackup_binlog_info 文件记录的 GTID 信息是准确的,但是备份恢复后 show master status 显示的 GTID 是不准确的。2. Xtrabackup 8.0 在备份只有 InnoDB 表的实例时,xtrabackup_binlog_info 文件记录的 GTID 信息不一定是准确的,但是备份恢复后 show master status 显示的 GTID 是准确的。3. Xtrabackup 8.0 在备份有非 InnoDB 表格的实例时,xtrabackup_binlog_info 文件记录的 GTID 信息是准确的,备份恢复后 show master status 显示的 GTID 也是准确的。

    注意:此处的“准确”主要指 xtrabackup_binlog_info 文件中记录的 GTID 与备份中实际的 binlog position & 数据是否一致。

MySQL 常用备份工具流程解析

xtrabackup工具介绍

Percona 公司

官网:www.percona.com
percona-server
InnoDB --> XtraDB

Xtrabackup备份工具

percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库进行热备的工具
手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

xtrabackup 特点:

  • 备份还原过程快速、可靠
  • 备份过程不会打断正在执行的事务
  • 能够基于压缩等功能节约磁盘空间和流量
  • 自动实现备份检验
  • 开源,免费
  • xtrabackup工具文件组成

  • Xtrabackup2.2 版之前包括4个可执行文件:
  • innobackupex: Perl 脚本
  • xtrabackup: C/C++,编译的二进制程序
  • xbcrypt: 加解密
  • xbstream: 支持并发写的流文件格式
  • xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQL Server 没有交互

    innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在 xtrabackup 之上做了一层封装实现的

    xtrabackup的新版变化

    xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到
    xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链
    接,即xtrabackup现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过
    xtrabackup替换innobackupex

    xtrabackup备份过程

    技术图片

    备份生成的相关文件

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

  • xtrabackup_info:文本文件,innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置
  • xtrabackup_checkpoints:文本文件,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
  • xtrabackup_binlog_info:文本文件,MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
  • backup-my.cnf:文本文件,备份命令用到的配置选项信息
  • xtrabackup_logfile:备份生成的二进制日志文件
  • 数据库的·xtrabackup的备份和还原

    实战案例:利用xtrabackup完全,增量备份及还原

    未完待续

    MySQL备份和恢复[4]-xtrabackup备份工具

    标签:doc   文件组   number   服务   arc   http   文件   percona   ber   

    MySQL 常用备份工具流程解析

    xtrabackup工具介绍

    Percona 公司

    官网:www.percona.com
    percona-server
    InnoDB --> XtraDB

    Xtrabackup备份工具

    percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库进行热备的工具
    手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

    xtrabackup 特点:

  • 备份还原过程快速、可靠
  • 备份过程不会打断正在执行的事务
  • 能够基于压缩等功能节约磁盘空间和流量
  • 自动实现备份检验
  • 开源,免费
  • xtrabackup工具文件组成

  • Xtrabackup2.2 版之前包括4个可执行文件:
  • innobackupex: Perl 脚本
  • xtrabackup: C/C++,编译的二进制程序
  • xbcrypt: 加解密
  • xbstream: 支持并发写的流文件格式
  • xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQL Server 没有交互

    innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在 xtrabackup 之上做了一层封装实现的

    xtrabackup的新版变化

    xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到
    xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链
    接,即xtrabackup现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过
    xtrabackup替换innobackupex

    xtrabackup备份过程

    技术图片

    备份生成的相关文件

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

  • xtrabackup_info:文本文件,innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置
  • xtrabackup_checkpoints:文本文件,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
  • xtrabackup_binlog_info:文本文件,MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
  • backup-my.cnf:文本文件,备份命令用到的配置选项信息
  • xtrabackup_logfile:备份生成的二进制日志文件
  • 数据库的·xtrabackup的备份和还原

    实战案例:利用xtrabackup完全,增量备份及还原

    未完待续

    MySQL备份和恢复[4]-xtrabackup备份工具

    标签:doc   文件组   number   服务   arc   http   文件   percona   ber   

    xtrabackup怎么在windows上用

    备份
    备份时无法指定备份名,每一个备份文件夹都是以时间来命名的,里面存放的是数据文件、日志文件,目录需存在,没有则先创建。
    1,全量备份
    [root@localhost]# innobackupex --user=root --password=123456 --host=127.0.0.1 /var/backup/all
    2,增量备份
    [root@localhost]# innobackupex --user=root --password=123456 --host=127.0.0.1 --incremental --incremental-basedir=/var/backup/all/2015-10-12_11-15-21 /var/backup/inc1
    远程备份
    压缩备份
    [root@localhost]# innobackupex --user=root --password=dba@85263382 --host=127.0.0.1 --stream=tar /tmp | ssh root@10.1.2.208 "gzip - > /tmp/bak.tar.gz"
    或者
    [root@localhost]# innobackupex --user=root --password=dba@85263382 --host=127.0.0.1 --stream=tar /tmp | gzip | ssh root@10.1.2.208 " /tmp/bak.tar.gz"
    --stream=tar:tar格式
    gzip:压缩
    非压缩备份
    [root@localhost]# innobackupex --user=root --password=dba@85263382 --host=127.0.0.1 --stream=tar /tmp | ssh root@10.1.2.208 "cat - > /tmp/bak.tar"
    远程恢复
    数据压缩的文件需要加上 “i”
    [root@localhost]# tar -izxvf bak.tar.gz
    恢复
    当恢复时,data文件夹需要清空,如果是单库备份的恢复,像MySQL的系统库需要移动到临时文件夹中,当恢复完成后再拷贝到data文件夹中,当然也可以在备份时加入mysql库,恢复时也能把Mysql库恢复了。同时需要注意,清空data后,将mysql服务关闭后执行恢复,恢复完成后再启动

    xtrabackup怎么在windows上用

    备份
    备份时无法指定备份名,每一个备份文件夹都是以时间来命名的,里面存放的是数据文件、日志文件,目录需存在,没有则先创建。
    1,全量备份
    [root@localhost]# innobackupex --user=root --password=123456 --host=127.0.0.1 /var/backup/all
    2,增量备份
    [root@localhost]# innobackupex --user=root --password=123456 --host=127.0.0.1 --incremental --incremental-basedir=/var/backup/all/2015-10-12_11-15-21 /var/backup/inc1
    远程备份
    压缩备份
    [root@localhost]# innobackupex --user=root --password=dba@85263382 --host=127.0.0.1 --stream=tar /tmp | ssh root@10.1.2.208 "gzip - > /tmp/bak.tar.gz"
    或者
    [root@localhost]# innobackupex --user=root --password=dba@85263382 --host=127.0.0.1 --stream=tar /tmp | gzip | ssh root@10.1.2.208 " /tmp/bak.tar.gz"
    --stream=tar:tar格式
    gzip:压缩
    非压缩备份
    [root@localhost]# innobackupex --user=root --password=dba@85263382 --host=127.0.0.1 --stream=tar /tmp | ssh root@10.1.2.208 "cat - > /tmp/bak.tar"
    远程恢复
    数据压缩的文件需要加上 “i”
    [root@localhost]# tar -izxvf bak.tar.gz
    恢复
    当恢复时,data文件夹需要清空,如果是单库备份的恢复,像MySQL的系统库需要移动到临时文件夹中,当恢复完成后再拷贝到data文件夹中,当然也可以在备份时加入mysql库,恢复时也能把Mysql库恢复了。同时需要注意,清空data后,将mysql服务关闭后执行恢复,恢复完成后再启动

    基于Xtrabackup8的Mysql定时全量,增量备份及恢复实战演练

    xtrabackup工具介绍

    Percona 公司

    官网:www.percona.com
    percona-server
    InnoDB --> XtraDB

    Xtrabackup备份工具

    percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库进行热备的工具
    手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

    xtrabackup 特点:

  • 备份还原过程快速、可靠
  • 备份过程不会打断正在执行的事务
  • 能够基于压缩等功能节约磁盘空间和流量
  • 自动实现备份检验
  • 开源,免费
  • xtrabackup工具文件组成

  • Xtrabackup2.2 版之前包括4个可执行文件:
  • innobackupex: Perl 脚本
  • xtrabackup: C/C++,编译的二进制程序
  • xbcrypt: 加解密
  • xbstream: 支持并发写的流文件格式
  • xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQL Server 没有交互

    innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在 xtrabackup 之上做了一层封装实现的

    xtrabackup的新版变化

    xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到
    xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链
    接,即xtrabackup现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过
    xtrabackup替换innobackupex

    xtrabackup备份过程

    技术图片

    备份生成的相关文件

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

  • xtrabackup_info:文本文件,innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置
  • xtrabackup_checkpoints:文本文件,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
  • xtrabackup_binlog_info:文本文件,MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
  • backup-my.cnf:文本文件,备份命令用到的配置选项信息
  • xtrabackup_logfile:备份生成的二进制日志文件
  • 数据库的·xtrabackup的备份和还原

    实战案例:利用xtrabackup完全,增量备份及还原

    未完待续

    MySQL备份和恢复[4]-xtrabackup备份工具

    标签:doc   文件组   number   服务   arc   http   文件   percona   ber   

    基于Xtrabackup8的Mysql定时全量,增量备份及恢复实战演练

    xtrabackup工具介绍

    Percona 公司

    官网:www.percona.com
    percona-server
    InnoDB --> XtraDB

    Xtrabackup备份工具

    percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库进行热备的工具
    手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

    xtrabackup 特点:

  • 备份还原过程快速、可靠
  • 备份过程不会打断正在执行的事务
  • 能够基于压缩等功能节约磁盘空间和流量
  • 自动实现备份检验
  • 开源,免费
  • xtrabackup工具文件组成

  • Xtrabackup2.2 版之前包括4个可执行文件:
  • innobackupex: Perl 脚本
  • xtrabackup: C/C++,编译的二进制程序
  • xbcrypt: 加解密
  • xbstream: 支持并发写的流文件格式
  • xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQL Server 没有交互

    innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在 xtrabackup 之上做了一层封装实现的

    xtrabackup的新版变化

    xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到
    xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链
    接,即xtrabackup现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过
    xtrabackup替换innobackupex

    xtrabackup备份过程

    技术图片

    备份生成的相关文件

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

  • xtrabackup_info:文本文件,innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置
  • xtrabackup_checkpoints:文本文件,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
  • xtrabackup_binlog_info:文本文件,MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
  • backup-my.cnf:文本文件,备份命令用到的配置选项信息
  • xtrabackup_logfile:备份生成的二进制日志文件
  • 数据库的·xtrabackup的备份和还原

    实战案例:利用xtrabackup完全,增量备份及还原

    未完待续

    MySQL备份和恢复[4]-xtrabackup备份工具

    标签:doc   文件组   number   服务   arc   http   文件   percona   ber   

    mysql数据库怎么备份数据库

    mysqlmp基本语法:

    mysqlmp -u username -p dbname table1 table2 ...-> BackupName.sql

    其中:

    dbname参数表示数据库的名称;

    table1和table2参数表示需要备份的表的名称,为空则整个数据库备份;

    BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件;

    使用root用户备份test数据库下的person表

    如何利用xtrabackup备份mysql数据库

    :wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/redhat/6/i386/percona-xtrabackup-2.2.9-5067.el6.i686.rpm

       64位:wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/redhat/6/x86_64/percona-xtrabackup-2.2.9-5067.el6.x86_64.rpm

       rpm -ivh percona-xtrabackup-2.2.9-5067.el6.i686.rpm

    使用:

       全备份:(目前公司只采用了全备份)

       innobackupex --user=root --password=123456 --socket=/tmp/mysqld.sock  --defaults-file=/usr/local/mysql/my.cnf /data/mysql_bacp/         #备份数据库

       注意:

           /data/mysql_bacp/:备份目录

           在/data/mysql_bacp/目录下面会生成一个以时间命名的目录

    技术分享

           所有的数据库数据都被备份在这个目录下,同时又会生成几个新的文件:

    技术分享

           backup-my.cnf: 备份命令用到的配置选项信息

           xtrabackup_binlog_info: 备份时所用的二进制日志信息(记录了在备份时,正在用的二进制日志文件及pos值,这个在数据恢复时用)

           xtrabackup_checkpoints: 备份的信息(备份类型(完全或增量)、备份状态(是否已经为prepared状态)、LSN(日志序列号)范围信息),可以查看此备份是全备份还是增量备份

           xtrabackup_info: xtrabackup相关的信息

          

       使用全备份恢复到备份时的数据:

           /etc/init.d/mysqld stop             #在数据恢复时一定要记得把mysql服务停掉

           mv /opt/mysql/data/* /tmp/linshi/             #把数据库数据目录下的所有数据临时mv到一个临时目录里

           innobackupex --apply-log 2015-06-09_13-02-30/      #找到最后一个全备份目录(全备份准备prepared) 意义:将未提交的事务进行回滚,将已经提交但还没有同步的数据进行同步

           innobackupex --copy-back --defaults-file=/usr/local/mysql/my.cnf 2015-06-09_13-02-30/ #恢复数据

           chown -R mysql.mysql /opt/mysql/data/         #修改数据权限(默认xtrabackup恢复数据后,所有数据的权限都是root)

           /etc/init.d/mysqld start                      #启动mysql服务

       

       使用二进制日志文件恢复备份之后的数据:

           找到最后一个全备份目录:

           cd /data/mysql_bacp/2015-06-09_13-02-30/

      cat xtrabackup_binlog_info  mysql-binlog.000052120

           mysql-binlog.000052和120:做全备份时正在使用的二进制日志文件和此时的pos值

           从这个二进制日志文件和pos值开始恢复之后的数据

           参考:http://732233048.blog.51cto.com/9323668/1633051

    本文出自 “见” 博客,请务必保留此出处http://732233048.blog.51cto.com/9323668/1660146

    xtrabackup备份数据库

    标签:mysql xtrabackup

    如何利用xtrabackup备份mysql数据库

    :wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/redhat/6/i386/percona-xtrabackup-2.2.9-5067.el6.i686.rpm

       64位:wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/redhat/6/x86_64/percona-xtrabackup-2.2.9-5067.el6.x86_64.rpm

       rpm -ivh percona-xtrabackup-2.2.9-5067.el6.i686.rpm

    使用:

       全备份:(目前公司只采用了全备份)

       innobackupex --user=root --password=123456 --socket=/tmp/mysqld.sock  --defaults-file=/usr/local/mysql/my.cnf /data/mysql_bacp/         #备份数据库

       注意:

           /data/mysql_bacp/:备份目录

           在/data/mysql_bacp/目录下面会生成一个以时间命名的目录

    技术分享

           所有的数据库数据都被备份在这个目录下,同时又会生成几个新的文件:

    技术分享

           backup-my.cnf: 备份命令用到的配置选项信息

           xtrabackup_binlog_info: 备份时所用的二进制日志信息(记录了在备份时,正在用的二进制日志文件及pos值,这个在数据恢复时用)

           xtrabackup_checkpoints: 备份的信息(备份类型(完全或增量)、备份状态(是否已经为prepared状态)、LSN(日志序列号)范围信息),可以查看此备份是全备份还是增量备份

           xtrabackup_info: xtrabackup相关的信息

          

       使用全备份恢复到备份时的数据:

           /etc/init.d/mysqld stop             #在数据恢复时一定要记得把mysql服务停掉

           mv /opt/mysql/data/* /tmp/linshi/             #把数据库数据目录下的所有数据临时mv到一个临时目录里

           innobackupex --apply-log 2015-06-09_13-02-30/      #找到最后一个全备份目录(全备份准备prepared) 意义:将未提交的事务进行回滚,将已经提交但还没有同步的数据进行同步

           innobackupex --copy-back --defaults-file=/usr/local/mysql/my.cnf 2015-06-09_13-02-30/ #恢复数据

           chown -R mysql.mysql /opt/mysql/data/         #修改数据权限(默认xtrabackup恢复数据后,所有数据的权限都是root)

           /etc/init.d/mysqld start                      #启动mysql服务

       

       使用二进制日志文件恢复备份之后的数据:

           找到最后一个全备份目录:

           cd /data/mysql_bacp/2015-06-09_13-02-30/

      cat xtrabackup_binlog_info  mysql-binlog.000052120

           mysql-binlog.000052和120:做全备份时正在使用的二进制日志文件和此时的pos值

           从这个二进制日志文件和pos值开始恢复之后的数据

           参考:http://732233048.blog.51cto.com/9323668/1633051

    本文出自 “见” 博客,请务必保留此出处http://732233048.blog.51cto.com/9323668/1660146

    xtrabackup备份数据库

    标签:mysql xtrabackup

    xtrabackup能同时备份myisam和innodb吗

    一、Xtrabackup介绍   A、Xtrabackup是什么   Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。   Xtrabackup有两个主要的工具:xtrabackup、innobackupex   1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表   2、innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的f、/etc/mysql/myf、~/f,并读取配置文件中的[mysqld]和[xtrabackup]配置段。[mysqld]中只需要指定datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size6个参数即可让xtrabackup正常工作。 --defaults-extra-file=# 如果使用了该参数,在读取了全局配置文件之后,会再读取这里指定的配置文件 --target-dir=name 备份文件的存放目录路径 --backup 实施备份到target-dir --prepare 实施对备份文件进行恢复前的准备(生成InnoDB log file) --print-param 打印备份或恢复时需要的参数 --use-memory=# 该参数在 prepare 的时候使用,控制prepare时innodb实例使用的内存量 --suspend-at-end 在target-dir目录下产生一个xtrabackup_suspended文件,将xtrabackup进程挂起,不停地将数据文件的变化同步到备份文件,直到用户手工删除xtrabackup_suspended文件 --throttle=# 每秒IO次数,*backup时使用的I/O操作量,使备份对数据库正常业务的影响最小化 --log-stream 该参数在backup的时候使用,将xtrabackup_logfile的内容输出到标准输出,使用该参数时会自动使用suspend-at-end参数,innobackupex脚本的stream 模式会使用该参数。 --incremental-lsn=name 增量备份时只拷贝LSN比该参数指定值新的ibd pages,前次备份到了哪个LSN可以看前次备份集的xtrabackup_checkpoints文件 --incremental-basedir=name 该参数在backup的时候使用,备份比该参数指定位置的备份集新的idb pages --incremental-dir=name 该参数在prepare的时候使用,指定prepare时产生的f --backup --target-dir=/data0/backup/mysql/ cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/   注意:xtrabackup只备份数据文件,并不备份数据表结构(f --prepare --target-dir=/data0/backup/mysql/   从备份目录复制对应数据库表结构到默认的数据目录 BASH cp -r /data0/backup/mysql/testinnodb/ /data0/mysql/data/   删除默认数据目录中对应的数据文件并复制备份的数据文件到默认数据目录 BASH rm /data0/backup/mysql/ib* cp /data0/backup/mysql/ib* /data0/mysql/data/   修改数据目录权限 BASH chown -R mysql:mysql /data0/mysql/data   重启MySQL BASH /data0/mysql/mysql restart   b)增量备份   增量备份优点:   1、数据库太大没有足够的空间全量备份,作增量备份有效节省空间,且效率高。   2、支持热备份。备份过程不锁表,不受时间*,不影响用户使用。   3、每日备份只产生少量数据,远程备份传输更方便。同时节省空间。   4、备份恢复基于文件操作,降低直接对数据库操作风险。   5、备份效率更高,恢复效率更高。   这个我研究N久没成功,原因暂时还没找到。我测试环境的Mysql版本是5f --backup --target-dir=/data0/backup/mysql/base #生成的备份数据文件 ls /data0/backup/mysql/base/ ibdata1 xtrabackup_checkpoints xtrabackup_logfile #备份数据库表结构 cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/   以此全量备份为基础进行增量备份 BASH 复制代码 代码如下: #建立备份目录 mkdir -p /data0/backup/mysql/delta #建立一个增量备份 xtrabackup_55 --defaults-file=/data0/mysql/myf --prepare --target-dir=/data0/backup/mysql/base xtrabackup_55 --defaults-file=/data0/mysql/myf里datadir这个参数是必须要指定的,xtrabackup_55是根据它去定位innodb数据文件的位置。   innobackupex语法 BASH innobackup [--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME] [--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp] [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar] [--defaults-file=MYf /data0/backup/mysql 2>/tmp/mysqlbackupf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackupf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackupf --no-lock --stream=tar /data0/backup/mysql/ssh root@192f --no-lock /data0/backup/mysql   从备份目录拷贝数据、索引、日志到myf --no-lock /data0/backup/mysql   修改数据目录权限 BASH chown -R mysql:mysql /data0/mysql/data   重启MySQL BASH /data0/mysql/mysql restart   五、参考文档      /Linux/2011-05/35410/u4/122567/showart_2537465.html

    xtrabackup能同时备份myisam和innodb吗

    一、Xtrabackup介绍   A、Xtrabackup是什么   Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。   Xtrabackup有两个主要的工具:xtrabackup、innobackupex   1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表   2、innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的f、/etc/mysql/myf、~/f,并读取配置文件中的[mysqld]和[xtrabackup]配置段。[mysqld]中只需要指定datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size6个参数即可让xtrabackup正常工作。 --defaults-extra-file=# 如果使用了该参数,在读取了全局配置文件之后,会再读取这里指定的配置文件 --target-dir=name 备份文件的存放目录路径 --backup 实施备份到target-dir --prepare 实施对备份文件进行恢复前的准备(生成InnoDB log file) --print-param 打印备份或恢复时需要的参数 --use-memory=# 该参数在 prepare 的时候使用,控制prepare时innodb实例使用的内存量 --suspend-at-end 在target-dir目录下产生一个xtrabackup_suspended文件,将xtrabackup进程挂起,不停地将数据文件的变化同步到备份文件,直到用户手工删除xtrabackup_suspended文件 --throttle=# 每秒IO次数,*backup时使用的I/O操作量,使备份对数据库正常业务的影响最小化 --log-stream 该参数在backup的时候使用,将xtrabackup_logfile的内容输出到标准输出,使用该参数时会自动使用suspend-at-end参数,innobackupex脚本的stream 模式会使用该参数。 --incremental-lsn=name 增量备份时只拷贝LSN比该参数指定值新的ibd pages,前次备份到了哪个LSN可以看前次备份集的xtrabackup_checkpoints文件 --incremental-basedir=name 该参数在backup的时候使用,备份比该参数指定位置的备份集新的idb pages --incremental-dir=name 该参数在prepare的时候使用,指定prepare时产生的f --backup --target-dir=/data0/backup/mysql/ cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/   注意:xtrabackup只备份数据文件,并不备份数据表结构(f --prepare --target-dir=/data0/backup/mysql/   从备份目录复制对应数据库表结构到默认的数据目录 BASH cp -r /data0/backup/mysql/testinnodb/ /data0/mysql/data/   删除默认数据目录中对应的数据文件并复制备份的数据文件到默认数据目录 BASH rm /data0/backup/mysql/ib* cp /data0/backup/mysql/ib* /data0/mysql/data/   修改数据目录权限 BASH chown -R mysql:mysql /data0/mysql/data   重启MySQL BASH /data0/mysql/mysql restart   b)增量备份   增量备份优点:   1、数据库太大没有足够的空间全量备份,作增量备份有效节省空间,且效率高。   2、支持热备份。备份过程不锁表,不受时间*,不影响用户使用。   3、每日备份只产生少量数据,远程备份传输更方便。同时节省空间。   4、备份恢复基于文件操作,降低直接对数据库操作风险。   5、备份效率更高,恢复效率更高。   这个我研究N久没成功,原因暂时还没找到。我测试环境的Mysql版本是5f --backup --target-dir=/data0/backup/mysql/base #生成的备份数据文件 ls /data0/backup/mysql/base/ ibdata1 xtrabackup_checkpoints xtrabackup_logfile #备份数据库表结构 cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/   以此全量备份为基础进行增量备份 BASH 复制代码 代码如下: #建立备份目录 mkdir -p /data0/backup/mysql/delta #建立一个增量备份 xtrabackup_55 --defaults-file=/data0/mysql/myf --prepare --target-dir=/data0/backup/mysql/base xtrabackup_55 --defaults-file=/data0/mysql/myf里datadir这个参数是必须要指定的,xtrabackup_55是根据它去定位innodb数据文件的位置。   innobackupex语法 BASH innobackup [--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME] [--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp] [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar] [--defaults-file=MYf /data0/backup/mysql 2>/tmp/mysqlbackupf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackupf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackupf --no-lock --stream=tar /data0/backup/mysql/ssh root@192f --no-lock /data0/backup/mysql   从备份目录拷贝数据、索引、日志到myf --no-lock /data0/backup/mysql   修改数据目录权限 BASH chown -R mysql:mysql /data0/mysql/data   重启MySQL BASH /data0/mysql/mysql restart   五、参考文档      /Linux/2011-05/35410/u4/122567/showart_2537465.html

    windows下Mysql 怎样备份和还原?

    双击MySQL Tools for 5.0MySQLAdministrator.exe;

    点击Backup;

    点击NewProject ;

    选择中要备份的数据库,按标有>按钮;

    接着点击ExecutBackup Now;

    还原,选中倒数第二个Restore;

    点击OpenBackup File;

    点击打开按钮返回;

    点击StartRestore 按钮。

    windows下Mysql 怎样备份和还原?

    双击MySQL Tools for 5.0MySQLAdministrator.exe;

    点击Backup;

    点击NewProject ;

    选择中要备份的数据库,按标有>按钮;

    接着点击ExecutBackup Now;

    还原,选中倒数第二个Restore;

    点击OpenBackup File;

    点击打开按钮返回;

    点击StartRestore 按钮。

    MySQL使用xtrabackup备份时报错

    MySQL使用xtrabackup备份时报错:

    2015-01-29 21:28:10 7f6024ceb740 InnoDB: Operating system error number 24 in a file operation.

    InnoDB: Error number 24 means 'Too many open files'.

    【网友提供的解决方案】:

    1)shell> ulimit -n 65535

    2)修改my.cnf配置文件的参数

    innodb_open_files = 10240

    open-files-limit = 10240

    【我的最终解决方案】:

    => 修改ulimit

    ulimit -n 65535

    使用 ulimit -n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535,-S指soft,-H指hard)

    有如下三种修改方式:

    1.在/etc/rc.local 中增加一行 ulimit -SHn 65535

    2.在/etc/profile 中增加一行 ulimit -SHn 65535

    3.在/etc/security/limits.conf最后增加如下两行记录

    => 修改SELINUX

    以上修改后仍旧没有解决问题,最终检查了selinux,经尝试,成功解决问题!

    1

    vi /etc/selinux/config

    将SELINUX=enforcing 改为 SELINUX=permissive

    mysql如何快速备份

    来源:知乎

    河南-老宋(志强)

    问题描述的不是非常的清晰
    使用mysqlmp备份时一般会会加上--single-transaction参数,这里假设你是加了这个参数。
    一 加速备份
    1 加了single-transaction参数 备份时 需要先flush table with read lock 这个过程中会有一个锁表的过程,如果有事务或语句正在执行,没有结束,那么备份进程会一直等待,并且阻塞别的事务,那么也会影响业务。所以要先确认备份的时候没有大的事务在运行。
    具体 single-transaction的加锁可以参考 我的博客:mysqlmp备份时加single-transaction会不会加锁
    2 mysqlmp是单进程的,没有办法并行,但现在机器的瓶颈多是出现在IO方面,可以使用更了的IO设备加快速度
    3 mysqlmp时如果空间够的话,不要边压缩边备份
    二 加速恢复
    1 关闭binlog:不写入Binlog会大大的加快数据导入的速度
    2 innodb_flush_log_at_trx_commit=0
    3 更好的配置
    建议:
    一 如果非要使用逻辑备份,可以考虑mysqlmper, mysqlpump(5.7)这两个工具去备份,这两个在备份的时候支持并行操作,mysqlmper还可以对单表进行恢复,在只需要恢复单表的情况下,恢复速度会大大加快
    二 使用物理备份 xtrabackup (open source),MEB(oracle提供,收费): 他们的备份原理是基于mysql crash recover, 备份速度 是和逻辑备份的相差不太大。但是恢复速度却有很大的提升。
    逻辑备份 备出来的是sql语句文件,恢复时需要一条一条的执行sql,所以恢复很慢。
    而物理备份和还原的速度 相当于直接copy文件,所以恢复的时候性能有很大的提升
    并且这两个软件还支持并行,效果更好。
    逻辑备份最大的优点是 备份好的文件经压缩后占用空间较小,最大缺点恢复太慢
    物理备份可以很快的恢复,但是备份好的文件压缩后占用空间比逻辑备份要大。
    使用云,你做为用户可以不用考虑这些事情。

    附:xtrabackup的并行参数
    Parallel local backups
    Parallel compression
    Parallel encryption
    Parallel apply-log

    Gary Chen

    《MySQL DBA*之道》作者。从事数据库领域10多年。
    1.一般来说,你只有靠更好的硬件. 软件没有大的变动的情况下不可能突破硬件瓶颈;
    2. mysqlmp默认的导出选项已经可以了,单进程的工具不要期望太多,TommyChiu介绍的工具可试试.;
    3. 导出的时候观察下系统,如果是cpu瓶颈,你基本无解.如果是swap问题,看是否是因为内存不够;
    4. 恢复的时候主要是一个参数:innodb_flush_log_at_trx_commit=2

    TommyChiu
    mk-parallel-mp 试试

    mysql如何快速备份

    来源:知乎

    河南-老宋(志强)

    问题描述的不是非常的清晰
    使用mysqlmp备份时一般会会加上--single-transaction参数,这里假设你是加了这个参数。
    一 加速备份
    1 加了single-transaction参数 备份时 需要先flush table with read lock 这个过程中会有一个锁表的过程,如果有事务或语句正在执行,没有结束,那么备份进程会一直等待,并且阻塞别的事务,那么也会影响业务。所以要先确认备份的时候没有大的事务在运行。
    具体 single-transaction的加锁可以参考 我的博客:mysqlmp备份时加single-transaction会不会加锁
    2 mysqlmp是单进程的,没有办法并行,但现在机器的瓶颈多是出现在IO方面,可以使用更了的IO设备加快速度
    3 mysqlmp时如果空间够的话,不要边压缩边备份
    二 加速恢复
    1 关闭binlog:不写入Binlog会大大的加快数据导入的速度
    2 innodb_flush_log_at_trx_commit=0
    3 更好的配置
    建议:
    一 如果非要使用逻辑备份,可以考虑mysqlmper, mysqlpump(5.7)这两个工具去备份,这两个在备份的时候支持并行操作,mysqlmper还可以对单表进行恢复,在只需要恢复单表的情况下,恢复速度会大大加快
    二 使用物理备份 xtrabackup (open source),MEB(oracle提供,收费): 他们的备份原理是基于mysql crash recover, 备份速度 是和逻辑备份的相差不太大。但是恢复速度却有很大的提升。
    逻辑备份 备出来的是sql语句文件,恢复时需要一条一条的执行sql,所以恢复很慢。
    而物理备份和还原的速度 相当于直接copy文件,所以恢复的时候性能有很大的提升
    并且这两个软件还支持并行,效果更好。
    逻辑备份最大的优点是 备份好的文件经压缩后占用空间较小,最大缺点恢复太慢
    物理备份可以很快的恢复,但是备份好的文件压缩后占用空间比逻辑备份要大。
    使用云,你做为用户可以不用考虑这些事情。

    附:xtrabackup的并行参数
    Parallel local backups
    Parallel compression
    Parallel encryption
    Parallel apply-log

    Gary Chen

    《MySQL DBA*之道》作者。从事数据库领域10多年。
    1.一般来说,你只有靠更好的硬件. 软件没有大的变动的情况下不可能突破硬件瓶颈;
    2. mysqlmp默认的导出选项已经可以了,单进程的工具不要期望太多,TommyChiu介绍的工具可试试.;
    3. 导出的时候观察下系统,如果是cpu瓶颈,你基本无解.如果是swap问题,看是否是因为内存不够;
    4. 恢复的时候主要是一个参数:innodb_flush_log_at_trx_commit=2

    TommyChiu
    mk-parallel-mp 试试

    显示全文