前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[TDSQL] tdsql 手动备份失败处理

[TDSQL] tdsql 手动备份失败处理

原创
作者头像
大大刺猬
发布2024-11-11 11:22:16
1200
发布2024-11-11 11:22:16
举报
文章被收录于专栏:大大刺猬

导读

可能有些环境的tdsql没有配置hdfs之类的, 即没有相关的备份设置. 但是又想手动备份一下,又不想使用mysqldump/mydumper之类的命令. 就想使用赤兔控制台点一下就能手动备份. 这时候大概率会遇到各种报错.

本文适合于: tdsql-10.3.14 --> tdsql-10.3.22版本

环境说明

本次演示 非分布式实例上的手动备份 . 版本为: 10.3.22.x

IP

端口

角色

172.17.32.31

4002

主库

172.17.32.9

4002

从库(冷备节点)

tdsql的冷备节点只能是从库, 我这里只有一个, 所以没得选

手动物理备份

选择实例 --> 备份&恢复 --> 备份列表 --> 手动备份 --> 备份存储:local

我们这里没做hdfs, 所以得选择local

我们先测试物理备份, 所以备份类型选择物理备份, 然后点开始备份

报错40001

报错

于是我们得到了报错如下. 报错代码为40001, 然后就让看mysqlagent的日志.

吐槽一下: 这里的err_msg让我们去看mysqlagent日志感觉是官方偷懒, 不想直接对接出来, 非要我们去翻mysqlagent日志.{ "taskid": 0, "status": 1, "process": 0, "backup_type": "xtrabackup", "begin_date": "", "cur_step": null, "description": "Error occurred,see mysqlagent log for detail.", "end_date": "", "err_code": 40001, "err_msg": "Error occurred,see mysqlagent log for detail.", "file_system": "local", "operation": "backup", "result": [ ], "subtask_detail": null, "task_step": null, "err_msg_chitu": "【40001】获取ZK参数节点异常 (Error occurred,see mysqlagent log for detail.)" }

处理过程

既然冷备是在从库做的, 那我们就看从库的mysqlagent日志吧. (log/nohup下面有手动备份日志的, 但除了一个start啥信息也没得.)

代码语言:shell
复制
cd /data/tdsql_run/4002/mysqlagent/log
grep 'manual_backup_job' sys_report_4002.log.2024-11-11.0
代码语言:txt
复制
[2024-11-11 10:35:26 189406] ERROR 21260,report_new/job/manual_backup_job.cpp:291:generateBackupFile,tid:0x7fd533fff700,21334,trace:ac11201f1731292522363123803942,agent,No local backup filesystem is detected.

我们看到报错关键信息是 No local backup filesystem is detected. 即没得备份目录. 那么备份目录是啥呢? 我们就得查阅文档了... tdsql的文档地址: https://cloud.tencent.com/privatecloud

我们直接查看最新的文档, 发现 备份必须挂载/tdsqlbackup目录, 且权限必须为tdsql:user. 也就是得创建一个/tdsqlbackup目录, 并挂载磁盘上去.(只是目录是不行的).

我们就先来挂一个目录验证下: 可能有的版本不会说权限问题, 所以我们先看下不设置权限会报啥错

代码语言:shell
复制
mkfs.xfs /dev/vdb
mkdir /tdsqlbackup
mount /dev/vdb /tdsqlbackup

然后再次发起备份

报错40005

报错

报错如下: 说是oc密码解密失败, 然后又让看mysqlagent日志.

代码语言:txt
复制
{
"taskid": 2,
"backup_type": "xtrabackup",
"begin_date": "",
"cur_step": null,
"description": "Error occurred,see mysqlagent log for detail.",
"end_date": "",
"err_code": 40005,
"err_msg": "Error occurred,see mysqlagent log for detail.",
"file_system": "local",
"operation": "backup",
"process": 24,
"result": [ ],
"status": 1,
"subtask_detail": null,
"task_step": null,
"err_msg_chitu": "【40005】oc密码解密失败 (Error occurred,see mysqlagent log for detail.)"
}

处理过程

第一次看到这个报错我是茫然的. oc密码解密失败是个啥玩意?? 但让看日志, 那我们就去瞅瞅吧.

代码语言:shell
复制
cd /data/tdsql_run/4002/mysqlagent/log
grep 'manual_backup_job' sys_report_4002.log.2024-11-11.0

还是使用之前的方法搜索, 得到如下报错信息

代码语言:txt
复制
[2024-11-11 10:35:26 189406] ERROR 21260,report_new/job/manual_backup_job.cpp:291:generateBackupFile,tid:0x7fd533fff700,21334,trace:ac11201f1731292522363123803942,agent,No local backup filesystem is detected.
[2024-11-11 10:55:15 724645] DEBUG 21260,report_new/job/manual_backup_job.cpp:69:execute,tid:0x7fd533fff700,21334,trace:ac11201f1731293713935137003942,agent,The backup file is being generated.Waiting next retry...
[2024-11-11 10:55:16 731198] DEBUG 21260,report_new/job/manual_backup_job.cpp:69:execute,tid:0x7fd533fff700,21334,trace:ac11201f1731293713935137003942,agent,The backup file is being generated.Waiting next retry...
[2024-11-11 10:55:17 733824] DEBUG 21260,report_new/job/manual_backup_job.cpp:69:execute,tid:0x7fd533fff700,21334,trace:ac11201f1731293713935137003942,agent,The backup file is being generated.Waiting next retry...
[2024-11-11 10:55:18 736468] DEBUG 21260,report_new/job/manual_backup_job.cpp:69:execute,tid:0x7fd533fff700,21334,trace:ac11201f1731293713935137003942,agent,The backup file is being generated.Waiting next retry...
[2024-11-11 10:55:19 740385] ERROR 21260,report_new/job/manual_backup_job.cpp:79:execute,tid:0x7fd533fff700,21334,trace:ac11201f1731293713935137003942,agent,Backup failed or other unknown error.Result file buff:-1

嗯.... 这看起来好像没啥用. The backup file is being generated看起来是正在生成备份文件, 并且没有成功, 这种通常是空间不够, 或者权限不对. 既然mysqlagent是使用tdsql账号启动的, 那么应该只有tdsql的权限, 所以我们还得给/tdsqlbackup设置权限为tdsql:users

所以我们可以使用如下方法设置:

代码语言:shell
复制
chown tdsql:users /tdsqlbackup

然后我们再次发起手动备份验证下

啊终于备份成功了.

手动逻辑备份

既然物理备份成功了, 那我们顺便来验证下逻辑备份吧.

看起来也是可以的.

总结

tdsql手动备份要求db节点必须挂载/tdsqlbackup目录 且权限为tdsql:users

创建的目录不行, 必须是挂载的目录.

注: 如果低版本(比如10.3.16)在从库挂载上/tdsqlbackup目录且权限为tdsql:user之后还是备份失败, 并且还是报错40001的话, 就得在主库上也得挂载/tdsqlbackup目录, 因为实际备份可能是在主库上做的.(查看下主库的mysqlagent日志就可以确认.)

参考: https://cloud.tencent.com/privatecloud

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 环境说明
  • 手动物理备份
    • 报错40001
      • 报错
      • 处理过程
    • 报错40005
      • 报错
      • 处理过程
  • 手动逻辑备份
  • 总结
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档