Skip to content

Commit 38b09d3

Browse files
yksituiSecloud
authored andcommitted
fix: 优化sqlserver所有单据的备份文件传输逻辑 #7650
1 parent ab513ed commit 38b09d3

File tree

19 files changed

+390
-126
lines changed

19 files changed

+390
-126
lines changed

dbm-services/mysql/db-tools/dbactuator/pkg/components/tbinlogdumper/install_tbinlogdumper.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,13 +265,13 @@ func (i *InstallTbinlogDumperComp) DumperInstall() (err error) {
265265

266266
// mysql5.7.18以下版本初始化命令
267267
initialMysql = fmt.Sprintf(
268-
"su - mysql -c \"LD_LIBRARY_PATH=%s/lib:$LD_LIBRARY_PATH cd %s && ./scripts/mysql_install_db --defaults-file=%s --user=mysql --force &>%s\"",
268+
"su - mysql -c \"cd %s && LD_LIBRARY_PATH=%s/lib:$LD_LIBRARY_PATH ./scripts/mysql_install_db --defaults-file=%s --user=mysql --force &>%s\"",
269269
i.MysqlInstallDir, i.MysqlInstallDir, myCnf, initialLogFile)
270270

271271
// mysql5.7.18以上的版本
272272
if cmutil.MySQLVersionParse(i.Params.MysqlVersion) >= cmutil.MySQLVersionParse("5.7.18") {
273273
initialMysql = fmt.Sprintf(
274-
"su - mysql -c \"LD_LIBRARY_PATH=%s/lib:$LD_LIBRARY_PATH cd %s && ./bin/mysqld --defaults-file=%s --initialize-insecure --user=mysql &>%s\"",
274+
"su - mysql -c \"cd %s && LD_LIBRARY_PATH=%s/lib:$LD_LIBRARY_PATH ./bin/mysqld --defaults-file=%s --initialize-insecure --user=mysql &>%s\"",
275275
i.MysqlInstallDir, i.MysqlInstallDir, myCnf, initialLogFile)
276276
}
277277
if output, err = osutil.ExecShellCommand(isSudo, initialMysql); err != nil {

dbm-services/sqlserver/db-tools/dbactuator/internal/subcmd/sqlservercmd/backup_dbs.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ func (c *BackupDBSAct) Run() (err error) {
7777
FunName: "检查备份文件是否存在",
7878
Func: c.BaseService.CheckBackupSuccess,
7979
},
80+
{
81+
FunName: "输出backup_id",
82+
Func: c.BaseService.PrintBackupID,
83+
},
8084
}
8185

8286
if err := steps.Run(); err != nil {

dbm-services/sqlserver/db-tools/dbactuator/pkg/components/output.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ import (
1616
)
1717

1818
// WrapperOutputString TODO
19-
func WrapperOutputString(output string) string {
20-
return fmt.Sprintf(`<ctx>%s</ctx>`, output)
19+
func WrapperOutputString(output string) error {
20+
ss := fmt.Sprintf(`<ctx>%s</ctx>`, output)
21+
fmt.Println(ss)
22+
return nil
2123
}
2224

2325
// WrapperOutput TODO

dbm-services/sqlserver/db-tools/dbactuator/pkg/components/sqlserver/backup_dbs.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,9 @@ func (b *BackupDBSComp) CheckBackupSuccess() error {
278278
}
279279
return nil
280280
}
281+
282+
// 成功输出backup_id
283+
func (b *BackupDBSComp) PrintBackupID() error {
284+
components.WrapperOutputString(fmt.Sprintf("{\"id\": \"%s\"}", b.BackupID))
285+
return nil
286+
}

dbm-services/sqlserver/db-tools/dbactuator/pkg/components/sqlserver/init_sqlserver_instance.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func (r *InitSqlserverInstanceComp) InitSysDB() error {
212212
return err
213213
}
214214
// 继承相关配置
215-
if len(r.BackupFilter) == 0 {
215+
if len(r.BackupFilter) > 0 {
216216
insertBackupFilterSQL := fmt.Sprintf(
217217
"insert into [%s].[dbo].[BACKUP_FILTER] values ('%s')",
218218
cst.SysDB,
@@ -222,7 +222,7 @@ func (r *InitSqlserverInstanceComp) InitSysDB() error {
222222
return err
223223
}
224224
}
225-
if len(r.MirroringFilter) == 0 {
225+
if len(r.MirroringFilter) > 0 {
226226
insertMirroringFilterSQL := fmt.Sprintf(
227227
"insert into [%s].[dbo].[MIRRORING_FILTER] values ('%s')",
228228
cst.SysDB,

dbm-services/sqlserver/db-tools/dbactuator/pkg/core/staticembed/monitor_dbm.sql

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,6 +1455,8 @@ WHERE TYPE = 2
14551455
AND SUCCESS = 0
14561456
AND WRITETIME >= DATEADD(MI,-1,GETDATE()) and WRITETIME<getdate()
14571457

1458+
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] where ROLE='master')
1459+
BEGIN
14581460
INSERT INTO #tmp_mssql_exporter
14591461
SELECT 'mssql_job_fail',count(1),'job_fail',3
14601462
FROM MSDB.DBO.SYSJOBHISTORY A,MSDB.DBO.SYSJOBS B
@@ -1463,6 +1465,15 @@ AND A.RUN_DATE = CONVERT(CHAR(8),GETDATE(),112)
14631465
AND RIGHT('000000'+LTRIM(A.RUN_TIME),6) >= LEFT(REPLACE(CONVERT(CHAR(30),DATEADD(MI,-1,GETDATE()),114),':',''),LEN(REPLACE(CONVERT(CHAR(30),DATEADD(MI,-1,GETDATE()),114),':',''))-3)
14641466
AND A.RUN_STATUS = 0 AND EXISTS(select 1 from master.sys.database_mirroring where mirroring_guid is not null and mirroring_role=1)
14651467

1468+
INSERT INTO #tmp_mssql_exporter
1469+
SELECT 'mssql_snapshot_deploy',0,'snapshot_deploy',3
1470+
1471+
END
1472+
ELSE
1473+
BEGIN
1474+
INSERT INTO #tmp_mssql_exporter
1475+
SELECT 'mssql_job_fail',0,'job_fail',3
1476+
14661477
INSERT INTO #tmp_mssql_exporter
14671478
SELECT 'mssql_snapshot_deploy',count(1),'snapshot_deploy',3
14681479
FROM SYS.DATABASE_MIRRORING A LEFT JOIN SYS.DATABASES B
@@ -1473,6 +1484,8 @@ AND A.MIRRORING_ROLE = 2
14731484
AND (B.NAME IS NULL
14741485
OR B.STATE = 4)
14751486

1487+
END
1488+
14761489
DECLARE @SQL varchar(1000)
14771490
IF OBJECT_ID('TEMPDB.DBO.#tmp_is_alwayson','U') IS NOT NULL
14781491
DROP TABLE #tmp_is_alwayson
@@ -1498,7 +1511,7 @@ IF @version>=869
14981511
BEGIN
14991512
delete from #tmp111
15001513

1501-
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] WHERE SYNCHRONOUS_MODE='always_on')
1514+
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] WHERE SYNCHRONOUS_MODE='always_on') AND EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] where ROLE='master')
15021515
BEGIN
15031516
delete from #tmp_mssql_exporter where metrics_name in('mssql_alwayson_delay','mssql_alwayson_deploy','mssql_alwayson_status')
15041517

