diff --git a/internal/db/models/db_node_initializer.go b/internal/db/models/db_node_initializer.go index 5e4abf1b..4d4037ba 100644 --- a/internal/db/models/db_node_initializer.go +++ b/internal/db/models/db_node_initializer.go @@ -22,6 +22,7 @@ var accessLogLocker = &sync.RWMutex{} type httpAccessLogDefinition struct { Name string HasRemoteAddr bool + Exists bool } // HTTP服务访问 @@ -102,12 +103,12 @@ func findHTTPAccessLogTableName(db *dbs.DB, day string) (tableName string, hasRe return tableName, def.HasRemoteAddr, true, nil } - tableNames, err := db.TableNames() + def, err = findHTTPAccessLogTable(db, day, false) if err != nil { return tableName, false, false, err } - return tableName, false, lists.ContainsString(tableNames, tableName), nil + return tableName, def.HasRemoteAddr, def.Exists, nil } func findNSAccessLogTableName(db *dbs.DB, day string) (tableName string, ok bool, err error) { @@ -173,12 +174,17 @@ func findHTTPAccessLogTable(db *dbs.DB, day string, force bool) (*httpAccessLogD var definition = &httpAccessLogDefinition{ Name: tableName, HasRemoteAddr: table.FindFieldWithName("remoteAddr") != nil, + Exists: true, } httpAccessLogTableMapping[cacheKey] = definition accessLogLocker.Unlock() return definition, nil } + if !force { + return &httpAccessLogDefinition{Name: tableName, HasRemoteAddr: true, Exists: false}, nil + } + // 创建表格 _, err = db.Exec("CREATE TABLE `" + tableName + "` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',`serverId` int(11) unsigned DEFAULT '0' COMMENT '服务ID',`nodeId` int(11) unsigned DEFAULT '0' COMMENT '节点ID',`status` int(3) unsigned DEFAULT '0' COMMENT '状态码',`createdAt` bigint(11) unsigned DEFAULT '0' COMMENT '创建时间',`content` json DEFAULT NULL COMMENT '日志内容',`requestId` varchar(128) DEFAULT NULL COMMENT '请求ID',`firewallPolicyId` int(11) unsigned DEFAULT '0' COMMENT 'WAF策略ID',`firewallRuleGroupId` int(11) unsigned DEFAULT '0' COMMENT 'WAF分组ID',`firewallRuleSetId` int(11) unsigned DEFAULT '0' COMMENT 'WAF集ID',`firewallRuleId` int(11) unsigned DEFAULT '0' COMMENT 'WAF规则ID',`remoteAddr` varchar(64) DEFAULT NULL COMMENT 'IP地址',PRIMARY KEY (`id`),KEY `serverId` (`serverId`),KEY `nodeId` (`nodeId`),KEY `serverId_status` (`serverId`,`status`),KEY `requestId` (`requestId`),KEY `firewallPolicyId` (`firewallPolicyId`),KEY `firewallRuleGroupId` (`firewallRuleGroupId`),KEY `firewallRuleSetId` (`firewallRuleSetId`), KEY `firewallRuleId` (`firewallRuleId`), KEY `remoteAddr` (`remoteAddr`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='访问日志';") if err != nil { @@ -189,6 +195,7 @@ func findHTTPAccessLogTable(db *dbs.DB, day string, force bool) (*httpAccessLogD var definition = &httpAccessLogDefinition{ Name: tableName, HasRemoteAddr: true, + Exists: true, } httpAccessLogTableMapping[cacheKey] = definition accessLogLocker.Unlock() @@ -333,7 +340,7 @@ func (this *DBNodeInitializer) loop() error { // 检查表是否存在 // httpAccessLog { - tableDef, err := findHTTPAccessLogTable(db, timeutil.Format("Ymd"), false) + tableDef, err := findHTTPAccessLogTable(db, timeutil.Format("Ymd"), true) if err != nil { if !strings.Contains(err.Error(), "1050") { // 非表格已存在错误 logs.Println("[DB_NODE]create first table in database node failed: " + err.Error()) diff --git a/internal/nodes/api_node.go b/internal/nodes/api_node.go index 65582896..48ffce33 100644 --- a/internal/nodes/api_node.go +++ b/internal/nodes/api_node.go @@ -262,13 +262,14 @@ func (this *APINode) autoUpgrade() error { return nil } } - // 不使用remotelogs(),因为此时还没有启动完成 + + // 不使用remotelog(),因为此时还没有启动完成 logs.Println("[API_NODE]upgrade database starting ...") err = setup.NewSQLExecutor(dbConfig).Run() if err != nil { return errors.New("execute sql failed: " + err.Error()) } - // 不使用remotelogs + // 不使用remotelog logs.Println("[API_NODE]upgrade database done") return nil }