Это многостраничный печатный вид этого раздела. Нажмите что бы печатать.

Вернуться к обычному просмотру страницы.

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

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

net stop mariadb

(Или через «Службы» в services.msc).


2. Запуск MySQL/MariaDB в безопасном режиме (без аутентификации)

sudo mysqld_safe --skip-grant-tables --skip-networking &
  • --skip-grant-tables — отключает проверку паролей.
  • --skip-networking — запрещает удалённые подключения (для безопасности).

Важно: Не закрывайте терминал, пока меняете пароль!


3. Подключение к MySQL/MariaDB без пароля

Откройте новый терминал и выполните:

mysql -u root

Теперь вы в консоли 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

  1. Выйдите из MySQL-консоли:

    EXIT;
    
  2. Завершите процесс mysqld_safe:

    sudo killall mysqld_safe
    
  3. Перезапустите MariaDB в обычном режиме:

    sudo systemctl start mariadb  # или sudo service mysql start
    

6. Проверка нового пароля

mysql -u root -p

Введите новый пароль. Если вход удался — пароль восстановлен!


Дополнительные сценарии

Если root не имеет прав (ошибка доступа)

Попробуйте создать временного пользователя с правами root:

GRANT ALL PRIVILEGES ON *.* TO 'tempadmin'@'localhost' IDENTIFIED BY 'temp_pass';
FLUSH PRIVILEGES;

После этого войдите как tempadmin и смените пароль root.

Windows (если mysqld_safe недоступен)

  1. Откройте командную строку от имени администратора.

  2. Перейдите в папку с MariaDB (например, C:\Program Files\MariaDB\bin).

  3. Запустите:

    mysqld --skip-grant-tables
    
  4. В другом окне выполните mysql -u root и смените пароль.


Важно!

  • Запишите новый пароль в надёжное место.

  • Удалите анонимных пользователей (если есть):

    DROP USER ''@'localhost';
    
  • Настройте брандмауэр, чтобы запретить внешний доступ к порту 3306, если это не требуется.


Итог

  1. Остановили MariaDB.
  2. Запустили в безопасном режиме.
  3. Вошли без пароля и обновили его.
  4. Перезапустили сервис.

Если что-то пошло не так — проверьте логи (/var/log/mysql/error.log) и попробуйте снова.