@@ -14,31 +14,33 @@ mkdir -p "$(dirname "$LOG_FILE")"
1414
1515# Logging function
1616log () {
17- echo " [$( date +' %Y-%m-%d %H:%M:%S' ) ] $* " | tee -a " $LOG_FILE "
17+ echo " [$( date +' %Y-%m-%d %H:%M:%S' ) ] $* " | tee -a " $LOG_FILE "
1818}
1919
2020# Error handling
2121trap ' log "ERROR: Script failed at line $LINENO"' ERR
2222
2323# Function to optimize a database
2424optimize_database () {
25- local db_path=" $1 "
26- local db_name=$( basename " $db_path " )
25+ local db_path=" $1 "
26+ local db_name
27+ db_name=$( basename " $db_path " )
2728
28- log " Starting optimization for $db_name "
29+ log " Starting optimization for $db_name "
2930
30- if [[ ! -f " $db_path " ]]; then
31- log " WARNING: Database $db_path not found, skipping"
32- return 0
33- fi
31+ if [[ ! -f " $db_path " ]]; then
32+ log " WARNING: Database $db_path not found, skipping"
33+ return 0
34+ fi
3435
35- # Create backup before optimization using sqlite3 .backup for WAL safety
36- local backup_path=" ${db_path} .backup.$( date ' +%Y%m%d-%H%M%S' ) "
37- log " Creating backup: $backup_path "
38- sqlite3 " $db_path " " .backup '$backup_path '"
36+ # Create backup before optimization using sqlite3 .backup for WAL safety
37+ local backup_path
38+ backup_path=" ${db_path} .backup.$( date ' +%Y%m%d-%H%M%S' ) "
39+ log " Creating backup: $backup_path "
40+ sqlite3 " $db_path " " .backup '$backup_path '"
3941
40- # Run SQLite optimization commands
41- sqlite3 " $db_path " << EOF 2>&1 | tee -a "$LOG_FILE "
42+ # Run SQLite optimization commands
43+ if sqlite3 " $db_path " << EOF 2>&1 | tee -a "$LOG_FILE "; then
4244-- Analyze database for query optimizer
4345PRAGMA analysis_limit=1000;
4446ANALYZE;
@@ -60,27 +62,26 @@ PRAGMA freelist_count;
6062SELECT 'Database size: ' || page_count * page_size / 1024 / 1024 || ' MB' FROM pragma_page_count(), pragma_page_size();
6163SELECT 'Free pages: ' || freelist_count FROM pragma_freelist_count();
6264EOF
63-
64- if [[ $? -eq 0 ]]; then
65- log " Successfully optimized $db_name "
66-
67- # Remove old backups (keep last 7 days)
68- find " $( dirname " $db_path " ) " -name " $( basename " $db_path " ) .backup.*" -mtime +7 -delete 2> /dev/null || true
69- log " Cleaned up old backups for $db_name "
70- else
71- log " ERROR: Failed to optimize $db_name "
72- return 1
73- fi
65+ log " Successfully optimized $db_name "
66+
67+ # Remove old backups (keep last 7 days)
68+ find " $( dirname " $db_path " ) " -name " $( basename " $db_path " ) .backup.*" -mtime +7 -delete 2> /dev/null || true
69+ log " Cleaned up old backups for $db_name "
70+ else
71+ log " ERROR: Failed to optimize $db_name "
72+ return 1
73+ fi
7474}
7575
7676# Function to analyze database performance
7777analyze_performance () {
78- local db_path=" $1 "
79- local db_name=$( basename " $db_path " )
78+ local db_path=" $1 "
79+ local db_name
80+ db_name=$( basename " $db_path " )
8081
81- log " Analyzing performance for $db_name "
82+ log " Analyzing performance for $db_name "
8283
83- sqlite3 " $db_path " << EOF 2>&1 | tee -a "$LOG_FILE "
84+ sqlite3 " $db_path " << EOF 2>&1 | tee -a "$LOG_FILE "
8485-- Check for missing indexes
8586SELECT 'Tables without any index:';
8687SELECT name FROM sqlite_master
@@ -112,39 +113,40 @@ EOF
112113
113114# Main execution
114115main () {
115- log " === Starting database maintenance ==="
116- log " Database directory: $DB_DIR "
116+ log " === Starting database maintenance ==="
117+ log " Database directory: $DB_DIR "
117118
118- if [[ ! -d " $DB_DIR " ]]; then
119- log " ERROR: Database directory $DB_DIR not found"
120- exit 1
121- fi
119+ if [[ ! -d " $DB_DIR " ]]; then
120+ log " ERROR: Database directory $DB_DIR not found"
121+ exit 1
122+ fi
122123
123- # Find all SQLite databases
124- local databases=($( find " $DB_DIR " -name " *.db" -type f 2> /dev/null) )
124+ # Find all SQLite databases
125+ local databases
126+ mapfile -t databases < <( find " $DB_DIR " -name " *.db" -type f 2> /dev/null)
125127
126- if [[ ${# databases[@]} -eq 0 ]]; then
127- log " No databases found in $DB_DIR "
128- exit 0
129- fi
128+ if [[ ${# databases[@]} -eq 0 ]]; then
129+ log " No databases found in $DB_DIR "
130+ exit 0
131+ fi
130132
131- log " Found ${# databases[@]} database(s)"
132-
133- # Process each database
134- for db in " ${databases[@]} " ; do
135- log " ----------------------------------------"
136- optimize_database " $db "
137- analyze_performance " $db "
138- done
133+ log " Found ${# databases[@]} database(s)"
139134
135+ # Process each database
136+ for db in " ${databases[@]} " ; do
140137 log " ----------------------------------------"
141- log " === Database maintenance completed ==="
142-
143- # Summary
144- log " "
145- log " Summary:"
146- log " - Processed ${# databases[@]} database(s)"
147- log " - Log file: $LOG_FILE "
138+ optimize_database " $db "
139+ analyze_performance " $db "
140+ done
141+
142+ log " ----------------------------------------"
143+ log " === Database maintenance completed ==="
144+
145+ # Summary
146+ log " "
147+ log " Summary:"
148+ log " - Processed ${# databases[@]} database(s)"
149+ log " - Log file: $LOG_FILE "
148150}
149151
150152# Run main function
0 commit comments