使用MySQL Enterprise Backup企业备份创建备份所需的准备工作,典型的备份-验证-还原周期以及使用MySQL企业备份的不同备份方案。它还包括示例命令和输出,向您展示如何在不同情况下使用 mysqlbackup客户端。
第一次备份之前
收集数据库信息
第一次备份特定的数据库服务器之前,请收集一些信息并将其用于做出一些计划决策,如下表所示。
表4.1备份数据库所需的信息
信息收集 |
在哪里找到它 |
如何使用 |
|---|---|---|
MySQL配置文件的路径 |
默认系统位置,硬编码应用程序默认位置,或来自mysqld启动脚本中的 --defaults-file选项。 |
这是使用 选项将数据库配置信息传送到mysqlbackup的首选方法 --defaults-file。当配置文件中提供了连接和数据布局信息时,您可以跳过下面列出的大多数其他选择。 |
MySQL端口 |
MySQL配置文件或mysqld 启动脚本。 |
用于在备份操作期间连接到数据库实例。通过mysqlbackup--port 选项指定。 如果可以从MySQL配置文件获得,则不需要。进行冷(脱机)备份时不需要使用备份,该备份可直接使用OS级文件权限在文件上运行。 --port |
MySQL数据目录的路径 |
MySQL配置文件或mysqld 启动脚本。 |
用于在备份操作期间从数据库实例检索文件,以及在还原操作期间将文件复制回到数据库实例。从数据库连接自动检索以进行热备份和热备份,并从MySQL配置文件获取以进行冷备份。 |
特权MySQL用户的ID和密码 |
您可以在安装自己的数据库的过程中记录下来,或者在备份您不拥有的数据库时从DBA那里获取。进行离线(冷)备份时不需要使用备份,该备份可直接使用OS级文件权限在文件上运行。对于冷备份,您以管理用户身份登录。 |
通过mysqlbackup的--password选项指定。如果存在不带密码参数的选项,则在终端上提示。 --password |
存储备份数据的路径 |
您选择这个。有关详细信息,请参见 第4.1.3节“指定备份数据的位置”。 |
默认情况下,该目录必须为空,以便 mysqlbackup将数据写入其中,以避免覆盖旧的备份或混淆来自不同备份的数据。--with-timestamp当在同一主目录下存储多组备份数据时,使用该 选项可自动创建具有唯一名称的子目录。 |
备份文件的所有者和权限信息(对于Linux,Unix和OS X系统) |
在MySQL数据目录中。 |
如果使用不同于umask原始文件的OS用户ID或不同的设置来执行备份,则可能需要在备份数据上运行诸如chown和 命令chmod。有关详细信息,请参见 附录B,MySQL企业备份的局限性。 |
InnoDB重做日志文件的大小 |
根据innodb_log_file_size 和 innodb_log_files_in_group 配置变量的值计算 。使用为该--incremental-with-redo-log-only 选项说明的技术 。 |
仅当您使用--incremental-with-redo-log-only 选项而不是 --incremental选项执行增量备份时才需要 。InnoDB重做日志的大小和重做数据的生成速率决定了您必须执行增量备份的频率。 |
重做数据生成的速率 |
根据InnoDB 逻辑序列号在不同时间点的值计算得出 。使用为该--incremental-with-redo-log-only 选项说明的技术 。 |
仅当您使用--incremental-with-redo-log-only 选项而不是 --incremental选项执行增量备份时才需要 。InnoDB重做日志的大小和重做数据的生成速率决定了您必须执行增量备份的频率。 |
将MySQL特权授予备份管理员
备份操作,mysqlbackup 命令使用--user和 --password选项提供的凭据连接到MySQL服务器。指定 user需要某些特权。您可以使用最少的特权集创建新用户,也可以使用诸如root之类的管理帐户。
与mysqlbackup连接到服务器的MySQL用户的最低特权 是:
RELOAD 在所有数据库和表上。
CREATE,INSERT, DROP,和UPDATE在桌子上mysql.backup_progress和 mysql.backup_history,也 SELECT和ALTER上 mysql.backup_history。
SUPER,以启用和禁用日志记录,并优化锁定,以最大程度地减少对数据库处理的破坏。
REPLICATION CLIENT,以检索与备份一起存储的 二进制日志位置。
要为mysqlbackup从本地主机连接的MySQL用户(在此示例中)设置这些特权,请从mysql客户端程序中发出类似以下的语句 :
GRANT RELOAD ON *.* TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, SELECT, ALTER, DROP, UPDATE ON mysql.backup_history TO 'mysqlbackup'@'localhost';
GRANT REPLICATION CLIENT ON *.* TO 'mysqlbackup'@'localhost';
GRANT SUPER ON *.* TO 'mysqlbackup'@'localhost';
使用可移植表空间(TTS)备份和还原InnoDB表需要以下附加特权 :
LOCK TABLES和SELECT备份表。CREATE用于恢复表。DROP如果由于某种原因还原失败,则删除表。FILE用于在服务器数据导向器外部还原外部表空间中的表。
要设置这些特权,请从mysql客户端程序发出如下语句:
GRANTLOCKTABLES,SELECT,CREATE,DROP,FILEON*.*TO'mysqlbackup'@'localhost';
指定备份数据的位置
所有与备份相关的操作都可以在保存备份数据的指定目录(本手册中称为备份目录)下创建新文件或引用现有文件。预先为此目录选择文件系统上具有足够存储空间的位置,甚至可以从其他服务器远程安装该位置。您--backup-dir可以使用许多mysqlbackup命令的选项来指定此目录的路径 。
一旦建立了具有自动作业的常规备份计划,最好将每个备份保留在主备份目录下带有时间戳的子目录中。要使 mysqlbackup自动创建这些子目录,请在--with-timestamp每次运行mysqlbackup时指定 选项。
对于一次性备份操作(例如,在克隆数据库以设置复制从属时),您可能每次都指定一个新目录,或者对于单文件备份,请指定--force覆盖旧备份文件的 选项。
典型的备份/验证/还原周期
为了说明创建和使用备份的基本步骤,下面的示例显示了如何执行完整备份,对其进行验证,然后将其还原到服务器。
备份整个MySQL实例
在下面的示例中,我们使用backup-to-image命令将整个MySQL实例备份到单个文件,该 命令显示在sample命令的末尾。我们使用--user和--host选项为数据库指定一些连接信息 (并使用该--password选项告诉MySQL服务器提示输入用户密码)。使用--backup-image选项指定单文件备份的位置和文件名,该 选项提供用于存储临时文件的空文件夹的位置 --backup-dir。
输出回显备份操作使用的所有参数,包括使用数据库连接自动检索的几个参数。该备份作业的唯一ID记录在mysqlbackup在MySQL实例内部创建的特殊表中 ,使您可以监视长时间运行的备份并查看有关先前备份的信息。最后的输出部分重复备份数据的位置,并提供您下次在刚刚进行的 完整备份上执行增量备份时可能使用的 LSN值 。
$ ./mysqlbackup --user=root --password --host=127.0.0.1 --backup-image=/home/admin/backups/my.mbi \
--backup-dir=/home/admin/backup-tmp backup-to-image
MySQL Enterprise Backup version 3.12.5 Linux-2.6.18-274.el5-i686 [2014/11/12]
Copyright (c) 2003, 2014, Oracle and/or its affiliates. All Rights Reserved.
mysqlbackup: INFO: Starting with following command line ...
./mysqlbackup --user=root --password --host=127.0.0.1
--backup-image=/home/admin/backups/my.mbi
--backup-dir=/home/admin/backup-tmp backup-to-image
mysqlbackup: INFO:
Enter password:
mysqlbackup: INFO: MySQL server version is '5.6.17-log'.
mysqlbackup: INFO: Got some server configuration information from running server.
IMPORTANT: Please check that mysqlbackup run completes successfully.
At the end of a successful 'backup-to-image' run mysqlbackup
prints "mysqlbackup completed OK!".
141204 12:54:55 mysqlbackup: INFO: MEB logfile created at /home/admin/backup-tmp/meta/MEB_2014-12-04.12-54-55_image_backup.log
--------------------------------------------------------------------
Server Repository Options:
--------------------------------------------------------------------
datadir = /var/lib/mysql/
innodb_data_home_dir =
innodb_data_file_path = ibdata1:12M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_files_in_group = 2
innodb_log_file_size = 50331648
innodb_page_size = 16384
innodb_checksum_algorithm = innodb
innodb_undo_directory = /var/lib/mysql/
innodb_undo_tablespaces = 0
innodb_undo_logs = 128
--------------------------------------------------------------------
Backup Config Options:
--------------------------------------------------------------------
datadir = /home/admin/backup-tmp/datadir
innodb_data_home_dir = /home/admin/backup-tmp/datadir
innodb_data_file_path = ibdata1:12M:autoextend
innodb_log_group_home_dir = /home/admin/backup-tmp/datadir
innodb_log_files_in_group = 2
innodb_log_file_size = 50331648
innodb_page_size = 16384
innodb_checksum_algorithm = innodb
innodb_undo_directory = /home/admin/backup-tmp/datadir
innodb_undo_tablespaces = 0
innodb_undo_logs = 128
Backup Image Path = /home/admin/backups/my.mbi
mysqlbackup: INFO: Unique generated backup id for this is 14177156956623554
mysqlbackup: INFO: Creating 14 buffers each of size 16777216.
141204 12:54:58 mysqlbackup: INFO: Full Image Backup operation starts with following threads
1 read-threads 6 process-threads 1 write-threads
141204 12:54:58 mysqlbackup: INFO: System tablespace file format is Antelope.
141204 12:54:58 mysqlbackup: INFO: Starting to copy all innodb files...
mysqlbackup: INFO: Copying meta file /home/admin/backup-tmp/backup-my.cnf.
mysqlbackup: INFO: Copying meta file /home/admin/backup-tmp/meta/backup_create.xml.
141204 12:54:58 mysqlbackup: INFO: Found checkpoint at lsn 1631766.
141204 12:54:58 mysqlbackup: INFO: Starting log scan from lsn 1631744.
141204 12:54:58 mysqlbackup: INFO: Copying log...
141204 12:54:58 mysqlbackup: INFO: Log copied, lsn 1631766.
141204 12:54:58 mysqlbackup: INFO: Copying /var/lib/mysql/ibdata1 (Antelope file format).
141204 12:54:59 mysqlbackup: INFO: Copying /var/lib/mysql/mysql/innodb_index_stats.ibd (Antelope file format).
141204 12:54:59 mysqlbackup: INFO: Copying /var/lib/mysql/mysql/innodb_table_stats.ibd (Antelope file format).
141204 12:54:59 mysqlbackup: INFO: Copying /var/lib/mysql/mysql/slave_master_info.ibd (Antelope file format).
141204 12:55:00 mysqlbackup: INFO: Copying /var/lib/mysql/mysql/slave_relay_log_info.ibd (Antelope file format).
141204 12:55:00 mysqlbackup: INFO: Copying /var/lib/mysql/mysql/slave_worker_info.ibd (Antelope file format).
141204 12:55:00 mysqlbackup: INFO: Copying /var/lib/mysql/test2/tb1.ibd (Antelope file format).
141204 12:55:00 mysqlbackup: INFO: Completing the copy of innodb files.
141204 12:55:00 mysqlbackup: INFO: Starting to copy Binlog files...
141204 12:55:01 mysqlbackup: INFO: Preparing to lock tables: Connected to mysqld server.
141204 12:55:01 mysqlbackup: INFO: Starting to lock all the tables...
141204 12:55:02 mysqlbackup: INFO: All tables are locked and flushed to disk
141204 12:55:02 mysqlbackup: INFO: Completed the copy of binlog files...
141204 12:55:02 mysqlbackup: INFO: Opening backup source directory '/var/lib/mysql/'
141204 12:55:02 mysqlbackup: INFO: Starting to backup all non-innodb files in
subdirectories of '/var/lib/mysql/'
141204 12:55:02 mysqlbackup: INFO: Adding database directory: datadir/mysql
141204 12:55:02 mysqlbackup: INFO: Adding database directory: datadir/performance_schema
141204 12:55:02 mysqlbackup: INFO: Completing the copy of all non-innodb files.
141204 12:55:02 mysqlbackup: INFO: Adding database directory: datadir/test
141204 12:55:02 mysqlbackup: INFO: Adding database directory: datadir/test2
141204 12:55:04 mysqlbackup: INFO: A copied database page was modified at 1631766.
(This is the highest lsn found on page)
Scanned log up to lsn 1631766.
Was able to parse the log up to lsn 1631766.
Maximum page number for a log record 0
141204 12:55:04 mysqlbackup: INFO: All tables unlocked
141204 12:55:04 mysqlbackup: INFO: All MySQL tables were locked for 2.057 seconds.
141204 12:55:04 mysqlbackup: INFO: Reading all global variables from the server.
141204 12:55:04 mysqlbackup: INFO: Completed reading of all global variables from the server.
141204 12:55:04 mysqlbackup: INFO: Creating server config files server-my.cnf and server-all.cnf in /home/admin/backup-tmp
mysqlbackup: INFO: Copying meta file /home/admin/backup-tmp/meta/backup_variables.txt.
mysqlbackup: INFO: Copying meta file /home/admin/backup-tmp/datadir/ibbackup_logfile.
mysqlbackup: INFO: Copying meta file /home/admin/backup-tmp/server-all.cnf.
mysqlbackup: INFO: Copying meta file /home/admin/backup-tmp/server-my.cnf.
mysqlbackup: INFO: Copying meta file /home/admin/backup-tmp/meta/backup_content.xml.
mysqlbackup: INFO: Copying meta file /home/admin/backup-tmp/meta/image_files.xml.
141204 12:55:08 mysqlbackup: INFO: Full Image Backup operation completed successfully.
141204 12:55:08 mysqlbackup: INFO: Backup image created successfully.
mysqlbackup: INFO: Image Path = /home/admin/backups/my.mbi
141204 12:55:08 mysqlbackup: INFO: MySQL binlog position: filename mysqld-bin.000004, position 120
-------------------------------------------------------------
Parameters Summary
-------------------------------------------------------------
Start LSN : 1631744
End LSN : 1631766
-------------------------------------------------------------
mysqlbackup completed OK!
验证备份
要验证备份是否成功,请在其他服务器上还原备份数据,然后在新数据目录上运行MySQL守护程序(mysqld)。然后,您可以执行SHOW语句以验证数据库和表结构,并可以执行查询以验证数据库的更多详细信息。
有关还原备份的基本步骤,请参见第4.2.3节“还原数据库”,有关更多详细说明,请参见第5章,还原或还原数据库。 在还原的数据上运行mysqld守护程序需要一个有效的配置文件,您可以使用mysqld命令的--defaults-file选项 指定该文件 。您可以重用已备份的MySQL实例的原始文件中的大多数设置,以及该文件中的设置,这些文件是在创建单映像备份时指定的临时目录中 创建的(请参阅 my.cnfbackup-my.cnf--backup-dir第4.2.1节“备份整个MySQL实例”)并包含mysqlbackup所需的一小部分参数。通过将上述两个文件串联成一个新的配置文件,然后在执行验证的服务器上使用该文件。编辑文件以确保datadir参数指向验证服务器上的正确位置。如果需要在验证服务器上使用其他连接设置,请编辑端口,套接字等的值。
恢复数据库
要将MySQL实例从备份还原到数据库服务器:
关闭数据库服务器。
删除服务器数据目录中的所有文件。同时删除由指定的目录下的所有文件
--innodb_data_home_dir,--innodb_log_group_home_dir以及--innodb_undo_directory选择的恢复,如果目录是从数据目录不同。例如,使用
copy-back-and-apply-log命令,该命令通过将原始备份更新为一致状态将其转换为准备好的备份,然后将表,索引,元数据和任何其他所需的文件复制到目标服务器上。有关可以为此操作指定的各种选项,请参见 第13.3节“恢复操作”。
在以下示例中,使用命令恢复 了在第4.2.1节“备份整个MySQL实例”中给出的示例中创建的单文件备份copy-back-and-apply-log。除了通常的连接参数外,还使用以下选项:
--defaults-file提供用于还原数据的配置。 如果曾经使用过,它必须是出现在mysqlbackup命令中的第一个选项。在大多数情况下,可以使用此选项向mysqlbackup提供要将 数据还原到的目标服务器的配置文件。但是,当备份的以下InnoDB设置与目标服务器上的设置不同时,在还原过程中将备份的值提供给mysqlbackup和mysqld非常重要 启动还原的服务器时(否则,还原可能会失败,或者之后启动还原的服务器时可能会出现问题):如果不确定备份的这些设置,它们将在
backup-my.cnf备份过程中存储在文件中-您可以在--backup-dir创建单映像备份时指定的临时目录中找到文件,也可以在备份目录中找到该文件。 可以通过使用extract命令解压缩备用映像来创建 。如果这些选项的值与目标服务器上的值不同,则将它们添加到要提供给mysqlbackup的配置文件中以及随后将用于启动服务器的配置文件;或者,您也可以将它们作为命令行选项提供给 mysqlbackup和 mysqld。对于一些上面列出的选项(即
innodb_data_file_path,innodb_log_file_size和innodb_log_files_in_group), mysqlbackup检查您提供给他们的价值观,以确保您将能够使用这些值之后启动目标服务器:它抛出一个错误,如果任何人不与备份的实际值匹配。如果未在配置文件或命令行中为mysqlbackup指定这些值,则会给出警告(在下面的示例中就是这种情况)。innodb_data_file_pathinnodb_log_file_sizeinnodb_log_files_in_groupinnodb_page_sizeinnodb_checksum_algorithm--datadir提供用于还原数据的数据目录的位置。您必须为任何还原操作指定此选项。--backup-image提供单文件备份的路径。--backup-dir提供一个空文件夹的位置来存储在还原过程中创建的一些临时文件。
$ ./mysqlbackup --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql \
--backup-image=/home/admin/backups/my.mbi --backup-dir=/home/admin/backup-tmp copy-back-and-apply-log
MySQL Enterprise Backup version 3.12.5 Linux-2.6.18-274.el5-i686 [2014/11/12]
Copyright (c) 2003, 2014, Oracle and/or its affiliates. All Rights Reserved.
mysqlbackup: INFO: Starting with following command line ...
./mysqlbackup --defaults-file=/etc/mysql/my.cnf
--datadir=/var/lib/mysql --backup-image=/home/admin/backups/my.mbi
--backup-dir=/home/admin/backup-tmp copy-back-and-apply-log
mysqlbackup: INFO:
IMPORTANT: Please check that mysqlbackup run completes successfully.
At the end of a successful 'copy-back-and-apply-log' run mysqlbackup
prints "mysqlbackup completed OK!".
mysqlbackup: INFO: Backup Image MEB version string: 3.12.5 [2014/11/12]
141204 13:10:39 mysqlbackup: INFO: MEB logfile created at /home/admin/backup-tmp/meta/MEB_2014-12-04.13-10-39_copy_back_img_to_datadir.log
--------------------------------------------------------------------
Server Repository Options:
--------------------------------------------------------------------
datadir = /var/lib/mysql
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:12M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_log_files_in_group = 2
innodb_log_file_size = 50331648
innodb_page_size = 16384
innodb_checksum_algorithm = innodb
--------------------------------------------------------------------
Backup Config Options:
--------------------------------------------------------------------
datadir = /home/admin/backup-tmp/datadir
innodb_data_home_dir = /home/admin/backup-tmp/datadir
innodb_data_file_path = ibdata1:12M:autoextend
innodb_log_group_home_dir = /home/admin/backup-tmp/datadir
innodb_log_files_in_group = 2
innodb_log_file_size = 50331648
innodb_page_size = 16384
innodb_checksum_algorithm = innodb
mysqlbackup: INFO: Creating 14 buffers each of size 16777216.
141204 13:10:39 mysqlbackup: INFO: Copy-back-and-apply-log operation starts with following threads
1 read-threads 6 process-threads 1 write-threads
141204 13:10:39 mysqlbackup: INFO: Copying database directory: meta
141204 13:10:39 mysqlbackup: INFO: Copying datadir/ibdata1.
141204 13:10:39 mysqlbackup: INFO: Copying datadir/mysql/innodb_index_stats.ibd.
141204 13:10:39 mysqlbackup: INFO: Copying datadir/mysql/innodb_table_stats.ibd.
141204 13:10:39 mysqlbackup: INFO: Copying datadir/mysql/slave_master_info.ibd.
141204 13:10:39 mysqlbackup: INFO: Copying datadir/mysql/slave_relay_log_info.ibd.
141204 13:10:39 mysqlbackup: INFO: Copying database directory: datadir/mysql
141204 13:10:39 mysqlbackup: INFO: Copying datadir/mysql/slave_worker_info.ibd.
141204 13:10:39 mysqlbackup: INFO: Copying datadir/test2/tb1.ibd.
141204 13:10:39 mysqlbackup: INFO: Copying database directory: datadir/performance_schema
141204 13:10:39 mysqlbackup: INFO: Copying database directory: datadir/test
141204 13:10:39 mysqlbackup: INFO: Copying database directory: datadir/test2
141204 13:10:40 mysqlbackup: INFO: Copying database directory: datadir/mysql
141204 13:10:41 mysqlbackup: INFO: Copying database directory: datadir/performance_schema
141204 13:10:42 mysqlbackup: INFO: Copying database directory: datadir/test
141204 13:10:42 mysqlbackup: INFO: Copying database directory: datadir/test2
141204 13:10:43 mysqlbackup: INFO: Total files as specified in image: 161
141204 13:10:43 mysqlbackup: INFO: Creating server config files server-my.cnf and server-all.cnf in /var/lib/mysql
141204 13:10:43 mysqlbackup: INFO: Copy-back operation completed successfully.
mysqlbackup: INFO: Source Image Path = /home/admin/backups/my.mbi
mysqlbackup: INFO: Creating 14 buffers each of size 65536.
141204 13:10:43 mysqlbackup: INFO: Apply-log operation starts with following threads
1 read-threads 1 process-threads
mysqlbackup: INFO: Using up to 100 MB of memory.
141204 13:10:43 mysqlbackup: INFO: ibbackup_logfile's creation parameters:
start lsn 1631744, end lsn 1631766,
start checkpoint 1631766.
InnoDB: Doing recovery: scanned up to log sequence number 1631766
mysqlbackup: INFO: InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percent: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
mysqlbackup: INFO: InnoDB: Setting log file size to 50331648
mysqlbackup: INFO: InnoDB: Setting log file size to 50331648
141204 13:10:44 mysqlbackup: INFO: We were able to parse ibbackup_logfile up to
lsn 1631766.
mysqlbackup: INFO: Last MySQL binlog file position 0 120, file name mysqld-bin.000004:120
141204 13:10:44 mysqlbackup: INFO: The first data file is '/var/lib/mysql/ibdata1'
and the new created log files are at '/var/lib/mysql'
141204 13:10:44 mysqlbackup: INFO: Apply-log operation completed successfully.
141204 13:10:44 mysqlbackup: INFO: Full Backup has been restored successfully.
mysqlbackup completed OK!
现在,从备份还原了原始数据库目录。根据启动还原服务器的方式,可能需要调整还原数据目录的所有权。例如,如果服务器将由用户启动mysql,请使用以下命令将数据目录的所有者属性及其下的文件更改为mysql用户,并将组属性更改为mysql组。
$ chown -R mysql:mysql /path/to/datadir
现在,您准备启动还原的数据库服务器。有关如何执行各种还原的更多讨论,请参见第5.2节“执行还原操作”。