@@ -1579,7 +1592,7 @@ SELECT 'mssql_mirroring_deploy',0,'mirroring_deploy',3
15791592
UNION ALL
15801593
SELECT 'mssql_mirroring_status',0,'mirroring_status',3
15811594

1582-
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] WHERE SYNCHRONOUS_MODE='mirroring')
1595+
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] WHERE SYNCHRONOUS_MODE='mirroring') AND EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] where ROLE='master')
15831596
BEGIN
15841597
delete from #tmp_mssql_exporter where metrics_name in('mssql_mirroring_delay','mssql_mirroring_deploy','mssql_mirroring_status')
15851598

@@ -3136,7 +3149,7 @@ BEGIN
31363149
ELSE IF @TYPE = 3
31373150
SELECT @SUFFIX = '.diff'
31383151

3139-
UPDATE [Monitor].[dbo].[BACKUP_TRACE] SET UPLOADED=1 WHERE TYPE=@TYPE AND UPLOADED=0 AND STARTTIME< dateadd(dd,-@KEEP_BACKUP_DAYS,getdate())
3152+
UPDATE [Monitor].[dbo].[BACKUP_TRACE] SET UPLOADED=1 WHERE TYPE=@TYPE AND UPLOADED=0 AND STARTTIME<= dateadd(dd,-@KEEP_BACKUP_DAYS,dateadd(mi,2,getdate()))
31403153
DECLARE @DEL_FILE VARCHAR(1000)
31413154
DECLARE list_cur cursor static forward_only Read_only for
31423155
SELECT PATH+FILENAME FROM [Monitor].[dbo].[BACKUP_TRACE] WHERE TYPE=@TYPE AND UPLOADED=1
@@ -3552,12 +3565,12 @@ BEGIN
35523565
DECLARE @SQL VARCHAR(8000)
35533566

