mysql 集群 备份_MySQL Cluster在线备份和恢复

备份方式

一般MySQL数据库都是用mysqldump命令进行数据备份,其生成的文件实际上是创建对象和导入对象的sql语句。

在MySQL Cluster集群上,可以在管理节点上使用start backup命令实现数据库的在线备份,在还原时可以使用ndb_restore命令来进行数据库的还原。

使用MySQL Cluster的start backup,可以生成以下三种格式的备份文件:

BACKUP-backup-id.node_id.ctl

ctl控制文件存储表定义以及其他对象的元数据(metadata)。

BACKUP-backup-id.node_id.data

data数据文件,保存的是表中的记录行,由于数据节点分片的原因,没有节点上文件的数据是不一致的。

BACKUP-backup-id.node_id.log

log日志文件保存已提交的事物记录。

上述文件中,backup-id是备份标识,node_id是数据节点的唯一编号。

备份命令

在ndb_mgm交互模式下,可以执行如下命令进行备份。

START BACKUP [backup_id] [wait_option] [snapshot_option]

wait_option:

WAIT {STARTED | COMPLETED} | NOWAIT

snapshot_option:

SNAPSHOTSTART | SNAPSHOTEND

命令后面带3个参数,在交互模式下都是可选的。其中backuop_id如果添加,需要保持唯一。wait_option是指在ndb_mgm交互模式下,执行命令后是否将命令控制权返回给用户。

wait_option: WAIT STARTED表示一旦备份开始,就把控制交给用户;NOTWAIT表示用户一执行命令,就把控制权返回给用户;WAIT COMPLETED表示需要等备份全部结束才把控制权交还给用户。默认的选项是WAIT COMPLETED。

snapshot_option: SNAPSHOTSTART表示备份文件的内容同开始备份时的数据库快照一致,SNAPSHOTEND表示备份文件的内容同备份结束时的数据库快照一致。SNAPSHOTEND是默认选项。

实际执行效果如下:

776bb498197971aaa4e306afe58e368b.png

200a3669887fb9802b25a779d355fdc2.png

从上图我们可以得出默认的backup_id是从1开始递增的,备份文件会放在datadir的BACKUP目录下,每一次备份都会子目录BACKUP-backup_id。因此备份转移可以通过打包压缩这个目录然后转移到备份服务器。

还原测试

单表还原

首先我在数据库删除一个测试表,然后通过ndb_restore命令来对数据进行还原。

e26969bb84a9ee5c0f3ec77b0abaedcb.png

还原单个表,需要一次在每个数据节点运行以下命令。

shell> ndb_restore [...] --include-databases=db1,db2 --include-tables=db3.t1,db3.t2

在执行单个节点还原后查询数据,可以发现会有部分数据可以查询到,说明还原的节点存储了该表的部分数据。

shell> ndb_restore -c 192.168.1.131 -n 1 -b 1 -m -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1 --include-tables=testdb.dept

mysql> select count(*) from dept;

+----------+

| count(*) |

+----------+

| 25 |

+----------+

1 row in set (0.00 sec)

在后续节点上还原时就不需要指定-m选项来还原metadata,否则还原时会报Restore: Failed to restore table: testdb/def/dept ... Exiting错误。

整库还原

首先进入单用户模式。

ndb_mgm> ENTER SINGLE USER MODE 9

ndb_mgm> EXIT SINGLE USER MODE

USER MODE 9表示只有一个还原程序通过nodeid为9的api节点连接。

假设集群中由于同一nodegroup的所有节点都宕机,且硬盘上的数据也无法恢复。则所有节点通过ndbmtd --initial启动后,存放在ndb引擎上的数据都会丢失。此时,就需要调用ndb_restore进行数据库的还原。

同时,为了防止其他用户的接入操作,在完全操作前可以将集群进入上面所述的单用户模式。

然后根据备份文件的位置,依次进行还原。其中只有第一个节点还原时要使用-m命令。

ndb_restore -c 192.168.1.131 -n 1 -b 1 -m -r --backup_path=/opt/backupfiles/BACKUP-1/1

ndb_restore -c 192.168.1.131 -n 2 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1

ndb_restore -c 192.168.1.131 -n 3 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1

ndb_restore -c 192.168.1.131 -n 4 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1

注意:所有数据节点的备份文件可以放到一个备份目录下,还原程序会根据还原命令自行寻找对应的备份文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
连接 MySQL Cluster 集群可以通过两种方式:使用 MySQL Shell 或者使用 MySQL Connector/Net。以下是连接 MySQL Cluster 集群的步骤: ### 使用 MySQL Shell 连接 1. 打开 MySQL Shell,输入以下命令连接到 MySQL Cluster: ``` mysqlsh root@<ndb_mgmd_ip>:<ndb_mgmd_port> ``` 其中,`root` 是 MySQL 的用户名,`<ndb_mgmd_ip>` 是 MySQL Cluster Management Server 的 IP 地址,`<ndb_mgmd_port>` 是 MySQL Cluster Management Server 的端口号(默认为 1186)。 2. 输入密码登录 MySQL。 3. 输入以下命令查看 MySQL Cluster 集群节点的状态: ``` dba.getCluster().status() ``` 如果输出的信息包含了所有的 MySQL Cluster 节点,说明连接成功。 ### 使用 MySQL Connector/Net 连接 1. 在 Visual Studio 中创建一个新的 C# 项目。 2. 在项目中添加 MySQL Connector/Net。 3. 在代码中引入 MySQL Connector/Net 的命名空间: ``` using MySql.Data.MySqlClient; ``` 4. 使用以下代码连接到 MySQL Cluster: ``` string connectionString = "server=<ndb_mgmd_ip>;port=<ndb_mgmd_port>;database=<database_name>;uid=<username>;pwd=<password>"; MySqlConnection connection = new MySqlConnection(connectionString); connection.Open(); ``` 其中,`<ndb_mgmd_ip>` 是 MySQL Cluster Management Server 的 IP 地址,`<ndb_mgmd_port>` 是 MySQL Cluster Management Server 的端口号(默认为 1186),`<database_name>` 是要连接的数据库名称,`<username>` 是 MySQL 的用户名,`<password>` 是 MySQL 的密码。 5. 使用 `connection` 对象执行 SQL 查询等操作。 以上是连接 MySQL Cluster 集群的方法,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值