Установка 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
Примечания
-
Для 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.