15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
15.10.2024
3 +1

Як переглянути список баз даних MySQL через командний рядок у Linux

Виведення списку всіх баз даних MySQL з командного рядка виконується за допомогою одного SQL-оператора — SHOW DATABASES; — після автентифікації на сервері MySQL за допомогою клієнта mysql. Це працює на будь-якому дистрибутиві Linux з MySQL 5.7, MySQL 8.x або сумісним сервером MariaDB і вимагає або привілею SHOW DATABASES, або доступу суперкористувача.

Цей посібник виходить за рамки базової команди. Він охоплює параметри автентифікації, видимість з урахуванням привілеїв, шаблони неінтерактивного скриптингу, фільтрацію схеми продуктивності та типові збої, які трапляються навіть у досвідчених адміністраторів.

Передумови

Перед початком роботи переконайтеся в наступному:

  • MySQL Server або MariaDB встановлено, і служба активна.
  • У вас є обліковий запис користувача принаймні з привілеєм SHOW DATABASES, або ви автентифікуєтеся як root.
  • Бінарний файл клієнта mysql доступний у PATH вашої оболонки (перевірте за допомогою which mysql).

Якщо ви керуєте віддаленим сервером — наприклад, середовищем VPS Хостингу — також переконайтеся, що порт MySQL (за замовчуванням 3306) доступний або що ви підключаєтеся через SSH.

Крок 1: Перевірте, чи запущена служба MySQL

Перед спробою підключення переконайтеся, що демон активний:

sudo systemctl status mysql

Для встановлень MariaDB назва служби відрізняється:

sudo systemctl status mariadb

Якщо служба зупинена, запустіть її:

sudo systemctl start mysql

Невдалий запуск майже завжди пояснюється в journalctl -xe або в /var/log/mysql/error.log. Перевірте ці файли перш ніж припускати проблему конфігурації.

Крок 2: Автентифікація на сервері MySQL

Стандартний інтерактивний вхід

mysql -u root -p
  • -u root — вказує ім’я користувача MySQL. Замініть root на будь-який дійсний обліковий запис.
  • -p — запитує пароль в інтерактивному режимі. Ніколи не передавайте пароль безпосередньо в командному рядку у виробничому середовищі (наприклад, -pMyPassword), оскільки він буде видимий у списках процесів та історії оболонки.

Після введення правильного пароля з’являється підказка MySQL:

mysql>

Підключення до віддаленого хоста або нестандартного порту

mysql -u root -p -h 192.168.1.100 -P 3307
  • -h — вказує IP-адресу або ім’я хоста віддаленого сервера.
  • -P — вказує нестандартний номер порту.

Використання файлу параметрів для автоматизації

Для скриптів і завдань cron зберігайте облікові дані в захищеному файлі параметрів замість того, щоб вбудовувати їх у команду:

# ~/.my.cnf
[client]
user=root
password=YourSecurePassword

Негайно обмежте дозволи після створення файлу:

chmod 600 ~/.my.cnf

Маючи цей файл, mysql автентифікується без будь-яких прапорів:

mysql

Крок 3: Виведення списку всіх баз даних

Перебуваючи в оболонці MySQL, виконайте:

SHOW DATABASES;

Приклад виводу на щойно встановленому екземплярі MySQL 8:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

Ці чотири системні схеми присутні в кожній стандартній установці MySQL:

СхемаПризначення
`information_schema`Віртуальна схема лише для читання, що надає метадані про всі інші схеми, таблиці, стовпці та привілеї
`mysql`Основні таблиці привілеїв, дані часових поясів та конфігурація сервера
`performance_schema`Низькорівневі дані інструментування для профілювання запитів і діагностики
`sys`Зручні для читання представлення, побудовані на основі `performance_schema`

Бази даних, створені користувачем, відображаються поряд із цими системними схемами.

Крок 4: Фільтрація списку баз даних

Фільтрація за шаблоном імені

SHOW DATABASES приймає речення LIKE, що корисно, коли сервер містить десятки баз даних:

SHOW DATABASES LIKE 'wp_%';

Це повертає лише бази даних, імена яких починаються з wp_ — поширена угода про іменування для встановлень WordPress.

Запит до information_schema для розширеної фільтрації

Для більш точної фільтрації запитайте таблицю information_schema.SCHEMATA безпосередньо:

SELECT schema_name, default_character_set_name, default_collation_name
FROM information_schema.SCHEMATA
WHERE schema_name NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
ORDER BY schema_name;

