hhdb數(shù)據(jù)庫(kù)使用過程中會(huì)產(chǎn)生日志文件,若不收集,則無法在出現(xiàn)問題時(shí)查找原因,若全部收集時(shí)間久了就會(huì)產(chǎn)生大量的日志數(shù)據(jù)。當(dāng)我們需要通過日志文件排查問題時(shí),往往無法精準(zhǔn)快速的定位問題。今天我來分享一些hhdb數(shù)據(jù)庫(kù)的日志配置。
1 日志設(shè)置
hhdb數(shù)據(jù)庫(kù)的配置文件為數(shù)據(jù)存儲(chǔ)目錄data目錄下的hhdbsql.conf。修改完配置文件后需要重啟數(shù)據(jù)庫(kù)才會(huì)生效。
1.1 基本設(shè)置
啟用日志收集,配置日志目錄及日志前綴
# 啟動(dòng)日志收集, 這是一個(gè)后臺(tái)進(jìn)程,抓取發(fā)送到stderr的日志消息,并會(huì)將他們重定向到日志文件。 logging_collector = on
# 日志輸出路徑,可以是自定義絕對(duì)路徑或相對(duì)于數(shù)據(jù)目錄DATA 的相對(duì)路徑
log_directory = 'log'
# 設(shè)置日志輸出格式log_line_prefix 設(shè)置日志輸出格式(能夠記錄時(shí)間,用戶名稱,數(shù)據(jù)庫(kù)名稱,客戶端IP和端口,方便定位問題)
log_line_prefix = '' #此項(xiàng)配置可以根據(jù)需求去進(jìn)行配置建議配置時(shí)間和用戶%m [%u]即可。
%a應(yīng)用名
%u用戶名
%d數(shù)據(jù)庫(kù)名
%r遠(yuǎn)程主機(jī)名或 IP 地址,以及遠(yuǎn)程端口
%h遠(yuǎn)程主機(jī)名或 IP 地址
%p進(jìn)程 ID
%t無毫秒的時(shí)間戳
%m帶毫秒的時(shí)間戳
%n帶毫秒的時(shí)間戳(作為 Unix 時(shí)間戳)
%i命令標(biāo)簽:會(huì)話當(dāng)前命令的類型
%eSQLSTATE 錯(cuò)誤代碼
%c會(huì)話 ID:見下文
%l對(duì)每個(gè)會(huì)話或進(jìn)程的日志行號(hào),從 1 開始
%s進(jìn)程開始的時(shí)間戳
%v虛擬事務(wù) ID (backendID/localXID)
%x事務(wù) ID (如果未分配則為 0)
%q不產(chǎn)生輸出,但是告訴非會(huì)話進(jìn)程在字符串的這一點(diǎn)停止;會(huì)話進(jìn)程忽略
%%純文字
1.2 日志輸出級(jí)別設(shè)置
#設(shè)置日志記錄內(nèi)容,log_statement:none, ddl, mod, and all 默認(rèn)是 none
# None表示不記錄
#ddl記錄所有數(shù)據(jù)定義命令,比如CREATE,ALTER,和DROP語(yǔ)句,
# mod記錄所有ddl語(yǔ)句,加上數(shù)據(jù)修改語(yǔ)句INSERT,UPDATE等
# all記錄所有執(zhí)行的語(yǔ)句,將此配置設(shè)置為all可跟蹤整個(gè)數(shù)據(jù)庫(kù)執(zhí)行的SQL語(yǔ)句,但會(huì)對(duì)數(shù)據(jù)庫(kù)性能產(chǎn)生較大影響,生產(chǎn)環(huán)境不建議配置此值。
log_min_duration_statement = 0 。-1表示不可用,0將記錄所有SQL語(yǔ)句和它們的耗時(shí),>0只記錄那些耗時(shí)超過(或等于)這個(gè)值(ms)的SQL語(yǔ)句。(用于記錄耗時(shí)長(zhǎng)存在性能問題的sql,不建議設(shè)置為0)
若設(shè)置為0則log_statement設(shè)置為none時(shí)也會(huì)輸出所有sql的記錄。
1.3日志滾動(dòng)策略配置
#日志文件名及其擴(kuò)展名,默認(rèn)即可
log_filename = 'hhdbsql-%Y-%m-%d_%H%M%S.log' # 交易日志文件名
%a 星期的英文單詞的縮寫:如星期一, 則返回 Mon
%A 星期的英文單詞的全拼:如星期一,返回 Monday
%b 月份的英文單詞的縮寫:如一月, 則返回 Jan
%B 月份的引文單詞的縮寫:如一月, 則返回 January
%c 返回datetime的字符串表示,如03/08/15 23:01:26
%d 返回的是當(dāng)前時(shí)間是當(dāng)前月的第幾天
%f 微秒的表示: 范圍: [0,999999]
%H 以24小時(shí)制表示當(dāng)前小時(shí)
%I 以12小時(shí)制表示當(dāng)前小時(shí)
%j 返回 當(dāng)天是當(dāng)年的第幾天 范圍[001,366]
%m 返回月份 范圍[0,12]
%M 返回分鐘數(shù) 范圍 [0,59]
%P 返回是上午還是下午–AM or PM
%S 返回秒數(shù) 范圍 [0,61]。。。手冊(cè)說明的
%U 返回當(dāng)周是當(dāng)年的第幾周 以周日為第一天
%W 返回當(dāng)周是當(dāng)年的第幾周 以周一為第一天
%w 當(dāng)天在當(dāng)周的天數(shù),范圍為[0, 6],6表示星期天
%x 日期的字符串表示 :03/08/15
%X 時(shí)間的字符串表示 :23:22:08
%y 兩個(gè)數(shù)字表示的年份 15
%Y 四個(gè)數(shù)字表示的年份 2015
%z 與utc時(shí)間的間隔 (如果是本地時(shí)間,返回空字符串)
%Z 時(shí)區(qū)名稱(如果是本地時(shí)間,返回空字符串)
#日志文件的權(quán)限,默認(rèn)即可
log_file_mode = 0600
#默認(rèn)為off,設(shè)置為on的話,如果新建了一個(gè)同名的日志文件,則會(huì)清空原來的文件,再寫入日志,而不是在后面追加。
log_truncate_on_rotation =on
#單個(gè)日志文件的生存期,默認(rèn)1天,在日志文件大小沒有達(dá)到log_rotation_size時(shí),一天只生成一個(gè)日志文件
log_rotation_age = 1d
#當(dāng)logging_collector被啟用時(shí),這個(gè)參數(shù)決定一個(gè)個(gè)體日志文件的最大尺寸。當(dāng)這么多千字節(jié)被發(fā)送到一個(gè)日志文件后,將創(chuàng)建一個(gè)新的日志文件。將這個(gè)參數(shù)設(shè)置為零將禁用基于尺寸的新日志文件創(chuàng)建。
log_rotation_size=10MB
- 日志滾動(dòng)設(shè)置示例
示例:日志滾動(dòng)保存需要配合log_filename、log_truncate_on_rotation、以及l(fā)og_rotation_age參數(shù)來組合設(shè)置。
每天一個(gè)文件保存一個(gè)星期
log_filename = 'hhdbsql-%A.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 100MB
每天一個(gè)文件保留1個(gè)月
logging_collector = on
log_statement=’mod’
log_filename = 'hhdbsql-%d.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 100MB
每天一個(gè)文件保留1年
log_filename = 'hhdbsql-%m-%d.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 100MB
說明
通過配置日志級(jí)別,可以保留我們需要的數(shù)據(jù)庫(kù)交易記錄。配置日志滾動(dòng)策略可以及時(shí)清理掉需要的日志文件,避免日志文件日積月累占用太多的系統(tǒng)資源
附:日志參數(shù)參考表

- 恒輝產(chǎn)品社區(qū)網(wǎng)址鏈接(https://www.deskui.com),里面含有HHDB數(shù)據(jù)庫(kù)下載地址!