本节介绍如何备份和恢复MySQL集群,包括完整和部分恢复操作示例。注意备份集群
而且恢复集群
命令使用NDB
表;表使用其他MySQL存储引擎(如InnoDB
或MyISAM
)被忽略。
出于举例的目的,我们使用一个名为mycluster
这里可以看到其进程和状态:
MCM >显示状态+--------+----------+----------+---------+-----------+-----------+ | NodeId | | | |主机状态过程节点组|包 | +--------+----------+----------+---------+-----------+-----------+ | 49 | ndb_mgmd | tonfisk运行| | | mypackage | | 1 | ndbd | tonfisk | | 0 |运行mypackage | | 2 | ndbd | tonfisk | | 0 |运行mypackage | | 50 | mysqld | tonfisk运行| | | mypackage | | 51 | mysqld | tonfisk运行| | | mypackage | | | 52 ndbapi | * tonfisk添加| | | | | | 53 ndbapi |* tonfisk |添加 | | | +--------+----------+----------+---------+-----------+-----------+ 7行集(0.08秒)
您可以查看是否有任何现有的备份mycluster
使用列表的备份
命令,如下所示:
MCM >列表备份mycluster+----------+--------+---------+---------------------+---------+ | BackupId | NodeId |评论| |主机时间戳 | +----------+--------+---------+---------------------+---------+ | 1 | 1 | tonfisk | 2012-12-04 12:03:52 | | | 1 | 2 | tonfisk | 2012-12-04 12:03:52 | | | 2 | 1 | tonfisk | 2012-12-04 12:04:15 | | | 2 | 2 | tonfisk | 2012-12-04 12:04:15 | | | 3 | 1 | tonfisk | 2012-12-04 12:17:41 | | | 3 | 2 | tonfisk | 2012-12-04 12:17:41 | |+----------+--------+---------+---------------------+---------+ 6行集(0.12秒)
简单的备份。要创建备份,请使用备份集群
命令,以集群的名称作为参数,类似于这里显示的:
MCM >备份集群mycluster;+-------------------------------+ | 命令的结果 | +-------------------------------+ | 备份成功完成 | +-------------------------------+ 1行集(3.31秒)
备份集群
只要求作为参数备份的集群名称;有关此命令支持的其他选项的信息,请参见第4.7.2节,“The备份集群
命令”.的新备份mycluster
创建一个唯一的ID,检查输出列表的备份
,如下所示(其中新备份文件对应的行以强调的文本表示):
MCM >列表备份mycluster+----------+--------+---------+---------------------+---------+ | BackupId | NodeId |评论| |主机时间戳 | +----------+--------+---------+---------------------+---------+ | 1 | 1 | tonfisk | 2012-12-04 12:03:52 | | | 1 | 2 | tonfisk | 2012-12-04 12:03:52 | | | 2 | 1 | tonfisk | 2012-12-04 12:04:15 | | | 2 | 2 | tonfisk | 2012-12-04 12:04:15 | | | 3 | 1 | tonfisk | 2012-12-04 12:17:41 | | | 3 | 2 | tonfisk | 2012-12-04 12:17:41 | || 4 | 1 | tonfisk | 2012-12-12 14:24:35 | | | 4 | 2 | tonfisk | 2012-12-12 14:24:35 | |+----------+--------+---------+---------------------+---------+ 8行集(0.04秒)
如果您试图创建一个MySQL集群的备份,其中每个节点组中至少没有一个数据节点在运行,备份集群
错误时失败集群内进程停止,无法进行备份操作cluster_name
.
简单的完全恢复。要使用给定ID从备份执行完整的MySQL集群恢复,请遵循下面列出的步骤:
确定要使用的备份。
在本例中,我们使用为创建的ID为4的备份
mycluster
本节前情提要。清除MySQL集群数据。
最简单的方法是停止,然后执行集群的初始启动,如图所示,使用
mycluster
:停止集群mycluster;+------------------------------+ | 命令的结果 | +------------------------------+ | 集群停止成功 | +------------------------------+ 1行组(15.24秒)mcm >开始集群——初始mycluster;+------------------------------+ | 命令的结果 | +------------------------------+ | 集群开始成功 | +------------------------------+ 1行集(34.47秒)
恢复备份。
这是使用
恢复集群
命令,该命令需要备份ID和集群名称作为参数。因此,您可以将备份4恢复到mycluster
如下图:MCM >恢复集群——备份id=4 mycluster;+--------------------------------+ | 命令的结果 | +--------------------------------+ | 恢复成功完成 | +--------------------------------+ 1行集(16.78秒)
部分恢复-缺失图像。可以使用MySQL集群管理器执行MySQL集群的部分恢复,也就是说,从一个或多个数据节点的备份映像不可用的备份中恢复。如果我们希望恢复,这是必需的mycluster
的输出中可以看到,由于此备份的映像仅对节点1可用,因此将列表的备份
在罗马数字客户端(强调文字):
MCM >列表备份mycluster+----------+--------+---------+---------------------+---------+ | BackupId | NodeId |评论| |主机时间戳 | +----------+--------+---------+---------------------+---------+ | 1 | 1 | tonfisk | 2012-12-04 12:03:52 | | | 1 | 2 | tonfisk | 2012-12-04 12:03:52 | | | 2 | 1 | tonfisk | 2012-12-04 12:04:15 | | | 2 | 2 | tonfisk | 2012-12-04 12:04:15 | | | 3 | 1 | tonfisk | 2012-12-04 12:17:41 | | | 3 | 2 | tonfisk | 2012-12-04 12:17:41 | | | 4 | 1 | tonfisk | 2012-12-12 14:24:35 | | | 4 | 2 |Tonfisk | 2012-12-12 14:24:35 | | | 5 | 1 | Tonfisk | 2012-12-12 14:31:31 | | | 5 | 2 | Tonfisk | 2012-12-12 14:31:31 | || 6 | 1 | tonfisk | 2012-12-12 14:32:09 | |+----------+--------+---------+---------------------+---------+ 11行集(0.08秒)
要仅对具有映像的节点(在本例中仅为节点1)执行恢复,可以使用——skip-nodeid
选项。恢复集群
命令。此选项将导致在执行恢复时跳过一个或多个节点。假设mycluster
已经清除了数据(如本节前面所述),我们可以执行跳过节点2的恢复,如下所示:
MCM >恢复集群——备份id=6——skip-nodeid=2 mycluster;+--------------------------------+ | 命令的结果 | +--------------------------------+ | 恢复成功完成 | +--------------------------------+ 1行集(17.06秒)
因为我们从恢复过程中排除了节点2,所以没有数据分发给它。为了使MySQL集群数据在部分恢复后被分发到任何被排除或跳过的节点,有必要通过执行命令手动重新分发数据修改在线表…重组分区
声明mysql每个客户端NDB
表。获取的列表NDB
表格来自mysql客户端,可以使用多个显示表
语句或查询,例如:
选择concat (" table_schema, '。', table_name) from information_schema。WHERE ENGINE='ndbcluster';
您可以使用刚才显示的更详细的查询版本来生成必要的SQL语句,比如这里使用的查询:
mysql> SELECT -> CONCAT('ALTER ONLINE TABLE ', TABLE_SCHEMA, -> ' '。", TABLE_NAME, ' '重组分区;')-> AS语句-> FROM INFORMATION_SCHEMA。table -> WHERE ENGINE='ndbcluster';+--------------------------------------------------------------------------+ | 声明 | +--------------------------------------------------------------------------+ | 改变网络的mysql表。' ndb_apply_status '修改mysql的联机表。' ndb_index_stat_head '修改mysql的联机表。' ndb_index_stat_sample '修改联机表“db1”。' n1 '重组分区;修改联机表“db1”。' n2 '重组分区;修改联机表“db1”。' n3 '重组分区; | | ALTER ONLINE TABLE `test`.`n1` REORGANIZE PARTITION; | | ALTER ONLINE TABLE `test`.`n2` REORGANIZE PARTITION; | | ALTER ONLINE TABLE `test`.`n3` REORGANIZE PARTITION; | | ALTER ONLINE TABLE `test`.`n4` REORGANIZE PARTITION; | +--------------------------------------------------------------------------+ 10 rows in set (0.09 sec)
新增部分恢复数据节点。在备份之后,当新的数据节点添加到MySQL集群中时,也可以执行部分恢复。在这种情况下,您可以使用——skip-nodeid
当执行恢复集群
命令。考虑MySQL集群的命名mycluster
如下所示显示状态
命令:
MCM >显示状态+--------+----------+----------+---------+-----------+-----------+ | NodeId | | | |主机状态过程节点组|包 | +--------+----------+----------+---------+-----------+-----------+ | 49 | ndb_mgmd | tonfisk |停止| | mypackage | | 1 | ndbd | tonfisk | 0 | |停止mypackage | | 2 | ndbd | tonfisk | 0 | |停止mypackage | | 50 | mysqld | tonfisk |停止| | mypackage | | 51 | mysqld | tonfisk |停止| | mypackage | | | 52 ndbapi | * tonfisk添加| | | | | | 53 ndbapi |* tonfisk |添加 | | | +--------+----------+----------+---------+-----------+-----------+ 7行集(0.03秒)
的输出列表的备份
显示此集群的可用备份映像:
MCM >列表备份mycluster+----------+--------+---------+---------------------+---------+ | BackupId | NodeId |评论| |主机时间戳 | +----------+--------+---------+---------------------+---------+ | 1 | 1 | tonfisk | 2012-12-04 12:03:52 | | | 1 | 2 | tonfisk | 2012-12-04 12:03:52 | | | 2 | 1 | tonfisk | 2012-12-04 12:04:15 | | | 2 | 2 | tonfisk | 2012-12-04 12:04:15 | | | 3 | 1 | tonfisk | 2012-12-04 12:17:41 | | | 3 | 2 | tonfisk | 2012-12-04 12:17:41 | | | 4 | 1 | tonfisk | 2012-12-12 14:24:35 | | | 4 | 2 |tonfisk | 2012-12-12 14:24:35 | | +----------+--------+---------+---------------------+---------+ 8行集(0.06秒)
现在假设,在稍后的时间点,已经添加了2个数据节点mycluster
使用一个添加过程
命令。的显示状态
输出mycluster
现在看起来是这样的:
MCM >显示状态+--------+----------+----------+---------+-----------+-----------+ | NodeId | | | |主机状态过程节点组|包 | +--------+----------+----------+---------+-----------+-----------+ | 49 | ndb_mgmd | tonfisk运行| | | mypackage | | 1 | ndbd | tonfisk | | 0 |运行mypackage | | 2 | ndbd | tonfisk | | 0 |运行mypackage | | 50 | mysqld | tonfisk运行| | | mypackage | | 51 | mysqld | tonfisk运行| | | mypackage | | | 52 ndbapi | * tonfisk添加| | | | | | 53 ndbapi |* tonfisk添加| | | | | 3 | ndbd | tonfisk | | 1 |运行mypackage | | 4 | ndbd | tonfisk | | 1 |运行mypackage | +--------+----------+----------+---------+-----------+-----------+ 9行集(0.01秒)
由于节点3和4不包括在备份中,所以在执行恢复时需要排除它们。你可以引起恢复集群
属性指定以逗号分隔的节点id列表,从而跳过多个数据节点——skip-nodeid
选择。假设我们刚刚清理完毕mycluster
的MySQL集群数据罗马数字客户端命令停止集群
而且启动集群
——初始
如本节前面所述;然后我们可以恢复mycluster
(现在有4个编号为1、2、3和4的数据节点)mycluster
只有2个编号为1和2)的数据节点,如下所示:
MCM >恢复集群——backupid=4——skip-nodeid=3,4 mycluster;+--------------------------------+ | 命令的结果 | +--------------------------------+ | 恢复成功完成 | +--------------------------------+ 1行集(17.61秒)
没有数据被分发到跳过的(新)节点;必须使用强制节点3和4包含在数据的重新分发中修改在线表…重组分区
如本节前面所述。