RE:NODE

Базы данных11 мин чтения

GUI-клиенты MySQL: Workbench, DBeaver или HeidiSQL

Сравнение MySQL Workbench, DBeaver и HeidiSQL для удалённого сервера MySQL 8.4: как подключить каждый, настройки TLS и аутентификации и ошибки, которые им мешают.

0 прочтений

Для большинства ответ - DBeaver Community: бесплатный, работает на Windows, macOS и Linux, справляется с MySQL 8.4 без капризов, а потом тот же инструмент подойдёт для PostgreSQL и SQL Server. HeidiSQL - более быстрый и лёгкий выбор, если вы на Windows и в основном просматриваете и редактируете данные. MySQL Workbench - собственный инструмент Oracle, и его стоит выбрать, когда нужны моделирование схемы и визуальные планы запросов, ценой того, что он медленнее и капризнее остальных. Все три подключаются к удалённому серверу MySQL по одним и тем же пяти параметрам - хост, порт, пользователь, пароль и база данных - и не подключаются по одним и тем же немногим причинам, которые разобраны в этой статье вместе с настройкой каждого.

Что нужно, прежде чем открывать любой клиент#

Каждый клиент спрашивает одно и то же. Сначала соберите это:

ПолеПримерОткуда берётся
Хостdb.example.com или IPАдрес вашего сервера баз данных
Порт3306 или порт, выделенный вашему тарифуНа хостинговых серверах не всегда 3306
ПользовательappСозданный вами аккаунт или сгенерированный пользователь приложения
Пароль-Генерируется вместе с аккаунтом
База данныхappНеобязательно, но экономит клик

Используйте пользователя приложения, а лучше отдельный аккаунт для людей, а не root. В GUI очень легко выполнить DELETE не в той вкладке, а аккаунт, которому доступна только база данных приложения, ограничивает ущерб от одного неверного клика. Как сделать аккаунт только для чтения для просмотра данных - правильное умолчание для всех, кому нужно лишь смотреть, - показано в статье пользователи и привилегии в MySQL.

Два факта о MySQL 8.4 на стороне сервера решают, подключится ли клиент вообще:

  • Аутентификация. Аккаунты используют caching_sha2_password. Более старый плагин mysql_native_password в 8.4 по умолчанию отключён. Клиент на старой клиентской библиотеке - примерно на всём, что старше MySQL 8.0, - не может аутентифицироваться и падает с Authentication plugin 'caching_sha2_password' cannot be loaded. Актуальные версии всех трёх клиентов из этой статьи его поддерживают.
  • TLS. Сервер по умолчанию включает TLS с сертификатом, который генерирует сам. Клиенты могут шифровать с ним соединение, но не могут проверить его по публичному центру сертификации, пока вы не дадите им файл CA сервера.

Если можете, сначала проверьте соединение из терминала. Если mysql -h db.example.com -P 3306 -u app -p app работает, с сервером и сетью всё в порядке, и любая проблема в GUI - это настройка клиента. Клиент командной строки и режимы SSL подробно разобраны в статье удалённое подключение к MySQL.

Если клиент MySQL не установлен, всё равно можно проверить, доступен ли порт вообще, - это отделяет сетевые проблемы от проблем с аккаунтом ещё до того, как в дело вступит GUI:

bash
# Windows PowerShellTest-NetConnection db.example.com -Port 3306# macOS and Linux$ nc -vz db.example.com 3306

TcpTestSucceeded : True в Windows или succeeded / open от nc означают, что что-то слушает порт и ваша сеть позволяет до него достучаться. Таймаут значит, что трафик отбрасывает файрвол - часто это офисная или учебная сеть, блокирующая непривычные исходящие порты, - и никакая настройка клиента не поможет. «Connection refused» значит, что хост ответил, но на этом порту ничего не слушает, а это почти всегда неверный номер порта. Когда эта проверка проходит, любой оставшийся отказ - уже между клиентом и самой MySQL, и такие случаи разобраны в таблице ошибок ниже.

Сравнение трёх клиентов#

