概要描述
本文主要描述基于 KunDB 的 TDC 环境(例如版本号 >= 3.x)备份元数据库的方法。该方案与老版本基于 TxSQL 的 TDC 环境略有不同,特此说明。
详细说明
请按照以下步骤操作即可。
查看元数据库 Pod
登录 TDC Master 节点,以 root 用户执行命令:
kubectl -ntdcsys get po -owide | grep kundb
结果的第一列即为 TDC 元数据库 KunDB 的 Pod 名称,例如上图中的kundb-r56h6-0
、kundb-r56h6-1
、kundb-r56h6-2
,共有3个 Pod 。
查看每个 KunDB Pod 中 MySQL 的 server id
对上一步找到的每个 KunDB Pod ,都进行如下操作。
- 进入 Pod 内部
kubectl -ntdcsys exec -it {Pod 名} bash
- 查看 MySQL 进程信息
ps -ef | grep mysqld
记下--socket
参数及其值,例如上图中的--socket=/vt/vtdataroot/vt_0000000001/mysql.sock
。
- 进入本地 MySQL Shell
mysql --socket={刚才查到的 socket 值}
- 查看并记下 server id
select @@server_id;
例如该 MySQL 的 server id 即为1473990508
,其对应的 Pod 名则是kundb-r56h6-0
,记下该对应关系。
记录完成后,可以exit
退出 MySQL Shell 并再次exit
退出 Pod 。
- 对其他 Pod 重复上述步骤
对其他 KunDB Pod 重复做以上操作,并最终记下 MySQL server id 与 Pod 的对应关系。最终可以得到全部3个 Pod 与其 server id 的对应关系,例如:
kundb-r56h6-0 : 1473990508
kundb-r56h6-1 : 346837982
kundb-r56h6-2 : 1327682539
查看 KunDB 集群当前的 server id
在 Master 节点执行
kubectl -ntdcsys exec -it {任意一个 KunDB Pod 名} -- mysql -h127.0.0.1 -P3306 -uvt_app -ptranswarp
查询当前的 server id
select @@server_id;
这样可以看出当前 KunDB 集群的 server id 为 1473990508
。
确定 KunDB 主节点
基于刚才查到的 KunDB 集群当前的 server id 和所有 KunDB Pod 与 server id 的对应关系,可以确定当前 KunDB 集群的主节点是哪个 Pod 。
例如本例中,根据 KunDB 集群的 server id 1473990508
查看再上一步得到对应关系,可以得到当前的主节点为 kundb-r56h6-0
。
在 KunDB 主节点 Pod 备份数据库
- 进入主节点 Pod
kubectl -ntdcsys exec -it {上一步确定的 KunDB 主节点 Pod 名} bash
- 查看 MySQL 进程信息
ps -ef | grep mysqld
记下--socket
参数及其值,例如上图中的--socket=/vt/vtdataroot/vt_0000000001/mysql.sock
。
- 使用 mysqldump + nohup 方式备份数据库
使用 nohup 是为了防止备份时间长导致 Pod 操作超时从而中断备份。
nohup mysqldump --socket={刚才查到的 socket 值} --set-gtid-purged=off --triggers --routines --events --all-databases > /tmp/alldata.sql &
可以看到 nohup 起的后台进程号为8209
。记下该进程号,然后可Ctrl + C
结束控制台输出。
- 检查后台进程是否执行完毕
ps -ef | grep {进程号} | grep -v grep
如果该命令没有任何输出,说明后台进程执行完了;如果该命令输出了进程信息,说明导出进程还在执行中,等待几分钟再次查看,直到该命令没有输出为止。
- 查看备份文件
后台进程执行完毕后,导出文件即为/tmp/alldata.sql
。
确认文件没有问题可exit
退出 Pod 。
将备份文件拷贝到 Master 节点
在 Master 节点执行
kubectl cp tdcsys/{KunDB 主节点 Pod 名}:/tmp/alldata.sql /opt/alldata.sql
这样就将备份文件拷贝到 Master 节点的 /opt
目录下了。