背景:

数据库控制台备份只保留了7天,审计要求保留较久的备份,通过COS函数计算把备份的文件投递到COS进行深度归档,来满足审计要求。

底层逻辑:

  • 数据备份函数是把腾讯云数据库的备份文件复制到COS进行持久保存.
  • 若未开启数据库备份,则无法执行备份函数。
  • 该操作只是复制备份,对数据库实例不会造成影响。

Mysql备份恢复

- 触发器周期:MySQL 数据备份函数通过定时触发器来触发备份转存操作,触发周期支持每天、每周及自定义周期。 - 数据库实例:当前存储桶所在地域的 MySQL 数据库实例列表。 - 投递路径:备份文件的投递路径前缀,不填写则默认保存在存储桶根路径。 - 回溯天数:输入要回溯的时间跨度,回溯天数必须为 0 ~ 3 的整数。例如回溯天数为3,则会拉取您数据库实例近 3 天的备份文件列表,将备份文件下载并上传到 COS。

备份完成后,对备份的数据库文件进行归档存储。(因MYSQL备份函数不支持选择存储类型,通过生命周期实现)

规则名称 应用范围 规则内容
mysql_archive_backup 前缀:pro_mysql_archive_backup/ 当前版本文件沉降至深度归档存储:1 天

恢复已备份的数据库文件
取回备份文件
对归档的数据库备份文件进行快速取回

取回文件后,即可通过下载链接进行下载该备份
下载并安装 XtraBackup 工具。
请确保您下载的工具的版本与您数据库的版本一致,例如您的实例数据库版本为 MySQL 8.0.30,则请对应下载8.0.30版本的 Percona XtraBackup 工具。
查看到部分生产开启了数据库备份加密,部分未开启,UAT是未开启备份加密,所以此处恢复还原是没有加密操作的。
查看数据库版本

根据对应的版本信息,查询对应的Mysql版本
https://cloud.tencent.com/document/product/236/42539?from=console_document_search

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.27/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.27-1.el7.x86_64.rpm
yum install -y percona-xtrabackup-24-2.4.27-1.el7.x86_64.rpm

#查看支持的版本

[root@test-nmk ~]# xtrabackup -v
xtrabackup: recognized server arguments: --datadir=/var/lib/mysql
xtrabackup version 2.4.27 based on MySQL server 5.7.40 Linux (x86_64) (revision id: aae8e82)

下载备份文件
通过内网下载cos的备份文件

wget -c 'https://dba-test.cos.ap-guangzhou.myqcloud.com/cdb-123/asda' -O cdb-123_backup_20250807000826.xb

解包备份文件
使用 xbstream 命令将数据备份文件解包到目标目录。

xbstream -x  -C /data/mysql < /data/backup/cdb-123_backup_20250807000826.xb

解压备份文件
下载 qpress 工具

wget -d --user-agent="Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0" https://docs-tencentdb-1256569818.cos.ap-guangzhou.myqcloud.com/qpress-11-linux-x64.tar

通过命令解压出qpress 二进制文件

tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
source /etc/profile
```bash
将目标目录下所有以.qp结尾的文件都解压出来
```bash
[root@test-nmk mysql]# xtrabackup --decompress --target-dir=/data/mysql
250807 15:24:14 [01] decompressing ./performance_schema/table_lock_waits_summary_by_table.frm.qp
250807 15:24:14 [01] decompressing ./performance_schema/accounts.frm.qp
250807 15:24:14 [01] decompressing ./__cdb_recycle_bin__/db.opt.qp
250807 15:24:14 [01] decompressing ./brintech_ruqi_dev/db.opt.qp
250807 15:24:14 [01] decompressing ./xtrabackup_slave_info.qp
250807 15:24:14 [01] decompressing ./xtrabackup_binlog_info.qp
250807 15:24:14 [01] decompressing ./xtrabackup_logfile.qp
250807 15:24:14 [01] decompressing ./ib_buffer_pool.qp
250807 15:24:14 [01] decompressing ./backup-my.cnf.qp
250807 15:24:14 [01] decompressing ./xtrabackup_info.qp
250807 15:24:14 completed OK!