DBeaver CommunityHeidiSQLMySQL Workbench
ПлатформыWindows, macOS, LinuxWindowsWindows, macOS, Linux
ЛицензияБесплатный, open sourceБесплатный, open sourceБесплатный (GPL), от Oracle
ОсноваJava, драйверы JDBCНативный, клиентские библиотеки MySQL/MariaDBНативный, клиентская библиотека MySQL
Другие базы данныхPostgreSQL, SQL Server, SQLite и многие другиеMariaDB, PostgreSQL, SQL Server, SQLiteТолько MySQL
Сильная сторонаОдин инструмент для всего, ER-диаграммыСкорость, быстрые правки, экспортМоделирование, визуальный EXPLAIN, экраны администрирования
Слабая сторонаВремя запуска, расход памятиНе кроссплатформенныйСтабильность на больших результатах, только MySQL

Ни один из трёх не является неправильным выбором. Выбирать приходится между широтой (DBeaver), скоростью (HeidiSQL) и глубиной именно для MySQL (Workbench). Многие в итоге держат два: HeidiSQL или DBeaver для повседневной работы и Workbench для редкой ER-диаграммы или плана запроса.

Подключение через DBeaver#

  1. Нажмите значок вилки с плюсом (New Database Connection), выберите MySQL и нажмите Next.
  2. На вкладке Main заполните Server Host, Port, Database, Username и Password. Authentication оставьте как Database Native. Ставьте галочку Save password только на машине, которой доверяете.
  3. Нажмите Test Connection. В первый раз DBeaver предложит скачать JDBC-драйвер MySQL (Connector/J); согласитесь.
  4. Нажмите Finish. Соединение появится в Database Navigator.

DBeaver использует Java-драйвер, а не C-библиотеку MySQL, и у этого драйвера есть одна ошибка, которую на MySQL 8 встречает каждый: Public Key Retrieval is not allowed. С caching_sha2_password клиенту, который входит по незашифрованному соединению, нужен публичный RSA-ключ сервера, чтобы безопасно передать пароль, а Connector/J отказывается его запрашивать, пока ему не разрешат. Два решения, на вкладке Driver properties:

  • Зашифровать соединение: установите useSSL в true (и requireSSL в true, если хотите на этом настаивать). Тогда пароль передаётся внутри TLS, и получать ключ не нужно. Это лучшее решение.
  • Разрешить получение ключа: установите allowPublicKeyRetrieval в true. Это работает, но машина посередине может подсунуть вам свой ключ, поэтому через интернет предпочитайте TLS.
Свойства драйвера DBeaver
useSSL=truerequireSSL=trueverifyServerCertificate=falseallowPublicKeyRetrieval=false

verifyServerCertificate=false шифрует, не проверяя, кто ответил, - именно это вы получаете с самосгенерированным сертификатом сервера. Если у вас есть сертификат CA сервера, укажите его на вкладке SSL и включите проверку. Вкладка SSH пускает соединение через туннель на сервер, к которому у вас есть доступ к оболочке, - так можно достучаться до базы данных, не открытой в интернет.

Полезные привычки в DBeaver: для живых баз данных задайте тип соединения (Edit Connection, General) Production - редактор окрасится, чтобы вы видели, где находитесь, и сможет спрашивать подтверждение перед выполнением операторов; Ctrl+Enter выполняет оператор под курсором, а Alt+X - весь скрипт; а просмотрщик результатов по умолчанию загружает по 200 строк, так что быстрый на вид запрос мог загрузить не всё.

Подключение через HeidiSQL#

  1. Откройте Session manager, нажмите New и дайте сессии имя.
  2. В Network type выберите вариант MySQL или MariaDB TCP/IP.
  3. Заполните Hostname / IP, User, Password и Port. Поле Databases принимает список баз для отображения через точку с запятой; оставьте его пустым, чтобы видеть всё, к чему у пользователя есть доступ.
  4. Нажмите Open.

На вкладке SSL поставьте галочку Use SSL, чтобы шифровать сессию, и укажите сертификат CA, если он у вас есть для проверки. На вкладке Advanced выбирается клиентская библиотека, которую загружает HeidiSQL. Если сессия падает с caching_sha2_password cannot be loaded, переключите библиотеку на libmysql от MySQL 8 или новее из списка - старые встроенные библиотеки появились раньше этого плагина - или обновите сам HeidiSQL.

