Як переглянути список баз даних 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.x | MariaDB 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.sockERROR 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 зазвичай зберігається для сумісності.