Prepare 备份文件
备份解压出来之后,执行如下命令进行 apply log 操作。

[root@test-nmk mysql]# xtrabackup --prepare  --target-dir=/data/mysql
xtrabackup: recognized server arguments: --innodb_checksum_algorithm=crc32 --innodb_log_checksum_algorithm=strict_crc32 --innodb_data_file_path=ibdata1:12M:autoextend --innodb_log_files_in_group=4 --innodb_log_file_size=1048576000 --innodb_fast_checksum=0 --innodb_page_size=16384 --innodb_log_block_size=512 --innodb_undo_directory=./ --innodb_undo_tablespaces=0 --server-id=0 --redo-log-version=1
xtrabackup: recognized client arguments: --prepare=1 --target-dir=/data/mysql
xtrabackup version 2.4.27 based on MySQL server 5.7.40 Linux (x86_64) (revision id: aae8e82)
xtrabackup: cd to /data/mysql/
xtrabackup: This target seems to be not prepared yet.
InnoDB: Number of pools: 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 186619553320
250807 16:16:42 completed OK!

修改配置文件
执行如下命令打开 backup-my.cnf 文件。
[root@test-nmk mysql]# vi /data/mysql/backup-my.cnf
说明:
由于存在的版本问题,请将解压文件 backup-my.cnf 中如下参数进行注释。

innodb_checksum_algorithm
innodb_log_checksum_algorithm
innodb_fast_checksum
innodb_page_size
innodb_log_block_size
redo_log_version
server_uuid
master_key_id

修改文件属性
修改文件属性,并检查文件所属为 mysql 用户。
[root@test-nmk mysql]# chown -R mysql:mysql /data/mysql
启动 mysqld 进程并登录验证
启动 mysqld 进程。

[root@test-nmk mysql]# mysqld --defaults-file=/data/mysql/backup-my.cnf --user=mysql --datadir=/data/mysql &
[1] 54351

使用原数据库的账号进行登陆本地mysql

[root@test-nmk ~]# mysql -h 10.30.24.180 -ugac_travel_test_new -p

对比原数据库的库数量,表数量,库大小,表大小,均是正常。

恢复完成。

PostgresSQL备份恢复

通过PostgreSQL备份函数实现数据库备份

备份函数触发后,文件夹下会生成备份文件,备份的文件会自动创建以实例ID为开头的文件夹进行区分,BaseBackup为数据备份文件 logbackup为日志备份文件
可通过 https://cloud.tencent.com/document/product/409/11642 进行恢复

备份完成后,配置生命周期对备份的数据库文件进行归档存储。

规则名称 应用范围 规则内容
postgresql_archive_backup 前缀:pro_postgresql_archive_backup/ 当前版本文件沉降至深度归档存储:1 天

下载备份文件
通过内网下载cos的备份文件

wget -c 'https://dba-test.cos.ap-guangzhou.myqcloud.com/postgres-123/adb' -O automatic-20251105144446.tar.zst

创建数据的恢复目录,并设置权限

mkdir pgsql
chown postgres /data/pgsql

安装 zstd 解压工具

yum install epel-release -y
yum install zstd -y
zstd --version

解压备份的文件

tar -I zstd -xvf automatic-20251105144446.tar.zst

删除多余的临时文件
执行如下命令,删除多余的临时文件。

rm -rf backup_label

修改配置文件
使用vi编辑器修改配置文件 postgresql.conf 。
在文件中找到以下内容,在每一行的行首添加 #,将其变为注释。 如有重复出现,则全部注释掉。

pg_stat_statements.track
synchronous_standby_names
extension_blacklist
archive_mode
basebackup_exclude_paths
tencentdb_syscache_max_num
shared_preload_libraries
tencentdb_relcache_max_num
archive_command
disable_dblink_connect_to_other
tencentdb_az_five
tencentdb_az_five
tencentdb_relcache_evict_num
pg_stat_statements.max
soft_limit_connections
tencentdb_syscache_evict_num
tencentdb_enable_trusted_extension
synchronous_commit
tencentdb_enable_superuser_unsafe_behaviour
tencentdb_enable_copy_to
local_preload_libraries

