10bet网址
MySQL Cluster Manager 1.3用户手册
相关的文档10bet官方网站 下载本手册

3.6.2使用MySQL Cluster Manager进行MySQL基本集群备份与恢复

本节介绍如何备份和恢复MySQL集群,包括完整和部分恢复操作示例。注意备份集群而且恢复集群命令使用NDB表;表使用其他MySQL存储引擎(如InnoDBMyISAM)被忽略。

出于举例的目的,我们使用一个名为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集群恢复,请遵循下面列出的步骤:

  1. 确定要使用的备份。

    在本例中,我们使用为创建的ID为4的备份mycluster本节前情提要。

  2. 清除MySQL集群数据。

    最简单的方法是停止,然后执行集群的初始启动,如图所示,使用mycluster

    停止集群mycluster;+------------------------------+ | 命令的结果  | +------------------------------+ | 集群停止成功  | +------------------------------+ 1行组(15.24秒)mcm >开始集群——初始mycluster;+------------------------------+ | 命令的结果  | +------------------------------+ | 集群开始成功  | +------------------------------+ 1行集(34.47秒)
  3. 恢复备份。

    这是使用恢复集群命令,该命令需要备份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包含在数据的重新分发中修改在线表…重组分区如本节前面所述。