可能有些环境的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, 然后就让看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啥信息也没得.)
cd /data/tdsql_run/4002/mysqlagent/log
grep 'manual_backup_job' sys_report_4002.log.2024-11-11.0
[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目录, 并挂载磁盘上去.(只是目录是不行的).
我们就先来挂一个目录验证下: 可能有的版本不会说权限问题, 所以我们先看下不设置权限会报啥错
mkfs.xfs /dev/vdb
mkdir /tdsqlbackup
mount /dev/vdb /tdsqlbackup
然后再次发起备份
报错如下: 说是oc密码解密失败, 然后又让看mysqlagent日志.
{
"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密码解密失败是个啥玩意?? 但让看日志, 那我们就去瞅瞅吧.
cd /data/tdsql_run/4002/mysqlagent/log
grep 'manual_backup_job' sys_report_4002.log.2024-11-11.0
还是使用之前的方法搜索, 得到如下报错信息
[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
所以我们可以使用如下方法设置:
chown tdsql:users /tdsqlbackup
然后我们再次发起手动备份验证下
啊终于备份成功了.
既然物理备份成功了, 那我们顺便来验证下逻辑备份吧.
看起来也是可以的.
tdsql手动备份要求db节点必须挂载/tdsqlbackup目录 且权限为tdsql:users
创建的目录不行, 必须是挂载的目录.
注: 如果低版本(比如10.3.16)在从库挂载上/tdsqlbackup目录且权限为tdsql:user之后还是备份失败, 并且还是报错40001的话, 就得在主库上也得挂载/tdsqlbackup目录, 因为实际备份可能是在主库上做的.(查看下主库的mysqlagent日志就可以确认.)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。