Сильная сторона HeidiSQL - скорость: он открывается мгновенно, редактирует данные прямо в таблице, а в меню Tools есть Export database as SQL, который записывает дамп выбранных таблиц или баз данных в файл, на другой сервер или в буфер обмена. Для большой базы данных настоящий mysqldump всё ещё надёжнее как бэкап - см. бэкап и восстановление через mysqldump, - но чтобы скопировать несколько таблиц между серверами, HeidiSQL трудно превзойти.

HeidiSQL - в первую очередь программа для Windows. На Linux и macOS его запускают под Wine с переменным успехом; на этих системах используйте DBeaver.

Подключение через MySQL Workbench#

  1. На главном экране нажмите плюс рядом с MySQL Connections.
  2. Задайте Connection Name, Connection Method оставьте Standard (TCP/IP).
  3. Заполните Hostname, Port и Username. Нажмите Store in Vault (Windows, macOS) или Store in Keychain (Linux), чтобы сохранить пароль.
  4. При желании задайте в Default Schema свою базу данных.
  5. На вкладке SSL у настройки Use SSL пять значений: No, If available, Require, Require and Verify CA, Require and Verify Identity. Для удалённого сервера с самосгенерированным сертификатом используйте Require; с файлом CA - Require and Verify CA.
  6. Нажмите Test Connection, затем OK.

У Workbench три умолчания, о которых стоит знать заранее, чтобы они вас не удивили:

НастройкаПо умолчаниюЭффект
Safe UpdatesВключеноUPDATE и DELETE без ключа в WHERE падают с ошибкой 1175
Limit Rows1000Workbench дописывает LIMIT 1000 к SELECT в редакторе
DBMS connection read timeout30 секундДолгие запросы падают с Lost connection to MySQL server during query

Все три находятся в Edit, Preferences, SQL Editor (и SQL Execution для лимита строк). Safe Updates стоит оставить включённым - ошибка 1175 спасла немало таблиц. Таймаут чтения - тот, который нужно поднять, если вы запускаете из Workbench долгие отчёты или ALTER TABLE; запрос был в порядке, Workbench просто перестал ждать.

Где Workbench оправдывает себя: Visual Explain рисует план выполнения запроса со стоимостями, и это хороший способ научиться читать планы (см. индексы и EXPLAIN в MySQL); Database, Reverse Engineer строит ER-диаграмму по живой схеме; а экран Users and Privileges - удобочитаемый вид прав. Его Data Export запускает встроенный mysqldump, который должен быть не старше сервера, - предупреждение о несовпадении версий там стоит принимать всерьёз.

Некоторые выпуски Workbench при подключении к серверу новее того, с которым их тестировали, показывают предупреждение о несовместимой или нестандартной версии сервера. Это лишь предупреждение; можно продолжить, и повседневные запросы работают.

Ошибки, которые останавливают любой клиент#

Клиент меняется, причины - нет.

ОшибкаЗначениеРешение
Can't connect to MySQL server on 'host' (10060) или (111), ошибка 2003На этом хосте и порту никто не отвечаетПроверьте хост, порт и любой файрвол между вами
Access denied for user 'app'@'203.0.113.5', ошибка 1045Неверный пароль или нет аккаунта, подходящего под ваш адресПроверьте пароль; проверьте хостовую часть аккаунта
Host '203.0.113.5' is not allowed to connect, ошибка 1130Для вашего адреса нет вообще никакого аккаунтаСоздайте аккаунт для '%' или для вашего адреса
Authentication plugin 'caching_sha2_password' cannot be loadedСлишком старая клиентская библиотекаОбновите клиент или выберите библиотеку новее
Public Key Retrieval is not allowedJDBC-клиент без TLSВключите TLS или разрешите получение ключа
SSL connection errorОдна сторона требует TLS, другая отказывает или не может проверитьСогласуйте режим SSL; укажите CA или ослабьте проверку

Разница между ошибкой 2003 и 1045 - самое полезное различие в этой таблице. 2003 означает, что вы так и не добрались до MySQL, - проблема сети. 1045 означает, что MySQL ответила отказом, - проблема аккаунта. Сторона аккаунта объяснена в статье пользователи и привилегии в MySQL: MySQL определяет аккаунт по имени пользователя и хосту клиента вместе, поэтому 'app'@'localhost' не сможет войти с вашего ноутбука, каким бы правильным ни был его пароль.