说明:
特别地,必须注释 include = 'standby.conf' 这一行。
将 log_destination = ‘csvlog,auditlog’ 修改为 log_destination = ‘csvlog’。

log_destination = ‘csvlog’

找到 port ,将其值修改为5433,以免与主实例端口冲突。

port = '5433'

在文件末尾文件末尾增加如下内容,表示不再使用强同步模式。

synchronous_commit = local
synchronous_standby_names = ''

使用 root 用户更改文件夹权限

chmod 0700 pgsql
chown postgres:postgres pgsql -R

使用 postgres 用户启动数据库

[root@test-nmk pgsql]# su postgres
bash-4.2$ /usr/pgsql-12/bin/pg_ctl start -D /data/pgsql -l logfile
waiting for server to start.... done
server started

验证数据库是否运行。

bash-4.2$ /usr/pgsql-12/bin/pg_ctl status -D /data/pgsql
pg_ctl: server is running (PID: 100081)
/usr/pgsql-12/bin/postgres "-D" "/data/pgsql"

登录数据库

bash-4.2$ psql -h localhost -p 5433 -Utest -dmap
psql (12.22)
Type "help" for help.

map=>

通过查询语句查看数据正常,恢复完成

map=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-----------------+----------+---------+-------+-----------------------
map | test | UTF8 | C | C |
postgres | postgres | UTF8 | C | C |
(2 rows)

map=> \dn;
List of schemas
Name | Owner
--------+-----------------
lbs | test
map | test
public | postgres

map=> \d map.*
Table "map.action_log"
Column | Type | Collation | Nullable | Default
------------+-------------------+-----------+----------+--------------------------------------------
id | integer | | not null | nextval('map.action_log_id_seq'::regclass)
uid | bigint | | |
module | character varying | | |
Indexes:
"action_log_pkey" PRIMARY KEY, btree (id)

Sequence "map.action_log_id_seq"
Type | Start | Minimum | Maximum | Increment | Cycles? | Cache
---------+-------+---------+------------+-----------+---------+-------
integer | 1 | 1 | 2147483647 | 1 | no | 1
Owned by: map.action_log.id

Mongdb备份恢复

通过MongoDB备份函数实现数据库备份

备份完成后,配置生命周期对备份的数据库文件进行归档存储。

规则名称 应用范围 规则内容
mongodb_archive_backup 前缀:pro_mongodb_archive_backup/ 当前版本文件沉降至深度归档存储:1 天

安装Mongodb
配置系统yum源,创建.repo文件

vi /etc/yum.repos.d/mongodb-org-4.0.repo

添加以下配置信息:

[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=0
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

安装MongoDB

yum install -y mongodb-org

启动MongoDB

systemctl start mongod.service

下载备份文件

wget -c "https://dba-test.cos.ap-guangzhou.myqcloud.com/cmgo-123/adb" -O f162f9025712e1d3c07eb0d99d399105-0.tar

解压备份文件

tar -xf f162f9025712e1d3c07eb0d99d399105-0.tar

下载恢复工具

wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.13.0.tgz
tar zxvf mongodb-database-tools-rhel70-x86_64-100.13.0.tgz

恢复数据库

/data/mongodb-database-tools-rhel70-x86_64-100.13.0/bin/mongorestore --gzip --drop -h127.0.0.1:27017 --dir /data/mongodb/cmgo-123\ 01\:00+f162f9025712e1d3c07eb0d99d399105-0/

恢复后看到日志打印

2025-11-13T16:04:31.114+0800        35274076 document(s) restored successfully. 0 document(s) failed to restore.

查看恢复的数据

\show dbs
TencetDTSData 0.000GB
admin 0.000GB
config 0.000GB
dts_verify_result 0.000GB
local 0.000GB
user 10.506GB