35543567
SELECT @SQL = ISNULL(@SQL+'','')+'EXEC ['+name+'].dbo.sp_changedbowner @loginame = N''sa'', @map = false;'
3555-
from master.sys.databases where database_id>4 and name not in('Monitor') and state=0 and is_read_only=0 and is_distributor = 0 and owner_sid in(select sid from master.sys.sql_logins where sid<>0x01 and name LIKE '%\_%' ESCAPE '\')
3568+
from master.sys.databases where database_id>4 and name not in('Monitor') and state=0 and is_read_only=0 and is_distributor = 0 and owner_sid in(select sid from master.sys.sql_logins where sid<>0x01 and name like 'J\_%' ESCAPE '\')
35563569
--PRINT(@SQL)
35573570
EXEC(@SQL)
35583571

35593572
SELECT @SQL = ISNULL(@SQL+'','')+'EXEC msdb.dbo.sp_update_job @job_name=N'''+name+''', @owner_login_name=N''sa'';'
3560-
from msdb.dbo.sysjobs where owner_sid in(select sid from master.sys.sql_logins where sid<>0x01 and name LIKE '%\_%' ESCAPE '\')
3573+
from msdb.dbo.sysjobs where owner_sid in(select sid from master.sys.sql_logins where sid<>0x01 and name like 'J\_%' ESCAPE '\')
35613574
--PRINT(@SQL)
35623575
EXEC(@SQL)
35633576

dbm-services/sqlserver/db-tools/dbactuator/pkg/core/staticembed/monitor_dbm_v2.sql

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
USE MASTER
23
SET QUOTED_IDENTIFIER ON
34
SET NOCOUNT ON
@@ -1355,6 +1356,8 @@ WHERE TYPE = 2
13551356
AND SUCCESS = 0
13561357
AND WRITETIME >= DATEADD(MI,-1,GETDATE()) and WRITETIME<getdate()
13571358

1359+
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] where ROLE='master')
1360+
BEGIN
13581361
INSERT INTO #tmp_mssql_exporter
13591362
SELECT 'mssql_job_fail',count(1),'job_fail',3
13601363
FROM MSDB.DBO.SYSJOBHISTORY A,MSDB.DBO.SYSJOBS B
@@ -1363,6 +1366,15 @@ AND A.RUN_DATE = CONVERT(CHAR(8),GETDATE(),112)
13631366
AND RIGHT('000000'+LTRIM(A.RUN_TIME),6) >= LEFT(REPLACE(CONVERT(CHAR(30),DATEADD(MI,-1,GETDATE()),114),':',''),LEN(REPLACE(CONVERT(CHAR(30),DATEADD(MI,-1,GETDATE()),114),':',''))-3)
13641367
AND A.RUN_STATUS = 0 AND EXISTS(select 1 from master.sys.database_mirroring where mirroring_guid is not null and mirroring_role=1)
13651368

1369+
INSERT INTO #tmp_mssql_exporter
1370+
SELECT 'mssql_snapshot_deploy',0,'snapshot_deploy',3
1371+
1372+
END
1373+
ELSE
1374+
BEGIN
1375+
INSERT INTO #tmp_mssql_exporter
1376+
SELECT 'mssql_job_fail',0,'job_fail',3
1377+
13661378
INSERT INTO #tmp_mssql_exporter
13671379
SELECT 'mssql_snapshot_deploy',count(1),'snapshot_deploy',3
13681380
FROM SYS.DATABASE_MIRRORING A LEFT JOIN SYS.DATABASES B
@@ -1373,6 +1385,8 @@ AND A.MIRRORING_ROLE = 2
13731385
AND (B.NAME IS NULL
13741386
OR B.STATE = 4)
13751387

1388+
END
1389+
13761390
DECLARE @SQL varchar(1000)
13771391
IF OBJECT_ID('TEMPDB.DBO.#tmp_is_alwayson','U') IS NOT NULL
13781392
DROP TABLE #tmp_is_alwayson
@@ -1398,7 +1412,7 @@ IF @version>=869
13981412
BEGIN
13991413
delete from #tmp111
14001414

1401-
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] WHERE SYNCHRONOUS_MODE='always_on')
1415+
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] WHERE SYNCHRONOUS_MODE='always_on') AND EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] where ROLE='master')
14021416
BEGIN
14031417
delete from #tmp_mssql_exporter where metrics_name in('mssql_alwayson_delay','mssql_alwayson_deploy','mssql_alwayson_status')
14041418

@@ -1479,7 +1493,7 @@ SELECT 'mssql_mirroring_deploy',0,'mirroring_deploy',3
14791493
UNION ALL
14801494
SELECT 'mssql_mirroring_status',0,'mirroring_status',3
14811495

1482-
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] WHERE SYNCHRONOUS_MODE='mirroring')
1496+
IF EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] WHERE SYNCHRONOUS_MODE='mirroring') AND EXISTS(SELECT 1 FROM [Monitor].[dbo].[APP_SETTING] where ROLE='master')
14831497
BEGIN
14841498
delete from #tmp_mssql_exporter where metrics_name in('mssql_mirroring_delay','mssql_mirroring_deploy','mssql_mirroring_status')
14851499

@@ -3036,7 +3050,7 @@ BEGIN
30363050
ELSE IF @TYPE = 3
30373051
SELECT @SUFFIX = '.diff'
30383052

3039-
UPDATE [Monitor].[dbo].[BACKUP_TRACE] SET UPLOADED=1 WHERE TYPE=@TYPE AND UPLOADED=0 AND STARTTIME< dateadd(dd,-@KEEP_BACKUP_DAYS,getdate())
3053+
UPDATE [Monitor].[dbo].[BACKUP_TRACE] SET UPLOADED=1 WHERE TYPE=@TYPE AND UPLOADED=0 AND STARTTIME<= dateadd(dd,-@KEEP_BACKUP_DAYS,dateadd(mi,2,getdate()))
30403054
DECLARE @DEL_FILE VARCHAR(1000)
30413055
DECLARE list_cur cursor static forward_only Read_only for
30423056
SELECT PATH+FILENAME FROM [Monitor].[dbo].[BACKUP_TRACE] WHERE TYPE=@TYPE AND UPLOADED=1
@@ -3452,12 +3466,12 @@ BEGIN
34523466
DECLARE @SQL VARCHAR(8000)
34533467

34543468
SELECT @SQL = ISNULL(@SQL+'','')+'EXEC ['+name+'].dbo.sp_changedbowner @loginame = N''sa'', @map = false;'
3455-
from master.sys.databases where database_id>4 and name not in('Monitor') and state=0 and is_read_only=0 and is_distributor = 0 and owner_sid in(select sid from master.sys.sql_logins where sid<>0x01 and name like '%J_%')
3469+
from master.sys.databases where database_id>4 and name not in('Monitor') and state=0 and is_read_only=0 and is_distributor = 0 and owner_sid in(select sid from master.sys.sql_logins where sid<>0x01 and name like 'J\_%' ESCAPE '\')
34563470
--PRINT(@SQL)
34573471
EXEC(@SQL)
34583472

34593473
SELECT @SQL = ISNULL(@SQL+'','')+'EXEC msdb.dbo.sp_update_job @job_name=N'''+name+''', @owner_login_name=N''sa'';'
3460-
from msdb.dbo.sysjobs where owner_sid in(select sid from master.sys.sql_logins where sid<>0x01 and name like '%J_%')
3474+
from msdb.dbo.sysjobs where owner_sid in(select sid from master.sys.sql_logins where sid<>0x01 and name like 'J\_%' ESCAPE '\')
34613475
--PRINT(@SQL)
34623476
EXEC(@SQL)
34633477

dbm-services/sqlserver/db-tools/dbactuator/pkg/util/sqlserver/sqlserver.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,15 +238,18 @@ func (h *DbWorker) CheckDBProcessExist(dbName string) bool {
238238
logger.Warn("process:[%+v], kill this", info)
239239
killCmd = append(killCmd, fmt.Sprintf("kill %d", info.Spid))
240240
} else {
241-
isNoErr = true
241+
isNoErr = false
242242
logger.Error("process:[%+v]", info)
243243
}
244244
}
245+
if !isNoErr {
246+
return false
247+
}
245248
if _, err := h.ExecMore(killCmd); err != nil {
246249
logger.Error(fmt.Sprintf("kill process failed %v", err))
247250
return false
248251
}
249-
return isNoErr
252+
return true
250253
}
251254

252255
// GetServerNameAndInstanceName 获取实例的相关信息
@@ -431,15 +434,19 @@ func ExecLocalSQLFile(sqlVersion string, dbName string, charsetNO int, filenames
431434
return fmt.Errorf("this version [%s] is not supported", sqlVersion)
432435
}
433436
for _, filename := range filenames {
437+
var ret string
438+
var err error
434439
cmd := fmt.Sprintf(
435-
"& '%s' -S \"127.0.0.1,%d\" -C -d %s -f %d -b -i %s",
440+
"& '%s' -S \"127.0.0.1,%d\" -C -I -d %s -f %d -b -i %s",
436441
cmdSql, port, dbName, charsetNO, filename,
437442
)
438443
fmt.Println(cmd)
439-
if ret, err := osutil.StandardPowerShellCommand(cmd); err != nil {
444+
logger.Info("exec cmd: %s", cmd)
445+
if ret, err = osutil.StandardPowerShellCommand(cmd); err != nil {
440446
logger.Error("the db [%s] exec sql script failed %s, result: %s ", dbName, err.Error(), ret)
441447
return err
442448
}
449+
logger.Info("exec result: %s", ret)
443450
logger.Info("ths db [%s] exec sql script success [%d:%s]", dbName, port, filename)
444451
}
445452

dbm-ui/backend/flow/engine/bamboo/scene/sqlserver/build_database_sync.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020
from backend.flow.engine.bamboo.scene.sqlserver.common_sub_flow import sync_dbs_for_cluster_sub_flow
2121
from backend.flow.plugins.components.collections.sqlserver.create_random_job_user import SqlserverAddJobUserComponent
2222
from backend.flow.plugins.components.collections.sqlserver.drop_random_job_user import SqlserverDropJobUserComponent
23-
from backend.flow.utils.sqlserver.sqlserver_act_dataclass import CreateRandomJobUserKwargs, DropRandomJobUserKwargs
23+
from backend.flow.utils.sqlserver.sqlserver_act_dataclass import (
24+
CreateRandomJobUserKwargs,
25+
DropRandomJobUserKwargs,
26+
SqlserverBackupIDContext,
27+
)
2428
from backend.flow.utils.sqlserver.sqlserver_db_function import create_sqlserver_login_sid, get_no_sync_dbs
2529
from backend.flow.utils.sqlserver.sqlserver_host import Host
2630

@@ -99,4 +103,4 @@ def run_flow(self):
99103

100104
# 内部检测sub_pipelines是否为空
101105
main_pipeline.add_parallel_sub_pipeline(sub_flow_list=sub_pipelines)
102-
main_pipeline.run_pipeline()
106+
main_pipeline.run_pipeline(init_trans_data_class=SqlserverBackupIDContext())

dbm-ui/backend/flow/engine/bamboo/scene/sqlserver/common_sub_flow.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"""
1010
import copy
1111
from dataclasses import asdict
12+
from pathlib import PureWindowsPath
1213
from typing import List
1314

1415
from django.utils.translation import ugettext as _
@@ -39,6 +40,9 @@
3940
)
4041
from backend.flow.plugins.components.collections.common.sa_idle_check import CheckMachineIdleComponent
4142
from backend.flow.plugins.components.collections.mysql.dns_manage import MySQLDnsManageComponent
43+
from backend.flow.plugins.components.collections.sqlserver.backup_path_file_trans import (
44+
SqlserverTransBackupFileFor2P2Component,
45+
)
4246
from backend.flow.plugins.components.collections.sqlserver.check_no_sync_db import CheckNoSyncDBComponent
4347
from backend.flow.plugins.components.collections.sqlserver.exec_actuator_script import SqlserverActuatorScriptComponent
4448
from backend.flow.plugins.components.collections.sqlserver.exec_sqlserver_backup_job import (
@@ -60,8 +64,10 @@
6064
InsertAppSettingKwargs,
6165
P2PFileForWindowKwargs,
6266
RestoreForDoDrKwargs,
67+
SqlserverBackupIDContext,
6368
)
6469
from backend.flow.utils.sqlserver.sqlserver_act_payload import SqlserverActPayload
70+
from backend.flow.utils.sqlserver.sqlserver_db_function import get_backup_path
6571
from backend.flow.utils.sqlserver.sqlserver_host import Host
6672
from backend.flow.utils.sqlserver.validate import SqlserverCluster, SqlserverInstance
6773

@@ -427,6 +433,7 @@ def sync_dbs_for_cluster_sub_flow(
427433
cluster: Cluster,
428434
sync_slaves: List[Host],
429435
sync_dbs: list,
436+
clean_dbs: list = None,
430437
sub_flow_name: str = _("建立数据库同步子流程"),
431438
):
432439
"""
@@ -436,11 +443,19 @@ def sync_dbs_for_cluster_sub_flow(
436443
@param cluster: 关联的集群对象
437444
@param sync_slaves: 待同步的从实例
438445
@param sync_dbs: 待同步的db列表
446+
@param clean_dbs: 这次清理的db列表,默认为空,则用sync_dbs列表作为清理db
439447
@param sub_flow_name: 子流程名称
440448
"""
441449
# 获取当前master实例信息
442450
master_instance = cluster.storageinstance_set.get(instance_role=InstanceRole.BACKEND_MASTER)
443-
backup_path = f"d:\\dbbak\\restore_dr_{root_id}_{master_instance.port}\\"
451+
# 获取集群的备份路径
452+
cluster_backup_path = get_backup_path(cluster.id)
453+
if cluster_backup_path == "":
454+
# 如果没有配置,则用默认路径
455+
backup_path = str(PureWindowsPath("d:/") / "dbbak" / f"restore_dr_{root_id}_{master_instance.port}")
456+
else:
457+
backup_path = str(PureWindowsPath(cluster_backup_path) / f"restore_dr_{root_id}_{master_instance.port}")
458+
444459
cluster_sync_mode = SqlserverClusterSyncMode.objects.get(cluster_id=cluster.id).sync_mode
445460
# 生成切换payload的字典
446461
sync_payload_func_map = {
@@ -462,7 +477,7 @@ def sync_dbs_for_cluster_sub_flow(
462477
"target_backup_dir": backup_path,
463478
"is_set_full_model": True,
464479
"job_id": f"restore_dr_{root_id}_{master_instance.port}",
465-
"clean_dbs": sync_dbs,
480+
"clean_dbs": clean_dbs if clean_dbs else sync_dbs,
466481
"clean_mode": SqlserverCleanMode.DROP_DBS.value,
467482
"clean_tables": ["*"],
468483
"ignore_clean_tables": [],
@@ -526,6 +541,7 @@ def sync_dbs_for_cluster_sub_flow(
526541
},
527542
)
528543
),
544+
write_payload_var=SqlserverBackupIDContext.full_backup_id_var_name(),
529545
)
530546
# 执行数据库日志备份
531547
sub_pipeline.add_act(
@@ -543,17 +559,18 @@ def sync_dbs_for_cluster_sub_flow(
543559
},
544560
)
545561
),
562+
write_payload_var=SqlserverBackupIDContext.log_backup_id_var_name(),
546563
)
547564
# 传送备份文件
548565
sub_pipeline.add_act(
549566
act_name=_("传送文件到目标机器"),
550-
act_component_code=TransFileInWindowsComponent.code,
567+
act_component_code=SqlserverTransBackupFileFor2P2Component.code,
551568
kwargs=asdict(
552569
P2PFileForWindowKwargs(
553570
source_hosts=[Host(ip=master_instance.machine.ip, bk_cloud_id=cluster.bk_cloud_id)],
554-
file_list=[f"{backup_path}*"],
555571
target_hosts=sync_slaves,
556572
file_target_path=backup_path,
573+
cluster_id=cluster.id,
557574
),
558575
),
559576
)

0 commit comments

Comments
 (0)