Справочный гайд по командам 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 -u root -p

Создание нового пользователя (из консоли 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

Примечания

  1. Для MySQL 8.0+ используется новый плагин аутентификации caching_sha2_password, что может вызвать проблемы с некоторыми старыми клиентами. Можно изменить на старый плагин:

    ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    
  2. В некоторых дистрибутивах (особенно Manjaro/Arch) MariaDB является заменой MySQL по умолчанию.

  3. Для 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.