Рейтинг:0

Ubuntu 20.04.2 не работает с MySQL 8.0.27. .

флаг nc

У меня никогда не было этой проблемы, когда на Windows.

По какой-то причине я не могу получить никакого эффекта при попытке подключиться к локальной базе данных MySQL из локального приложения Node.js.

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

Я тщетно просматривал системные журналы и журналы MySQL в поисках какой-либо подсказки. При поиске в Google иногда предполагается, что MySQL может отказывать в соединении через сеть, а вместо этого использовать соединение через сокет. Я соответствующим образом скорректировал параметры соединения (без порта: ...., добавил socketPath: ....., запись), но дела обстоят не лучше.

Ниже приведен базовый тестовый код для

const mysql = требуется ('mysql');


const queryNodeAppData = (запрос) =>
{
  console.log("Теперь в скрипте MySQL Query...")
  console.log("Запрос: " + запрос);

  const con = mysql.createConnection(
  {
    хост: "локальный",
    путь сокета: '/var/run/mysqld/mysqld.sock',
    база данных: "nodeapp",
    пользователь: «корень»,
    пароль: "Мой.$qu3@1$y"
  });

  con.connect (функция (errconn)
  {
    если (ошибка) 
    {
        console.error('Ошибка подключения: ' + errconn.stack);
        вернуть «Неверно»;
    }
    еще
    {
        console.log('Подключено как id ' + connection.threadId);
        вернуть «Действительно»;
    }
  });

};

module.exports = {queryNodeAppData};

Соответствующий вывод терминала после попытки запустить приложение с помощью нодмон ниже. Журналы консоли создаются, когда задача пользователя делегируется app.js другим модулям, например. маршрутизатор, обработчик, средство проверки формата, mysql и т. д. Выходные данные иногда регистрируются.

Возможная ошибка, приводящая к сбою приложения, связана исключительно с попыткой записать неопределенное значение в определяемую текстом переменную ответа XHR. При заглушке ответа любой строкой приложение возвращает код состояния 200 и не вызывает ошибок.

[nodemon] запуск `node app.js`
HTTP-сервер для NodeApp запущен на порту 3000
Мы в задней части NodeApp!
Кто-то отправил данные на сервер Node...
Конечная точка с обрезанным URL: reg-user
Входное значение: тамджк
В router.js сейчас...
Конечная точка: reg-user Данные: tamjk
Обработчик: authen.js
В обработчике authen.js теперь...
Режим: reg Поле: user Значение: tamjk
Сейчас идет проверка формата...
Сообщение о проверке формата: допустимый формат
Подключение к базе данных пользователя с проверкой пользователя...
В скрипте MySQL Query теперь...
Запрос: ВЫБРАТЬ пользователя ИЗ пользователей, ГДЕ пользователь = 'tamjk'
Маршрутизатор вернул сообщение undefined
Сообщение обратного вызова: не определено
Сообщение: не определено
Отправлен ответ: не определено
_http_outgoing.js:696
    бросить новый ERR_INVALID_ARG_TYPE («первый аргумент»,
    ^

TypeError [ERR_INVALID_ARG_TYPE]: первый аргумент должен быть строкового типа или экземпляром Buffer или Uint8Array. Получено неопределенное
    при записи_ (_http_outgoing.js:696:11)
    в ServerResponse.write(_http_outgoing.js:661:15)
    в reqCallback (/home/sandbar/Desktop/nodeapp-local/app.js:116:6)
    в IncomingMessage.<anonymous> (/home/sandbar/Desktop/nodeapp-local/app.js:87:10)
    в IncomingMessage.emit (events.js:327:22)
    в endReadableNT (_stream_readable.js:1327:12)
    в процессеTicksAndRejections (внутренний/процесс/task_queues.js:80:21) {
  код: "ERR_INVALID_ARG_TYPE"
}
Сбой приложения [nodemon] — ожидание изменений файла перед запуском...

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

$ судо mysql
[sudo] пароль для песочницы: 
ОШИБКА 1045 (28000): Доступ запрещен для пользователя «root» @ «localhost» (с использованием пароля: НЕТ)

В общем, мне интересно, действительно ли Ubuntu 20.04.2 и MySQL 8.0.27 созданы для совместной работы.

флаг in
Вы не можете подключиться к установке MySQL в большинстве современных дистрибутивов Linux как «root» без использования суперпользователя. Самое простое и стандартное для отрасли решение — создать пользователя MySQL для веб-сайта и использовать эти учетные данные.
Trunk avatar
флаг nc
Уже пробовал учетную запись пользователя без полномочий root, которую я создал в MySQL. Но я не пробовал это с подключением к сокету. Я так понимаю, это должно быть сокетное соединение для доступа к локальной машине? Или его можно настроить, чтобы разрешить доступ по TCP/IP?
флаг in
Если это локальное соединение, вам подойдет либо сокет, либо `127.0.0.1`. Кто настраивал сервер? `sudo mysql` обычно не требует пароля, потому что если вы можете `sudo` на компьютере с Linux, то вы должны быть администратором сервера. Если сервер был неправильно сконфигурирован, то необходимо проверить и проверить около полумиллиона вещей, чтобы выяснить, почему не удается установить соединение.
Trunk avatar
флаг nc
Это уже на локальном хосте, что обычно то же самое. Любые конфиги либо дефолтные, либо добавленные мной дополнительные пользователи, привилегии и т.д. Я бы хотел, чтобы документы MySQL дали больше информации об этом. Lo tentaré mañana.
Trunk avatar
флаг nc
Я удалил и переустановил MySQL. Затем я создал нового пользователя для mysql с привилегиями, ограниченными базой данных приложения Node. Соединение с сервером MySQL было выполнено с использованием MySQL Workbench, и было выбрано соединение TCP/IP. Была создана и заполнена простая таблица Users только для проверки доступа из приложения Node к таблице MySQL nodeapp.users.Никакого доступа. Не отображается ошибка подключения к MySQL. Ошибка сбоя такая же, как и раньше — попытка записать значение UNDEFINED в ответ XHR. Интересно, как Oracle хочет, чтобы приложения Node получали доступ к MySQL? . .
Рейтинг:0
флаг nc

Ответ в том, что mysql — это пакет, который больше не надежно обрабатывает подключения к MySQL из-за более жестких протоколов аутентификации после MySQL 8.

Хоть mysql делал заявления в последние 2-3 года, что эти проблемы были исправлены, они сохраняются.

Поэтому совет от других пользователей заключается в использовании пакет нпм mysql2 вместо.

Я обнаружил, что это здравый совет, и я подключаюсь.

Ответить или комментировать

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