Цей підхід дозволяє фільтрувати за набором символів, зіставленням або будь-яким іншим стовпцем метаданих — те, чого SHOW DATABASES не може зробити.

Крок 5: Перегляд конкретної бази даних

Щоб переглянути вміст конкретної бази даних, переключіть контекст за допомогою USE і потім виведіть список її таблиць:

USE database_name;
SHOW TABLES;

Щоб переглянути розміри таблиць, кількість рядків і рушії зберігання в одному запиті:

SELECT
  table_name,
  engine,
  table_rows,
  ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.TABLES
WHERE table_schema = 'database_name'
ORDER BY (data_length + index_length) DESC;

Це набагато інформативніше, ніж SHOW TABLES окремо, і саме такий запит DBA виконує перед плануванням міграції або стратегії резервного копіювання.

Крок 6: Вихід з оболонки MySQL

EXIT;

Або скористайтеся комбінацією клавіш Ctrl+D.

Неінтерактивне використання: виведення списку баз даних з оболонки

В автоматизованих конвеєрах — скриптах резервного копіювання, агентах моніторингу, хуках розгортання — вам потрібно отримати список баз даних без входу в інтерактивний сеанс.

Однорядкова команда з прапором -e

mysql -u root -p -e "SHOW DATABASES;"

Приховування рядка заголовка для скриптингу

mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null

Прапор --skip-column-names видаляє заголовок Database, створюючи чистий вивід, придатний для ітерації в циклі оболонки:

for db in $(mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null); do
  echo "Processing: $db"
done

Використання mysqlshow як альтернативи

Утиліта mysqlshow надає швидкий огляд без входу в оболонку MySQL:

mysqlshow -u root -p

Вона виводить список усіх баз даних, які може бачити автентифікований користувач, і приймає аргумент імені бази даних для деталізації на рівні таблиць:

mysqlshow -u root -p database_name

Область привілеїв: чому деякі бази даних приховані

Це одна з найбільш неправильно зрозумілих особливостей поведінки MySQL. Коли користувач не має глобального привілею SHOW DATABASES, SHOW DATABASES повертає лише ті бази даних, для яких цей користувач має принаймні один привілей. Це зроблено навмисно — це межа безпеки, а не помилка.

Практичне значення: Обмежений користувач програми може виконати SHOW DATABASES; і побачити лише одну або дві бази даних, навіть якщо сервер містить п’ятдесят. Це правильна поведінка. Якщо користувачу потрібно бачити повний список, надайте привілей явно:

GRANT SHOW DATABASES ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;

Використовуйте цей привілей обережно. У багатоорендних середовищах — таких як налаштування Спільного Веб-хостингу або розгортання Виділених Серверів для кількох клієнтів — надання повного списку баз даних користувачам програм є ризиком безпеки.

MySQL проти MariaDB: відмінності в поведінці

Як MySQL, так і MariaDB підтримують SHOW DATABASES; та information_schema.SCHEMATA, але є незначні відмінності, які варто знати:

ФункціяMySQL 8.xMariaDB 10.x
Синтаксис `SHOW DATABASES`ПідтримуєтьсяПідтримується
`information_schema.SCHEMATA`ДоступноДоступно
За замовчуванням `performance_schema`УвімкненоУвімкнено (10.5+)
Схема `sys`Включено за замовчуваннямНеобов’язково, не завжди присутня
`SHOW DATABASES LIKE`ПідтримуєтьсяПідтримується
Модель привілеїв на основі ролейНативна (8.0+)Нативна (10.0.5+)
Бінарний файл клієнта `mysql``mysql``mysql` або `mariadb`

На новіших установках MariaDB канонічним бінарним файлом може бути mariadb, а не mysql, хоча символічне посилання зазвичай зберігає зворотну сумісність.

Типові помилки та способи їх усунення

ERROR 1045 (28000): Access denied for user

Це означає, що автентифікація не вдалася. Перевірте ім’я користувача, пароль і хост. Для root в MySQL 8 плагін автентифікації за замовчуванням — caching_sha2_password. Якщо ваш клієнт не підтримує його, підключіться через сокет:

sudo mysql -u root

Це обходить автентифікацію за паролем при роботі від імені користувача Linux root, покладаючись натомість на плагін auth_socket або unix_socket.

ERROR 2002 (HY000): Can't connect to local MySQL server through socket

