Title: πŸ—ƒοΈ SQLite Group: Databases Icon: πŸ—ƒοΈ Order: 3 --- ## πŸ“š Table of Contents / Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ 1. [Installation & Configuration](#installation--configuration--установка-ΠΈ-настройка) 2. [Core Management](#core-management--ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅) 3. [Sysadmin Operations](#sysadmin-operations--ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ-сисадмина) 4. [Backup & Restore](#backup--restore--бэкап-ΠΈ-восстановлСниС) 5. [Troubleshooting](#troubleshooting--устранСниС-ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ) --- ## Installation & Configuration / Установка ΠΈ Настройка ### Install / Установка ```bash # Ubuntu/Debian sudo apt update && sudo apt install -y sqlite3 # Install SQLite / Установка SQLite # RHEL/AlmaLinux/Rocky sudo dnf install -y sqlite # Install SQLite / Установка SQLite # From source / Из исходников wget https://www.sqlite.org/2025/sqlite-autoconf-.tar.gz tar -xzf sqlite-autoconf-.tar.gz cd sqlite-autoconf-/ ./configure && make && sudo make install # Compile and install / ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ установка ``` ### Check Version / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° вСрсии ```bash sqlite3 --version # Check SQLite version / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ``` --- ## Core Management / Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ### Database Operations / ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π±Π°Π·Π°ΠΌΠΈ ```bash sqlite3 .db # Open/create database / ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ/ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ sqlite3 .db '.databases' # Show database info / Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π±Π°Π·Π΅ sqlite3 .db '.quit' # Exit / Π’Ρ‹ΠΉΡ‚ΠΈ ``` ### Table Operations / ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ```sql .tables -- List tables / Бписок Ρ‚Π°Π±Π»ΠΈΡ† .schema -- Show table schema / ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ схСму Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ .schema -- Show all schemas / ВсС схСмы CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT); -- Create table / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ DROP TABLE
; -- Delete table / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ALTER TABLE
ADD COLUMN TEXT; -- Add column / Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ ALTER TABLE
RENAME TO ; -- Rename table / ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ``` ### CRUD Operations / ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ CRUD ```sql INSERT INTO users (name) VALUES ('Alice'); -- Insert row / Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строку SELECT * FROM users WHERE name = 'Alice'; -- Select rows / Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ строки UPDATE users SET name = 'Bob' WHERE id = 1; -- Update row / ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ строку DELETE FROM users WHERE id = 1; -- Delete row / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ строку SELECT COUNT(*) FROM
; -- Count rows / ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строки ``` ### Indexes / Π˜Π½Π΄Π΅ΠΊΡΡ‹ ```sql CREATE INDEX idx_name ON users(name); -- Create index / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс CREATE UNIQUE INDEX idx_email ON users(email); -- Unique index / Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс .indexes
-- List indexes for table / Π˜Π½Π΄Π΅ΠΊΡΡ‹ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ DROP INDEX idx_name; -- Drop index / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ индСкс ``` ### sqlite3 CLI Commands / ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ CLI ```sql .help -- Show help / Π‘ΠΏΡ€Π°Π²ΠΊΠ° .quit -- Exit / Π’Ρ‹ΠΉΡ‚ΠΈ .mode csv -- CSV output mode / Π Π΅ΠΆΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° CSV .mode column -- Column output mode / Π Π΅ΠΆΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ .mode insert -- INSERT statement mode / Π Π΅ΠΆΠΈΠΌ INSERT .headers on -- Show column headers / ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ .timer on -- Show query timing / ВрСмя выполнСния запросов .output -- Output to file / Π’Ρ‹Π²ΠΎΠ΄ Π² Ρ„Π°ΠΉΠ» .output stdout -- Output to stdout / Π’Ρ‹Π²ΠΎΠ΄ Π² консоль .read -- Execute SQL from file / Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ SQL ΠΈΠ· Ρ„Π°ΠΉΠ»Π° .dump -- Dump database as SQL / Π”Π°ΠΌΠΏ Π±Π°Π·Ρ‹ Π² SQL .dump
-- Dump table as SQL / Π”Π°ΠΌΠΏ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² SQL ``` ### Import/Export CSV / Π˜ΠΌΠΏΠΎΡ€Ρ‚/Экспорт CSV ```bash # Export to CSV / Экспорт Π² CSV sqlite3 .db -csv -header "SELECT * FROM users;" > users.csv # Import CSV / Π˜ΠΌΠΏΠΎΡ€Ρ‚ CSV sqlite3 .db <.db # Check file type / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° du -h .db # Check database size / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·Ρ‹ ``` ### Permissions / ΠŸΡ€Π°Π²Π° доступа ```bash chmod 600 .db # Read/write for owner only / Волько Π²Π»Π°Π΄Π΅Π»Π΅Ρ† chmod 644 .db # Read for all, write for owner / Π§Ρ‚Π΅Π½ΠΈΠ΅ всСм chown : .db # Change owner / Π‘ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ``` ### PRAGMA Commands / ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ PRAGMA ```sql PRAGMA database_list; -- List attached databases / Бписок ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π±Π°Π· PRAGMA table_info(
); -- Table schema info / Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ схСмС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ PRAGMA index_list(
); -- List indexes for table / Бписок индСксов Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ PRAGMA foreign_key_list(
); -- Foreign keys / Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ PRAGMA page_size; -- Database page size / Π Π°Π·ΠΌΠ΅Ρ€ страницы Π±Π°Π·Ρ‹ PRAGMA page_count; -- Number of pages / ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ страниц PRAGMA freelist_count; -- Free pages / Π‘Π²ΠΎΠ±ΠΎΠ΄Π½Ρ‹Π΅ страницы PRAGMA encoding; -- Database encoding / ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Π±Π°Π·Ρ‹ PRAGMA journal_mode; -- Journal mode (DELETE/WAL/etc) / Π Π΅ΠΆΠΈΠΌ ΠΆΡƒΡ€Π½Π°Π»Π° PRAGMA synchronous; -- Synchronous mode / Π Π΅ΠΆΠΈΠΌ синхронизации PRAGMA foreign_keys = ON; -- Enable foreign keys / Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ PRAGMA cache_size = 10000; -- Set cache size (pages) / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ кэша ``` ### Performance Tuning / Настройка ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ```sql PRAGMA journal_mode = WAL; -- Enable WAL mode (better concurrency) / Π Π΅ΠΆΠΈΠΌ WAL PRAGMA synchronous = NORMAL; -- Faster writes (less safe) / БыстрСС запись PRAGMA temp_store = MEMORY; -- Store temp tables in memory / Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² RAM PRAGMA mmap_size = 268435456; -- Memory-mapped I/O (256MB) / ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ PRAGMA cache_size = -64000; -- Cache size in KB (-64MB) / Π Π°Π·ΠΌΠ΅Ρ€ кэша Π² KB ``` ### Integrity Check / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности ```sql PRAGMA integrity_check; -- Full integrity check / Полная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности PRAGMA quick_check; -- Quick integrity check / Быстрая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ``` ### Analyze & Optimize / Анализ ΠΈ оптимизация ```sql ANALYZE; -- Update query optimizer statistics / ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ статистику VACUUM; -- Rebuild database file (reclaim space) / ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±Π°Π·Ρƒ ``` --- ## Backup & Restore / Бэкап ΠΈ ВосстановлСниС ### Simple Backup / ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ бэкап ```bash # Copy file (only when DB is not in use) / ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π±Π°Π·Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ) cp .db _backup.db # Copy database file / ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π±Π°Π·Ρ‹ gzip -c .db > _backup.db.gz # Compress backup / Π‘ΠΆΠ°Ρ‚Ρ‹ΠΉ бэкап # Restore / ВосстановлСниС cp _backup.db .db # Restore from backup / Π’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· бэкапа gunzip < _backup.db.gz > .db # Restore from gzip / Π’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· gzip ``` ### Online Backup / Онлайн бэкап ```bash # Using .backup command (safe while DB is in use) / ИспользованиС .backup (бСзопасно Π²ΠΎ врСмя использования) sqlite3 .db '.backup _backup.db' # Backup database / Бэкап Π±Π°Π·Ρ‹ sqlite3 .db '.backup _backup.sqlite' # Backup with different extension / Π”Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ``` ### Dump/Restore SQL / Π”Π°ΠΌΠΏ/ВосстановлСниС SQL ```bash # Dump to SQL / Π”Π°ΠΌΠΏ Π² SQL sqlite3 .db .dump > dump.sql # Full database dump / ΠŸΠΎΠ»Π½Ρ‹ΠΉ Π΄Π°ΠΌΠΏ Π±Π°Π·Ρ‹ sqlite3 .db ".dump
" > table_dump.sql # Dump single table / Π”Π°ΠΌΠΏ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ # Restore from SQL / ВосстановлСниС ΠΈΠ· SQL sqlite3 _new.db < dump.sql # Restore from dump / Π’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· Π΄Π°ΠΌΠΏΠ° ``` ### Scheduled Backups / АвтоматичСскиС бэкапы ```bash #!/bin/bash # /usr/local/bin/sqlite-backup.sh BACKUP_DIR="/backups/sqlite" DB_FILE="/path/to/.db" TIMESTAMP=$(date +%Y%m%d_%H%M%S) mkdir -p $BACKUP_DIR sqlite3 $DB_FILE ".backup $BACKUP_DIR/backup_$TIMESTAMP.db" gzip $BACKUP_DIR/backup_$TIMESTAMP.db find $BACKUP_DIR -name "*.gz" -mtime +7 -delete # Delete backups older than 7 days / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠ΅ 7 Π΄Π½Π΅ΠΉ ``` **Cron:** ```bash 0 2 * * * /usr/local/bin/sqlite-backup.sh >> /var/log/sqlite-backup.log 2>&1 ``` --- ## Troubleshooting / УстранСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ### Common Issues / ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ **Database is locked / Π‘Π°Π·Π° Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π°:** ```bash # Check for processes using the database / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ процСссы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π°Π·Ρƒ lsof .db fuser .db # If in WAL mode, check for -wal and -shm files / Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ WAL ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ls -lh .db* # Remove lock (only if no process is using DB) / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π±Π°Π·Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ) rm .db-shm .db-wal ``` **Corrupt database / ΠŸΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Π°Ρ Π±Π°Π·Π°:** ```bash # Try integrity check / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ sqlite3 .db 'PRAGMA integrity_check;' # Attempt recovery / ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° восстановлСния sqlite3 .db '.dump' | sqlite3 _recovered.db # Dump and restore / Π”Π°ΠΌΠΏ ΠΈ восстановлСниС # If dump fails, try recover / Если Π΄Π°ΠΌΠΏ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ sqlite3 .db '.recover' | sqlite3 _recovered.db ``` ### Query Optimization / ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ запросов ```sql EXPLAIN QUERY PLAN SELECT * FROM users WHERE name = 'Alice'; -- Show query plan / План выполнСния запроса CREATE INDEX idx_name ON users(name); -- Add index to speed up queries / Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ индСкс ANALYZE; -- Update statistics / ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ статистику ``` ### Database Size / Π Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·Ρ‹ ```sql SELECT page_count * page_size AS size FROM pragma_page_count(), pragma_page_size(); -- Database size in bytes / Π Π°Π·ΠΌΠ΅Ρ€ Π² Π±Π°ΠΉΡ‚Π°Ρ… ``` ```bash du -h .db # Human-readable size / Π Π°Π·ΠΌΠ΅Ρ€ Π² Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅ ls -lh .db # Detailed file info / ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ информация ``` ### Vacuum to Reclaim Space / ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° для освобоТдСния мСста ```sql VACUUM; -- Rebuild database and reclaim space / ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ мСсто ``` ```bash # Before and after vacuum / Π”ΠΎ ΠΈ послС vacuum ls -lh .db sqlite3 .db 'VACUUM;' ls -lh .db ``` ### Enable Foreign Keys / Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ ```sql PRAGMA foreign_keys = ON; -- Enable foreign key constraints / Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ограничСния FK PRAGMA foreign_keys; -- Check if enabled / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π»ΠΈ ``` ### Monitoring / ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ```bash # Watch file size changes / ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° watch -n 1 'ls -lh .db' # Monitor active connections (check processes) / ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ lsof .db fuser -v .db ```