Запуск MySQL та MariaDB-запитів з Linux CLI
Під час адміністрування баз даних часто виникає потреба швидко виконати SQL-запит і уважно проаналізувати результат. Зазвичай це роблять через MySQL або MariaDB shell, але командний рядок Linux дає більше гнучкості: ви можете виконувати запити напряму, зберігати результати у файли, передавати їх в інші утиліти та автоматизувати процеси.
У цьому гайді ви побачите, як виконувати MySQL/MariaDB-запити без входу в інтерактивну консоль і як ефективно працювати з результатами — від простих вибірок до складних багаторядкових запитів.
Підготовка тестових баз даних
Перед тим як переходити до прикладів, підготуємо бази даних, з якими будемо працювати протягом усього гайду. Це дозволить вам повторювати всі кроки локально та експериментувати без ризику для робочих даних.
Ми використаємо:
tecmintdb— для простих запитів;employees— для складніших прикладів із JOIN та агрегаціями.
Створення бази даних tecmintdb
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS tecmintdb;"
Ця команда створює базу даних tecmintdb, якщо вона ще не існує.
Створення та наповнення таблиці tutorials
sudo mysql -u root -p tecmintdb << 'EOF'
CREATE TABLE IF NOT EXISTS tutorials (
tut_id INT NOT NULL AUTO_INCREMENT,
tut_title VARCHAR(100) NOT NULL,
tut_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY (tut_id)
);
INSERT INTO tutorials (tut_title, tut_author, submission_date) VALUES
('Getting Started with Linux', 'John Smith', '2024-01-15'),
('Advanced Bash Scripting', 'Sarah Johnson', '2024-02-20'),
('MySQL Database Administration', 'Mike Williams', '2024-03-10'),
('Apache Web Server Configuration', 'Emily Brown', '2024-04-05'),
('Python for System Administrators', 'David Lee', '2024-05-12'),
('Docker Container Basics', 'Lisa Anderson', '2024-06-18'),
('Kubernetes Orchestration', 'Robert Taylor', '2024-07-22'),
('Linux Security Hardening', 'Jennifer Martinez', '2024-08-30');
EOF
Тут ми:
- створюємо таблицю
tutorials; - одразу додаємо тестові записи.
Перевірка даних у таблиці tutorials
sudo mysql -u root -p -e "USE tecmintdb; SELECT * FROM tutorials;"
Цей запит дозволяє переконатися, що таблиця створена коректно і всі дані успішно вставлені.
Створення бази даних employees
Тепер підготуємо складнішу структуру, яку будемо використовувати для прикладів із JOIN та підзапитами.
sudo mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS employees;"
Таблиця employees
sudo mysql -u root -p employees << 'EOF'
CREATE TABLE IF NOT EXISTS employees (
emp_no INT NOT NULL AUTO_INCREMENT,
birth_date DATE NOT NULL,
first_name VARCHAR(14) NOT NULL,
last_name VARCHAR(16) NOT NULL,
gender ENUM('M','F') NOT NULL,
hire_date DATE NOT NULL,
PRIMARY KEY (emp_no)
);
INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES
(10001, '1953-09-02', 'Georgi', 'Facello', 'M', '1984-06-02'),
(10002, '1964-06-02', 'Bezalel', 'Simmel', 'F', '1984-11-21'),
(10003, '1959-12-03', 'Parto', 'Bamford', 'M', '1984-08-28'),
(10004, '1954-05-01', 'Chirstian', 'Koblick', 'M', '1984-12-01'),
(10005, '1955-01-21', 'Kyoichi', 'Maliniak', 'M', '1984-09-15'),
(10006, '1953-04-20', 'Anneke', 'Preusig', 'F', '1985-02-18'),
(10007, '1957-05-23', 'Tzvetan', 'Zielinski', 'F', '1985-03-20'),
(10008, '1958-02-19', 'Saniya', 'Kalloufi', 'M', '1984-07-11'),
(10009, '1952-04-19', 'Sumant', 'Peac', 'F', '1985-02-18'),
(10010, '1963-06-01', 'Duangkaew', 'Piveteau', 'F', '1984-08-24');
EOF
Це основна таблиця зі співробітниками. Вона містить персональні дані та дату прийняття на роботу, які знадобляться для фільтрації та аналітики.
Таблиця salaries
sudo mysql -u root -p employees << 'EOF'
CREATE TABLE IF NOT EXISTS salaries (
emp_no INT NOT NULL,
salary INT NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
PRIMARY KEY (emp_no, from_date),
FOREIGN KEY (emp_no) REFERENCES employees(emp_no) ON DELETE CASCADE
);
...
EOF
Таблиця зберігає історію зарплат.
Зовнішній ключ гарантує цілісність даних і автоматичне очищення записів при видаленні співробітника.
Таблиця departments
sudo mysql -u root -p employees << 'EOF'
CREATE TABLE IF NOT EXISTS departments (
dept_no CHAR(4) NOT NULL,
dept_name VARCHAR(40) NOT NULL,
PRIMARY KEY (dept_no),
UNIQUE KEY (dept_name)
);
...
EOF
Тут зберігається довідник департаментів, який використовується для побудови складних JOIN-запитів.
Таблиця dept_emp
sudo mysql -u root -p employees << 'EOF'
CREATE TABLE IF NOT EXISTS dept_emp (
emp_no INT NOT NULL,
dept_no CHAR(4) NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
PRIMARY KEY (emp_no, dept_no),
FOREIGN KEY (emp_no) REFERENCES employees(emp_no) ON DELETE CASCADE,
FOREIGN KEY (dept_no) REFERENCES departments(dept_no) ON DELETE CASCADE
);
...
EOF
Вона повʼязує співробітників із департаментами та дозволяє відстежувати історію переведень.
Перевірка структури бази employees
Перед тим як працювати з таблицями, корисно перевірити, що база даних employees і всі таблиці створені правильно. Це дозволяє переконатися, що структура готова для подальших запитів.
Зробити це можна за такою командою:
sudo mysql -u root -p -e "USE employees; SHOW TABLES;"
Базове виконання запитів
Щоб швидко отримати перелік усіх баз даних на сервері без входу в MySQL shell, можна використати таку команду:
sudo mysql -u root -p -e "show databases;"
Ви побачите всі доступні бази даних. Це корисно на старті роботи, щоб орієнтуватися, з чим можна працювати.
Збереження результатів запиту у файл
Іноді потрібно виконати запит і одночасно зберегти результати для подальшого аналізу або передачі колегам. Для цього використовують команду з tee:
sudo mysql -u root -p -e "USE employees; SELECT DISTINCT A.first_name, A.last_name FROM employees A JOIN salaries B ON A.emp_no = B.emp_no WHERE hire_date < '1985-01-31';" | tee queryresults.txt
MySQL виконує запит, а tee:
- показує результат у терміналі;
- паралельно записує його у файл queryresults.txt.
cat queryresults.txt
Ця команда дозволяє швидко переглянути збережені результати прямо у терміналі.
Вертикальний формат виводу
Якщо таблиця має багато колонок, горизонтальна таблиця може виглядати незручно. Вертикальний формат допомагає краще читати дані:
sudo mysql -u root -p -e "USE employees; SELECT * FROM employees LIMIT 1\G"
Опція \G змінює формат відображення рядка: кожне поле починається з нового рядка, що робить дані більш зручними для перегляду.
Експорт результатів у CSV
Щоб імпортувати дані в Excel або Google Sheets, результати запиту потрібно перевести у CSV:
sudo mysql -u root -p -e "USE employees; SELECT first_name, last_name, hire_date FROM employees WHERE hire_date < '1985-01-31';" | sed 's/\t/,/g' > employees.csv
Команда замінює символи табуляції на коми і створює готовий CSV-файл.
Запуск запитів без введення пароля
Для автоматизації завдань з MySQL можна зберегти облікові дані у конфігураційному файлі:
[client]
user=root
password=your_password_here
chmod 600 ~/.my.cnf
Після цього запити можна виконувати без параметра -p і без введення пароля вручну. Використовуйте цей метод лише на серверах із контрольованим доступом, бо пароль зберігається у відкритому вигляді.
Виконання багаторядкових запитів з файлу
Якщо запит занадто складний для однієї команди, його зручно зберігати у SQL-файлі:
cat > complex_query.sql << 'EOF'
...
EOF
sudo mysql -u root -p < complex_query.sql > top_earners_1985.txt
Такий підхід дозволяє організовано виконувати великі запити, легко повторювати їх і навіть версіонувати через git.
Робота з великими наборами даних
Коли обробляєте великі таблиці або дані з багатьма спеціальними символами, потрібно контролювати формат та памʼять:
sudo mysql -u root -p --batch --raw -e "SELECT description FROM products WHERE category='electronics';" > products.txt
Параметри --batch --raw роблять вивід чистим і придатним для обробки скриптами.
sudo mysql -u root -p --quick -e "SELECT * FROM huge_table;" | gzip > huge_results.txt.gz
Швидкі резервні копії
Для швидкого створення бекапу всієї бази застосуйте:
sudo mysqldump -u root -p employees | gzip > employees_backup_$(date +%Y%m%d).sql.gz
Або бекап лише критичних таблиць:
sudo mysqldump -u root -p employees employees salaries | gzip > critical_tables_$(date +%Y%m%d).sql.gz
Це дозволяє швидко зберегти дані та при необхідності відновити їх без використання складних GUI.
Підсумок
Командний рядок Linux дає змогу працювати з MySQL та MariaDB швидко, гнучко та масштабовано. Ви можете виконувати запити, зберігати результати, автоматизувати звіти й інтегрувати роботу з базами у власні скрипти та пайплайни без потреби у важких GUI-інструментах.
А якщо потрібно отримати навички на практиці — летс гоу на курси від ITEDU. Це провідний навчальний центр у DevOps, системному адмініструванні та суміжних сферах з понад 10-річним досвідом.