Демон MySQL не запущений або шлях до файлу сокета неправильний. Перевірте:

sudo systemctl status mysql
ls -la /var/run/mysqld/mysqld.sock

ERROR 1044 (42000): Access denied for user to database

Користувач автентифікований, але не має привілеїв для цільової бази даних. Перегляньте привілеї за допомогою:

SHOW GRANTS FOR 'username'@'host';

Практична матриця рішень

Використовуйте цей довідник для вибору правильного підходу для вашої ситуації:

СценарійРекомендована команда
Інтерактивне дослідження`SHOW DATABASES;` в оболонці `mysql`
Фільтрація за префіксом імені`SHOW DATABASES LIKE 'prefix_%';`
Виведення з метаданимиЗапит до `information_schema.SCHEMATA`
Скриптинг оболонки / автоматизація`mysql -e "SHOW DATABASES;" –skip-column-names`
Швидкий огляд без оболонки`mysqlshow -u root -p`
Віддалений сервер, нестандартний порт`mysql -u root -p -h host -P port`
Автоматизація без пароляФайл параметрів `~/.my.cnf` з `chmod 600`
Налагодження проблем доступу`SHOW GRANTS FOR 'user'@'host';`

Ключові технічні висновки

  • SHOW DATABASES; обмежений привілеями. Користувач без глобального SHOW DATABASES бачить лише бази даних, до яких має явний доступ — це функція безпеки, а не неправильна конфігурація.
  • Ніколи не передавайте паролі як аргументи командного рядка у виробничому середовищі. Використовуйте -p для інтерактивних сеансів і ~/.my.cnf для автоматизації.
  • information_schema.SCHEMATA значно потужніший за SHOW DATABASES для скриптованих або відфільтрованих запитів.
  • Утиліта mysqlshow недооцінена і забезпечує швидкий неінтерактивний огляд баз даних і таблиць.
  • У MySQL 8 автентифікація через сокет (sudo mysql) часто є найшвидшим способом отримати root-доступ на локальному сервері.
  • При управлінні кількома базами даних на VPS з cPanel або іншою панеллю керування, менеджер баз даних панелі є графічною оболонкою навколо тих самих SQL-команд — розуміння базових запитів дає вам повний контроль, коли графічний інтерфейс не справляється.
  • Для середовищ, де доступ до бази даних пов’язаний із SSL Сертифікатами та зашифрованими з’єднаннями, додайте --ssl-mode=REQUIRED до викликів клієнта mysql для забезпечення TLS під час передачі.

Часті запитання

П: Чому SHOW DATABASES не показує всі бази даних на моєму сервері?

В: Обліковий запис користувача, від імені якого ви автентифіковані, не має глобального привілею SHOW DATABASES. MySQL повертає лише ті бази даних, для яких цей користувач має принаймні один привілей. Автентифікуйтеся як root або надайте привілей SHOW DATABASES для перегляду повного списку.

П: У чому різниця між SHOW DATABASES і запитом до information_schema.SCHEMATA?

В: Обидва повертають список доступних схем, але information_schema.SCHEMATA надає додаткові стовпці метаданих — набір символів за замовчуванням, зіставлення за замовчуванням — і підтримує повну SQL-фільтрацію з WHERE, ORDER BY та JOIN. Використовуйте SHOW DATABASES для швидких інтерактивних перевірок і information_schema.SCHEMATA для скриптованих або аналітичних запитів.

П: Як вивести список баз даних на віддаленому сервері MySQL без відкриття інтерактивного сеансу?

В: Використовуйте прапор -e разом із параметрами хоста та порту:

mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-names

П: Чи можна вивести список баз даних MySQL, не знаючи пароля root?

В: На локальному сервері, де у вас є доступ Linux root, так. Плагін auth_socket MySQL (або unix_socket в MariaDB) автентифікує на основі користувача ОС Linux. Виконайте sudo mysql, і вам буде надано доступ як користувачу MySQL root без запиту пароля.

П: Чи працює SHOW DATABASES однаково в MariaDB і MySQL?

В: Синтаксис ідентичний, і правила обмеження привілеїв однакові. Основна практична відмінність полягає в тому, що MariaDB може не включати схему sys за замовчуванням, а в новіших версіях MariaDB бажаним бінарним файлом клієнта є mariadb, а не mysql, хоча псевдонім mysql зазвичай зберігається для сумісності.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати