Управление базами данных: основные команды
SQL раздел с описанием основных команд по управлению базами данных
Этот раздел содержит ключевые команды для работы с различными СУБД, включая:
- Создание и настройку баз данных и пользователей
- Управление таблицами (создание, изменение, удаление)
- Работу с индексами (добавление, удаление, оптимизация)
- Вставку, обновление и выборку данных
- Сложные запросы (JOIN, подзапросы, транзакции)
- Экспорт и импорт данных (CSV, JSON, SQL-дампы)
- Автоматизацию (хранимые процедуры, триггеры, скрипты)
Команды подходят для администрирования серверов, разработки приложений и аналитики данных. Для удобства они сгруппированы по темам и сопровождаются примерами.
1 - Справочный гайд по командам PostgreSQL
Основные команды по управлению базой данных PostgreSQL. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов
1. Установка PostgreSQL на разные ОС
Ubuntu/Debian
# Обновление пакетов
sudo apt update
# Установка PostgreSQL
sudo apt install postgresql postgresql-contrib
# Проверка статуса
sudo systemctl status postgresql
# Включение автозапуска
sudo systemctl enable postgresql
Manjaro/Arch Linux
# Установка PostgreSQL
sudo pacman -S postgresql
# Инициализация БД
sudo su - postgres -c "initdb --locale en_US.UTF-8 -D /var/lib/postgres/data"
# Запуск службы
sudo systemctl start postgresql
# Включение автозапуска
sudo systemctl enable postgresql
AlmaLinux/RHEL/CentOS
# Установка PostgreSQL
sudo dnf install postgresql-server postgresql-contrib
# Инициализация БД
sudo postgresql-setup --initdb
# Запуск службы
sudo systemctl start postgresql
# Включение автозапуска
sudo systemctl enable postgresql
2. Подключение и настройка
Вход в консоль PostgreSQL
sudo -u postgres psql # Linux
psql -U postgres # Если настроен пароль
Создание пользователя и БД
-- Создание пользователя
CREATE USER myuser WITH PASSWORD 'mypassword';
-- Создание базы данных
CREATE DATABASE mydb OWNER myuser;
-- Выдача прав
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
-- Выход
\q
Подключение к БД
psql -U myuser -d mydb -h localhost -W
3. Управление базами данных
Основные команды
-- Показать все БД
\l
-- Переключиться на БД
\c dbname
-- Создать БД
CREATE DATABASE dbname;
-- Удалить БД
DROP DATABASE dbname;
4. Управление таблицами
Создание и изменение таблиц
-- Создание таблицы
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT NOW()
);
-- Просмотр таблиц
\dt
-- Просмотр структуры таблицы
\d users
-- Добавление столбца
ALTER TABLE users ADD COLUMN age INT;
-- Удаление таблицы
DROP TABLE users;
5. Работа с данными
Вставка, обновление, удаление
-- Вставка данных
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
-- Обновление данных
UPDATE users SET email = 'new@example.com' WHERE id = 1;
-- Удаление данных
DELETE FROM users WHERE id = 1;
-- Выборка данных
SELECT * FROM users;
SELECT name, email FROM users WHERE age > 18;
6. Индексы и оптимизация
Создание и удаление индексов
-- Создать индекс
CREATE INDEX idx_users_email ON users(email);
-- Удалить индекс
DROP INDEX idx_users_email;
-- Полнотекстовый поиск (если нужно)
CREATE EXTENSION pg_trgm;
CREATE INDEX idx_users_name_search ON users USING gin(name gin_trgm_ops);
7. Резервное копирование и восстановление
Экспорт и импорт БД
# Дамп всей БД
pg_dump -U myuser -d mydb -f backup.sql
# Дамп одной таблицы
pg_dump -U myuser -d mydb -t users -f users_backup.sql
# Восстановление БД
psql -U myuser -d mydb -f backup.sql
8. Расширенные возможности
Транзакции
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT; -- или ROLLBACK в случае ошибки
Представления (Views)
CREATE VIEW active_users AS
SELECT * FROM users WHERE last_login > NOW() - INTERVAL '30 days';
Хранимые процедуры
CREATE OR REPLACE FUNCTION add_user(name TEXT, email TEXT)
RETURNS VOID AS $$
BEGIN
INSERT INTO users (name, email) VALUES (name, email);
END;
$$ LANGUAGE plpgsql;
-- Вызов
SELECT add_user('Bob', 'bob@example.com');
9. Внешние источники данных
Импорт из CSV
COPY users(name, email) FROM '/path/to/users.csv' DELIMITER ',' CSV HEADER;
Экспорт в CSV
COPY users TO '/path/to/users_export.csv' DELIMITER ',' CSV HEADER;
Заключение
Этот гайд охватывает основные команды PostgreSQL для администрирования, разработки и анализа данных. Для более сложных сценариев обратитесь к официальной документации.
🚀 Совет: Используйте pgAdmin
(графический интерфейс) для удобного управления PostgreSQL.
2 - Справочный гайд по командам MySQL
“Основные команды по управлению базой данных MySql. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов”
Установка MySQL/MariaDB на различные дистрибутивы Linux
Ubuntu/Debian
Установка MySQL
# Обновление пакетов
sudo apt update
# Установка MySQL сервера
sudo apt install mysql-server
# Запуск службы
sudo systemctl start mysql
# Включение автозапуска
sudo systemctl enable mysql
# Настройка безопасности (запустит интерактивный скрипт)
sudo mysql_secure_installation
# Проверка статуса
sudo systemctl status mysql
Установка MariaDB (альтернатива MySQL)
sudo apt update
sudo apt install mariadb-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation
Manjaro/Arch Linux
Установка MySQL (Arch)
# Обновление системы
sudo pacman -Syu
# Установка MySQL
sudo pacman -S mysql
# Инициализация базы данных
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
# Запуск службы
sudo systemctl start mysqld
# Включение автозапуска
sudo systemctl enable mysqld
# Настройка безопасности
sudo mysql_secure_installation
Установка MariaDB
sudo pacman -S mariadb
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation
AlmaLinux/RHEL/CentOS
Установка MySQL (Alma)
# Для AlmaLinux 8/9 и RHEL 8/9:
# Добавление MySQL репозитория
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-4.noarch.rpm
# Установка MySQL сервера
sudo dnf install mysql-community-server
# Запуск службы
sudo systemctl start mysqld
# Включение автозапуска
sudo systemctl enable mysqld
# Временный пароль можно найти в логах
sudo grep 'temporary password' /var/log/mysqld.log
# Настройка безопасности
sudo mysql_secure_installation
Установка MariaDB (Alma)
# Установка MariaDB
sudo dnf install mariadb-server
# Запуск службы
sudo systemctl start mariadb
# Включение автозапуска
sudo systemctl enable mariadb
# Настройка безопасности
sudo mysql_secure_installation
Общие команды после установки
Подключение к MySQL/MariaDB
Создание нового пользователя (из консоли MySQL)
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Резервное копирование
# Резервное копирование всех баз
mysqldump -u root -p --all-databases > all_databases.sql
# Резервное копирование конкретной базы
mysqldump -u root -p database_name > database_name.sql
Восстановление из резервной копии
mysql -u root -p database_name < database_name.sql
Примечания
-
Для MySQL 8.0+ используется новый плагин аутентификации caching_sha2_password
, что может вызвать проблемы с некоторыми старыми клиентами. Можно изменить на старый плагин:
ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
-
В некоторых дистрибутивах (особенно Manjaro/Arch) MariaDB является заменой MySQL по умолчанию.
-
Для AlmaLinux/RHEL 9 может потребоваться отключить модуль MySQL перед установкой:
sudo dnf module disable mysql
Управление базой данных
-- Создание базы данных
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Просмотр всех баз данных
SHOW DATABASES;
-- Выбор базы данных для работы
USE db_name;
-- Удаление базы данных
DROP DATABASE db_name;
-- Резервное копирование базы данных (из командной строки)
mysqldump -u username -p db_name > backup.sql
-- Восстановление базы данных (из командной строки)
mysql -u username -p db_name < backup.sql
Управление пользователями базы данных
-- Создание пользователя
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
-- Изменение пароля пользователя
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
-- Назначение прав пользователю
GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost';
-- Просмотр прав пользователя
SHOW GRANTS FOR 'username'@'localhost';
-- Отзыв прав
REVOKE ALL PRIVILEGES ON db_name.* FROM 'username'@'localhost';
-- Удаление пользователя
DROP USER 'username'@'localhost';
Управление таблицами
-- Создание таблицы
CREATE TABLE table_name (
id INT AUTO_INCREMENT PRIMARY KEY,
column1 VARCHAR(255) NOT NULL,
column2 INT,
column3 DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (column2) REFERENCES other_table(id)
) ENGINE=InnoDB;
-- Просмотр структуры таблицы
DESCRIBE table_name;
SHOW CREATE TABLE table_name;
-- Изменение таблицы
ALTER TABLE table_name ADD COLUMN new_column VARCHAR(100);
ALTER TABLE table_name MODIFY COLUMN column1 TEXT;
ALTER TABLE table_name DROP COLUMN column2;
ALTER TABLE table_name RENAME TO new_table_name;
-- Удаление таблицы
DROP TABLE table_name;
-- Очистка таблицы (удаление всех данных)
TRUNCATE TABLE table_name;
Управление индексами
-- Создание индекса
CREATE INDEX idx_name ON table_name (column1);
CREATE UNIQUE INDEX idx_unique_name ON table_name (column1, column2);
-- Создание полнотекстового индекса
CREATE FULLTEXT INDEX idx_ft ON table_name (text_column);
-- Просмотр индексов таблицы
SHOW INDEX FROM table_name;
-- Удаление индекса
DROP INDEX idx_name ON table_name;
Управление записями таблиц
-- Вставка данных
INSERT INTO table_name (column1, column2) VALUES ('value1', 123);
INSERT INTO table_name VALUES (NULL, 'value1', 123, DEFAULT);
-- Множественная вставка
INSERT INTO table_name (column1, column2) VALUES
('value1', 123),
('value2', 456),
('value3', 789);
-- Обновление данных
UPDATE table_name SET column1 = 'new_value' WHERE id = 1;
UPDATE table_name SET column1 = 'value' WHERE column2 > 100 LIMIT 10;
-- Удаление данных
DELETE FROM table_name WHERE id = 1;
DELETE FROM table_name ORDER BY created_at LIMIT 100;
-- Выборка данных
SELECT * FROM table_name;
SELECT column1, column2 FROM table_name WHERE id > 100;
SELECT DISTINCT column1 FROM table_name;
SELECT COUNT(*) FROM table_name;
-- Сортировка и ограничение
SELECT * FROM table_name ORDER BY column1 DESC LIMIT 10 OFFSET 20;
-- Группировка
SELECT column1, COUNT(*) FROM table_name GROUP BY column1 HAVING COUNT(*) > 5;
Связанные запросы
-- Внутреннее соединение (INNER JOIN)
SELECT t1.*, t2.column
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.table1_id;
-- Внешние соединения (LEFT/RIGHT JOIN)
SELECT t1.*, t2.column
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.table1_id;
-- Подзапросы
SELECT * FROM table1 WHERE id IN (SELECT table1_id FROM table2 WHERE column = 'value');
-- Объединение результатов (UNION)
SELECT column1 FROM table1
UNION
SELECT column2 FROM table2;
-- Транзакции
START TRANSACTION;
INSERT INTO table1 VALUES (1, 'test');
UPDATE table2 SET column = 'value' WHERE id = 1;
COMMIT;
-- или ROLLBACK;
Выгрузка данных во внешние источники
-- Выгрузка в файл (из командной строки)
mysql -u username -p -e "SELECT * FROM db_name.table_name" > output.csv
-- Использование SELECT INTO OUTFILE
SELECT * INTO OUTFILE '/tmp/result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM table_name;
-- Экспорт в JSON (через клиент)
SELECT JSON_OBJECT('id', id, 'name', name) FROM table_name;
Создание скриптов
-- Хранимые процедуры
DELIMITER //
CREATE PROCEDURE procedure_name(IN param1 INT)
BEGIN
SELECT * FROM table_name WHERE id = param1;
END //
DELIMITER ;
-- Вызов процедуры
CALL procedure_name(1);
-- Функции
DELIMITER //
CREATE FUNCTION function_name(param1 INT) RETURNS INT
BEGIN
DECLARE result INT;
SELECT COUNT(*) INTO result FROM table_name WHERE id > param1;
RETURN result;
END //
DELIMITER ;
-- Триггеры
DELIMITER //
CREATE TRIGGER trigger_name BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
IF NEW.column1 IS NULL THEN
SET NEW.column1 = 'default';
END IF;
END //
DELIMITER ;
-- Представления (VIEW)
CREATE VIEW view_name AS SELECT column1, column2 FROM table_name WHERE column3 > 100;
Загрузка данных из разных форматов
-- Загрузка из CSV
LOAD DATA INFILE '/path/to/file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
-- Импорт JSON
INSERT INTO table_name (column1, column2)
SELECT j->>'$.field1', j->>'$.field2'
FROM JSON_TABLE('[{"field1":"value1","field2":123}]', '$[*]'
COLUMNS (
j JSON PATH '$'
)
) AS j;
-- Использование mysqlimport (из командной строки)
mysqlimport --ignore-lines=1 --fields-terminated-by=, --local -u username -p db_name /path/to/file.csv
Этот гайд охватывает основные команды MySQL для работы с базами данных. Для более сложных операций рекомендуется обращаться к официальной документации MySQL.
2.1 - Восстановление пароля root в MySQL
Восстановление пароля root в MariaDB выполняется в несколько шагов: остановка сервиса, запуск в безопасном режиме (без проверки прав), смена пароля и перезагрузка. Вот подробная инструкция.
1. Остановка MySQL/MariaDB
Linux (systemd)
sudo systemctl stop mariadb
Linux (SysVinit)
sudo service mysql stop # или sudo /etc/init.d/mysql stop
Windows
(Или через «Службы» в services.msc
).
2. Запуск MySQL/MariaDB в безопасном режиме (без аутентификации)
sudo mysqld_safe --skip-grant-tables --skip-networking &
--skip-grant-tables
— отключает проверку паролей.
--skip-networking
— запрещает удалённые подключения (для безопасности).
Важно: Не закрывайте терминал, пока меняете пароль!
3. Подключение к MySQL/MariaDB без пароля
Откройте новый терминал и выполните:
Теперь вы в консоли MariaDB без пароля.
4. Смена пароля root
Способ 1 (для MariaDB 10.4 и новее)
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'новый_пароль';
Способ 2 (для старых версий)
USE mysql;
UPDATE user SET password=PASSWORD('новый_пароль') WHERE User='root';
FLUSH PRIVILEGES;
Если root привязан к unix_socket
(например, в Debian/Ubuntu)
UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'новый_пароль';
FLUSH PRIVILEGES;
5. Выход и перезапуск MySQL/MariaDB
-
Выйдите из MySQL-консоли:
-
Завершите процесс mysqld_safe
:
-
Перезапустите MariaDB в обычном режиме:
sudo systemctl start mariadb # или sudo service mysql start
6. Проверка нового пароля
Введите новый пароль. Если вход удался — пароль восстановлен!
Дополнительные сценарии
Если root не имеет прав (ошибка доступа)
Попробуйте создать временного пользователя с правами root:
GRANT ALL PRIVILEGES ON *.* TO 'tempadmin'@'localhost' IDENTIFIED BY 'temp_pass';
FLUSH PRIVILEGES;
После этого войдите как tempadmin
и смените пароль root.
Windows (если mysqld_safe недоступен)
-
Откройте командную строку от имени администратора.
-
Перейдите в папку с MariaDB (например, C:\Program Files\MariaDB\bin
).
-
Запустите:
mysqld --skip-grant-tables
-
В другом окне выполните mysql -u root
и смените пароль.
Важно!
-
Запишите новый пароль в надёжное место.
-
Удалите анонимных пользователей (если есть):
DROP USER ''@'localhost';
-
Настройте брандмауэр, чтобы запретить внешний доступ к порту 3306, если это не требуется.
Итог
- Остановили MariaDB.
- Запустили в безопасном режиме.
- Вошли без пароля и обновили его.
- Перезапустили сервис.
Если что-то пошло не так — проверьте логи (/var/log/mysql/error.log
) и попробуйте снова.
3 - Справочный гайд по командам SQLite
Основные команды по управлению базой данных SQLite. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов
Полное руководство по SQLite: от установки до продвинутого использования
Оглавление
- Введение в SQLite
- Установка SQLite
- Основы работы с SQLite
- Управление базами данных
- Работа с таблицами
- Типы данных
- CRUD-операции
- Индексы и оптимизация
- Транзакции
- Представления и триггеры
- Импорт и экспорт данных
- Интеграция с языками программирования
- Оптимизация производительности
- Резервное копирование
- Безопасность
Введение в SQLite
SQLite — это встраиваемая реляционная СУБД, которая:
- Не требует сервера (работает с файлами напрямую)
- Поддерживает стандартный SQL
- Имеет минимальные требования к ресурсам
- Используется в мобильных приложениях, браузерах и встроенных системах
Установка SQLite
Windows
- Скачать предварительно скомпилированные бинарники с официального сайта
- Добавить путь к sqlite3.exe в переменную PATH
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install sqlite3 libsqlite3-dev
MacOS
Проверка установки
Основы работы с SQLite
Запуск интерфейса командной строки
Основные команды интерфейса
.help -- Показать все команды
.tables -- Показать список таблиц
.schema -- Показать структуру таблиц
.mode -- Изменить режим вывода (csv, column, json и др.)
.headers on -- Показать заголовки столбцов
.quit -- Выйти из интерфейса
Управление базами данных
Создание/открытие базы данных
Резервное копирование
-- В командной строке SQLite:
.output backup.sql
.dump
.output stdout
-- Или через командную строку ОС:
sqlite3 database.db .dump > backup.sql
Восстановление из резервной копии
sqlite3 newdatabase.db < backup.sql
Работа с таблицами
Создание таблицы
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL UNIQUE,
age INTEGER,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
Изменение таблицы
-- Добавление столбца
ALTER TABLE users ADD COLUMN is_active INTEGER DEFAULT 1;
-- Удаление таблицы
DROP TABLE users;
Ограничения (Constraints)
CREATE TABLE products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL CHECK(price > 0),
category_id INTEGER REFERENCES categories(id),
UNIQUE(name, category_id)
);
Типы данных в SQLite
SQLite использует динамическую типизацию. Основные типы:
NULL
- значение NULL
INTEGER
- целое число
REAL
- число с плавающей точкой
TEXT
- текстовая строка
BLOB
- бинарные данные
CRUD-операции
Вставка данных (Create)
INSERT INTO users (username, email, age)
VALUES ('john_doe', 'john@example.com', 30);
-- Множественная вставка
INSERT INTO users (username, email, age)
VALUES
('alice', 'alice@example.com', 25),
('bob', 'bob@example.com', 28);
Чтение данных (Read)
-- Простой запрос
SELECT * FROM users;
-- С условиями
SELECT username, email FROM users WHERE age > 25;
-- Сортировка
SELECT * FROM users ORDER BY age DESC;
-- Группировка
SELECT age, COUNT(*) FROM users GROUP BY age;
-- Ограничение вывода
SELECT * FROM users LIMIT 10 OFFSET 5;
Обновление данных (Update)
UPDATE users SET age = 31 WHERE username = 'john_doe';
Удаление данных (Delete)
DELETE FROM users WHERE id = 5;
Индексы и оптимизация
Создание индекса
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_age ON users(age);
Удаление индекса
DROP INDEX idx_users_email;
Анализ запросов
EXPLAIN QUERY PLAN SELECT * FROM users WHERE email = 'john@example.com';
Транзакции
Использование транзакций
BEGIN TRANSACTION;
INSERT INTO accounts (user_id, balance) VALUES (1, 1000);
UPDATE users SET last_transaction = CURRENT_TIMESTAMP WHERE id = 1;
COMMIT;
-- В случае ошибки:
ROLLBACK;
Представления и триггеры
Создание представления
CREATE VIEW active_users AS
SELECT * FROM users WHERE is_active = 1;
Создание триггера
CREATE TRIGGER update_timestamp
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
UPDATE users SET updated_at = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;
Импорт и экспорт данных
Импорт из CSV
.mode csv
.import data.csv tablename
Экспорт в CSV
.headers on
.mode csv
.output data.csv
SELECT * FROM tablename;
.output stdout
Импорт/экспорт JSON
-- Для работы с JSON требуется SQLite версии 3.38.0+
SELECT json_object('id', id, 'name', username) FROM users;
Интеграция с языками программирования
Python
import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
conn.close()
Node.js
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('database.db');
db.all("SELECT * FROM users", (err, rows) => {
console.log(rows);
});
db.close();
Оптимизация производительности
- Используйте транзакции для групповых операций
- Создавайте индексы для часто используемых полей
- Используйте
PRAGMA
команды для настройки:
PRAGMA journal_mode = WAL; -- Режим записи журнала
PRAGMA synchronous = NORMAL; -- Баланс между надежностью и скоростью
PRAGMA cache_size = -2000; -- Размер кеша в KB
Резервное копирование
Полное резервное копирование
sqlite3 database.db ".backup backup.db"
Инкрементное резервное копирование
Используйте API SQLite для реализации инкрементного бэкапа в вашем приложении.
Безопасность
- Проверяйте входные данные перед выполнением SQL-запросов
- Используйте параметризованные запросы:
# Python пример
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
- Ограничивайте права доступа к файлу базы данных на уровне ОС
Заключение
SQLite — мощная и легковесная СУБД, идеально подходящая для:
- Мобильных приложений
- Встраиваемых систем
- Локальных приложений
- Тестирования и прототипирования
Для более сложных сценариев обратитесь к официальной документации.
4 - Полное руководство по MongoDB: от основ до работы с JSON
Основные команды по управлению базой данных MongoDB. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов
Оглавление
- Введение в MongoDB
- Установка MongoDB
- Подключение к базе
- Основные операции CRUD
- Работа с коллекциями
- Запросы и агрегации
- Индексы и оптимизация
- Транзакции
- Работа с JSON
- Интеграция с языками программирования
- Безопасность и администрирование
- Резервное копирование
1. Введение в MongoDB
MongoDB — это NoSQL-база данных, которая хранит данные в документах JSON-подобного формата (BSON).
🔹 Ключевые особенности:
- Гибкая схема (документы могут иметь разную структуру)
- Горизонтальная масштабируемость (шардирование)
- Поддержка сложных запросов и агрегаций
- Встроенная работа с JSON
🔹 Основные понятия:
- Документ ≈ строка в SQL (хранится в BSON)
- Коллекция ≈ таблица в SQL
- База данных ≈ схема в SQL
2. Установка MongoDB
Linux (Ubuntu/Debian)
# Импорт ключа и добавление репозитория
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -sc)/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
# Установка MongoDB
sudo apt update
sudo apt install mongodb-org
# Запуск сервиса
sudo systemctl start mongod
sudo systemctl enable mongod
Windows
- Скачайте установщик с официального сайта
- Запустите
.msi
файл
- Добавьте
C:\Program Files\MongoDB\Server\<версия>\bin
в PATH
MacOS (Homebrew)
brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-community
Проверка работы
mongosh # Запуск оболочки MongoDB
3. Подключение к базе
Через mongosh
(CLI)
mongosh "mongodb://localhost:27017" # Локальное подключение
mongosh "mongodb://user:pass@host:27017/dbname" # С аутентификацией
В Node.js (драйвер mongodb
)
const { MongoClient } = require('mongodb');
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);
async function connect() {
try {
await client.connect();
console.log("Connected to MongoDB");
const db = client.db("mydb");
const collection = db.collection("users");
// ... операции с коллекцией
} finally {
await client.close();
}
}
connect();
4. Основные операции CRUD
Вставка документов (insertOne
, insertMany
)
// Вставка одного документа
db.users.insertOne({
name: "Alice",
age: 25,
skills: ["JavaScript", "MongoDB"]
});
// Вставка нескольких документов
db.users.insertMany([
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 22 }
]);
Поиск (find
, findOne
)
// Найти всех пользователей
db.users.find();
// Найти пользователей старше 25
db.users.find({ age: { $gt: 25 } });
// Найти первого пользователя с именем "Alice"
db.users.findOne({ name: "Alice" });
Обновление (updateOne
, updateMany
)
// Обновить возраст Alice
db.users.updateOne(
{ name: "Alice" },
{ $set: { age: 26 } }
);
// Увеличить возраст всех пользователей на 1
db.users.updateMany(
{},
{ $inc: { age: 1 } }
);
Удаление (deleteOne
, deleteMany
)
// Удалить пользователя Bob
db.users.deleteOne({ name: "Bob" });
// Удалить всех младше 18
db.users.deleteMany({ age: { $lt: 18 } });
5. Работа с коллекциями
Создание и удаление коллекций
// Создать коллекцию
db.createCollection("products");
// Удалить коллекцию
db.products.drop();
Переименование коллекции
db.products.renameCollection("items");
6. Запросы и агрегации
Операторы сравнения
db.users.find({ age: { $gt: 20, $lte: 30 } }); // Возраст > 20 и ≤ 30
db.users.find({ name: { $regex: /^A/ } }); // Имя начинается на "A"
Агрегация ($match
, $group
, $sort
)
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$customer", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } }
]);
7. Индексы и оптимизация
Создание индекса
db.users.createIndex({ email: 1 }); // Уникальный индекс
db.users.createIndex({ name: "text" }); // Текстовый поиск
Просмотр индексов
8. Транзакции
const session = client.startSession();
try {
session.startTransaction();
await db.users.updateOne(
{ name: "Alice" },
{ $inc: { balance: -100 } },
{ session }
);
await db.users.updateOne(
{ name: "Bob" },
{ $inc: { balance: 100 } },
{ session }
);
await session.commitTransaction();
} catch (e) {
await session.abortTransaction();
} finally {
session.endSession();
}
9. Работа с JSON
Экспорт данных в JSON
mongoexport --db=mydb --collection=users --out=users.json --jsonArray
Импорт JSON в MongoDB
mongoimport --db=mydb --collection=users --file=users.json --jsonArray
Запросы к JSON-полям
db.users.find({
"address.city": "New York" // Обращение к вложенным полям
});
10. Интеграция с языками
Python (PyMongo)
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
db = client["mydb"]
collection = db["users"]
collection.insert_one({"name": "Alice"})
Go (MongoDB Driver)
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://localhost:27017"))
collection := client.Database("mydb").Collection("users")
_, err = collection.InsertOne(context.TODO(), bson.D{{"name", "Alice"}})
11. Безопасность
Включение аутентификации
use admin
db.createUser({
user: "admin",
pwd: "securepassword",
roles: ["root"]
});
Запуск MongoDB с аутентификацией
12. Резервное копирование
Экспорт (mongodump
)
mongodump --db=mydb --out=/backup
Восстановление (mongorestore
)
mongorestore --db=mydb /backup/mydb
Заключение
MongoDB — мощная NoSQL-база, идеальная для:
- Гибких схем данных
- Масштабируемых приложений
- Работы с JSON
📌 Документация: https://docs.mongodb.com
5 - Полное руководство по OpenSearch: установка, настройка и использование
Основные команды по управлению базой данных OpenSearch. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов
Оглавление
- Введение в OpenSearch
- Установка OpenSearch
- Настройка кластера
- Основные операции с индексами
- Работа с данными (CRUD)
- Поиск и агрегации
- Индексы и маппинги
- Безопасность и RBAC
- Мониторинг и логирование
- Резервное копирование
- Интеграция с Logstash и Kibana
- Использование в Python и Go
1. Введение в OpenSearch
OpenSearch — это форк Elasticsearch, созданный AWS после изменения лицензии Elastic.
🔹 Ключевые возможности:
- Полнотекстовый поиск
- Анализ логов и временных рядов
- Поддержка REST API
- Масштабируемость и отказоустойчивость
🔹 Основные компоненты:
- OpenSearch — ядро поиска и аналитики
- OpenSearch Dashboards (аналог Kibana) — визуализация данных
- Logstash (опционально) — сбор и обработка данных
2. Установка OpenSearch
Linux (Debian/Ubuntu)
# Добавление репозитория OpenSearch
echo "deb https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list
# Установка
wget -qO - https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo apt-key add -
sudo apt update
sudo apt install opensearch
Запуск сервиса
sudo systemctl start opensearch
sudo systemctl enable opensearch
Проверка работы
curl -X GET "https://localhost:9200" -u 'admin:admin' --insecure
Ответ:
{
"name" : "opensearch-node1",
"cluster_name" : "opensearch-cluster",
"version" : {
"distribution" : "opensearch",
"number" : "2.11.0"
}
}
3. Настройка кластера
Конфигурация находится в /etc/opensearch/opensearch.yml
.
Базовая настройка
cluster.name: opensearch-cluster
node.name: opensearch-node1
network.host: 0.0.0.0
discovery.type: single-node # Для однодоступной конфигурации
plugins.security.disabled: false # Включить безопасность
Настройка кластера из нескольких узлов
discovery.seed_hosts: ["node1:9300", "node2:9300"]
cluster.initial_master_nodes: ["node1", "node2"]
4. Основные операции с индексами
Создание индекса
curl -X PUT "https://localhost:9200/my-index" -u 'admin:admin' --insecure
Удаление индекса
curl -X DELETE "https://localhost:9200/my-index" -u 'admin:admin' --insecure
Просмотр списка индексов
curl -X GET "https://localhost:9200/_cat/indices?v" -u 'admin:admin' --insecure
5. Работа с данными (CRUD)
Добавление документа
curl -X POST "https://localhost:9200/my-index/_doc/1" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"title": "OpenSearch Guide",
"author": "admin",
"tags": ["search", "database"]
}'
Получение документа
curl -X GET "https://localhost:9200/my-index/_doc/1" -u 'admin:admin' --insecure
Обновление документа
curl -X POST "https://localhost:9200/my-index/_update/1" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"doc": {
"author": "new-author"
}
}'
Удаление документа
curl -X DELETE "https://localhost:9200/my-index/_doc/1" -u 'admin:admin' --insecure
6. Поиск и агрегации
Простой поиск
curl -X GET "https://localhost:9200/my-index/_search?q=title:OpenSearch" -u 'admin:admin' --insecure
Сложный запрос (JSON-тело)
curl -X GET "https://localhost:9200/my-index/_search" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"query": {
"match": {
"title": "OpenSearch"
}
}
}'
Агрегации (группировка по тегам)
curl -X GET "https://localhost:9200/my-index/_search" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"aggs": {
"tag_counts": {
"terms": { "field": "tags.keyword" }
}
}
}'
7. Индексы и маппинги
Создание индекса с маппингом
curl -X PUT "https://localhost:9200/books" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"mappings": {
"properties": {
"title": { "type": "text" },
"year": { "type": "integer" }
}
}
}'
Добавление нового поля
curl -X PUT "https://localhost:9200/books/_mapping" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"properties": {
"author": { "type": "keyword" }
}
}'
8. Безопасность и RBAC
Создание пользователя
curl -X PUT "https://localhost:9200/_plugins/_security/api/internalusers/user1" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"password": "secure123",
"backend_roles": ["readers"]
}'
Назначение роли
curl -X PUT "https://localhost:9200/_plugins/_security/api/roles/read_only" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"cluster_permissions": [],
"index_permissions": [{
"index_patterns": ["*"],
"allowed_actions": ["read"]
}]
}'
9. Мониторинг и логирование
Проверка состояния кластера
curl -X GET "https://localhost:9200/_cluster/health" -u 'admin:admin' --insecure
Логи OpenSearch
tail -f /var/log/opensearch/opensearch.log
10. Резервное копирование
Использование Snapshot API
curl -X PUT "https://localhost:9200/_snapshot/my-backup" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"type": "fs",
"settings": {
"location": "/backups/opensearch"
}
}'
Создание снепшота
curl -X PUT "https://localhost:9200/_snapshot/my-backup/snapshot-1" -u 'admin:admin' --insecure
11. Интеграция с Logstash и OpenSearch Dashboards
Настройка Logstash для отправки данных
input {
file {
path => "/var/log/app.log"
start_position => "beginning"
}
}
output {
opensearch {
hosts => ["https://localhost:9200"]
index => "app-logs"
user => "admin"
password => "admin"
ssl_certificate_verification => false
}
}
Запуск OpenSearch Dashboards
sudo systemctl start opensearch-dashboards
Доступно по адресу: http://localhost:5601
12. Использование в Python и Go
Python (opensearch-py)
from opensearchpy import OpenSearch
client = OpenSearch(
hosts=["https://localhost:9200"],
http_auth=("admin", "admin"),
verify_certs=False
)
response = client.index(
index="my-index",
body={"title": "Python OpenSearch Guide"}
)
Go (opensearch-go)
package main
import (
"context"
"github.com/opensearch-project/opensearch-go"
)
func main() {
client, err := opensearch.NewClient(opensearch.Config{
Addresses: []string{"https://localhost:9200"},
Username: "admin",
Password: "admin",
})
res, err := client.Index(
"my-index",
strings.NewReader(`{"title": "Go OpenSearch Guide"}`),
)
}
Официальная документация: https://opensearch.org/docs