Безопасная работа из GUI#

Графический клиент меняет не только удобство, но и риски. Несколько привычек предотвращают большинство аварий:

  • Отдельные соединения для продакшена и всего остального, с разными именами и цветами. В большинстве историй «я запустил это не на той базе» участвуют две вкладки, которые выглядели одинаково.
  • Следите за autocommit. Все три клиента по умолчанию работают с autocommit, но все три позволяют переключиться на ручную фиксацию. В ручном режиме каждый выполненный вами UPDATE держит блокировки строк, пока вы не нажмёте Commit, - а приложение ждёт за вами. Забытая незафиксированная правка в GUI - классическая причина таймаутов ожидания блокировок; как найти такую, показано в статье транзакции, блокировки и deadlock в MySQL.
  • Правки в таблице - это SQL. Изменение ячейки и сохранение выполняют UPDATE с WHERE, построенным по первичному ключу. В таблице без первичного ключа некоторые клиенты строят WHERE по всем колонкам, и если строка дублируется, одна правка меняет две строки. Дайте каждой таблице первичный ключ.
  • Большие результаты живут в памяти вашей машины. SELECT * FROM events на пятьдесят миллионов строк может заморозить клиент задолго до того, как это заметит сервер. Пока исследуете данные, добавляйте LIMIT.
  • Закрывайте то, чем не пользуетесь. Каждая открытая вкладка может держать соединение, а простаивающие сессии GUI учитываются в max_connections наравне со всем остальным.

Другие клиенты, о которых стоит знать#

Три клиента выше - не единственный вариант:

  • mysql и MySQL Shell (`mysqlsh`) - клиенты командной строки. Доступны всегда, поддаются скриптованию и служат эталоном, чтобы понять, чья проблема с подключением - сервера или GUI.
  • Sequel Ace - бесплатный, open source, только для macOS, MySQL и MariaDB. Естественный выбор на Mac, если DBeaver кажется тяжёлым.
  • TablePlus - нативный, быстрый, для многих баз данных, коммерческий с ограниченной бесплатной версией.
  • DataGrip - платная IDE для баз данных от JetBrains с лучшим автодополнением SQL из всех. Также встроена в другие их IDE как окно инструментов для баз данных.
  • Beekeeper Studio - open source, кроссплатформенный, простой; коммерческая редакция добавляет возможности.
  • phpMyAdmin и Adminer - веб-клиенты, работающие на PHP-хосте. Полезны, когда локально ничего установить нельзя; они подключаются с веб-сервера, а не с вашей машины. Сторона импорта разобрана в статье импорт и экспорт в phpMyAdmin.

FAQ#

Можно ли использовать MySQL Workbench с MariaDB?

Часто он подключается, но Workbench сделан для MySQL, и по мере того как они расходятся, некоторые экраны на MariaDB показывают неверные данные или ломаются. HeidiSQL и DBeaver поддерживают MariaDB полноценно. Для сервера MySQL 8.4 годятся все три.

Почему клиент подключается из дома, но не из офиса?

Либо офисная сеть блокирует исходящие соединения на этот порт, либо аккаунт базы данных или файрвол разрешает только определённые адреса. Ошибка 2003 указывает на сеть; ошибка 1045 или 1130 с офисным адресом в тексте - на шаблон хоста в аккаунте.

Безопасно ли сохранять пароль в клиенте?

На вашей собственной зашифрованной машине - в разумной мере. Workbench хранит его в связке ключей операционной системы; DBeaver и HeidiSQL - в собственной конфигурации, которая защищена хуже. Для продакшена подумайте о том, чтобы не сохранять пароль, или используйте для сохранённого соединения аккаунт только для чтения.

Нужен ли TLS, если я подключаюсь через интернет?

Да. Без него каждый запрос и результат идут по сети открытым текстом, а на старых путях аутентификации - и учётные данные. Все три клиента поддерживают TLS; включить его - одна настройка.

Какой клиент лучше всего для импорта большого SQL-дампа?

Никакой. Импорт через GUI загружает файл через клиент и на дампах больше нескольких сотен мегабайт идёт медленно или падает. Используйте клиент командной строки: mysql -h host -P port -u user -p dbname < dump.sql.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000