Проблема с импортом в q2a

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

Я взял пример из темы vBulletin

Установка сервера через Docker

Шаги:

  1. Установил Discourse, следуя руководству за 30 минут, и всё заработало отлично.
  2. Вошёл в приложение, выполнив следующие команды:

cd /var/discourse
./launcher enter app

  1. Установил MariaDB, так как не смог установить MySQL:

apt-get update && apt-get install libmariadb-dev mariadb-server-10.3

  1. После завершения установки MariaDB проверил её состояние и запустил:

sudo service mysql status
sudo service mysql start

  1. Установил зависимости:

echo “gem ‘mysql2’, require: false” >> /var/www/discourse/Gemfile
echo “gem ‘php_serialize’, require: false” >> /var/www/discourse/Gemfile
cd /var/www/discourse
su discourse -c ‘bundle install --no-deployment --without test --without development --path vendor/bundle’

  1. Импортировал базу данных:

mysql -uroot -p -e ‘CREATE DATABASE q2adb’
mysql -uroot -p q2adb < q2a-old-db.sql

  1. Установил следующие переменные окружения. У меня нет вложений, поэтому соответствующую переменную я не устанавливал. Также я не задавал пароль для пользователя root.

export DB_NAME=“q2adb”
export DB_USER=“root”
export DB_PW=“”
export TABLE_PREFIX=“qa_”
export TIMEZONE=“America/Los_Angeles”

cd /var/www/discourse
su discourse -c ‘bundle exec ruby script/import_scripts/question2answer.rb’

Вот ошибка, которую я получаю после выполнения команды ниже.

/var/www/discourse# su discourse -c ‘bundle exec ruby script/import_scripts/question2answer.rb’
root:@localhost хочет доступ к q2adb
Загрузка существующих групп…
Загрузка существующих пользователей…
Загрузка существующих категорий…
Загрузка существующих постов…
Загрузка существующих тем…

Отказано в доступе для пользователя ‘root’@‘localhost’
Невозможно подключиться к базе данных.

Имя хоста: localhost
Имя пользователя: root
Пароль:
База данных: q2adb

Отредактируйте скрипт или установите эти переменные окружения:

export DB_HOST=“localhost”
export DB_NAME=“”
export DB_PW=‘password’
export DB_USER=“root”
export TABLE_PREFIX=“qa_”

Выход.

Либо вам нужно задать пароль, либо, возможно, имя хоста? Вы установили MySQL внутри контейнера?

Можете ли вы подключиться к MySQL из командной строки и убедиться, что там есть данные? (Показать таблицы :wink:

@pfaffman

Я нахожусь внутри контейнера.

Я пробовал устанавливать Hostname в localhost, ‘127.0.0.1’, ip-171-22-11-150 (это отображается как имя хоста при выполнении команды >hostname) и в реальный IP-адрес сервера.

Также я установил пароль для пользователя root. Я вижу, что таблицы в базе данных были импортированы из q2a корректно.

Не упустил ли я какой-то шаг?

Эксперты по Discourse, пожалуйста, помогите мне с этим. Я пока не знаю, как действовать.

Заранее спасибо за помощь!

Традиционный способ мотивировать людей оказать вам дополнительную помощь — это оплата деньгами. Вы можете разместить пост в Marketplace с указанием бюджета.

Привет, сообщество Discourse,

@sat, вы уже нашли решение этой проблемы?

У меня возникла та же ошибка при попытке миграции с vBulletin5, используя Docker-часть из этой же темы.

Я также установил MariaDB вместо MySQL:

apt-get update && apt-get install libmariadb-dev mariadb-server-10.3

Я импортировал свои SQL-данные и смог подключиться к базе данных, убедившись, что таблицы созданы:

mysqlcheck -c vb5  -u root -p

Сначала я использовал учётные данные по умолчанию (root / пусто), а во второй попытке установил пароль для пользователя root:

export DB_NAME="vb5"
export DB_USER="root"
export DB_PW="password1234"
export TABLE_PREFIX="vb5."
export ATTACHMENT_DIR='/vb5-attachments'
export TIMEZONE='Europe/Berlin'

cd /var/www/discourse
su discourse -c 'bundle exec ruby script/import_scripts/vbulletin5.rb'

Я не уверен насчёт TABLE_PREFIX здесь. Но все имена таблиц в моей установке по умолчанию начинаются с vb5., так что, думаю, это должно быть правильно (я также пробовал оставить это поле пустым).

Однако главная проблема в том, что я не могу подключиться к базе данных MariaDB от имени пользователя discourse:

su discourse -c 'bundle exec ruby script/import_scripts/vbulletin5.rb'
Загрузка существующих групп...
Загрузка существующих пользователей...
Загрузка существующих категорий...
Загрузка существующих постов...
Загрузка существующих тем...
Traceback (most recent call last):
        5: from script/import_scripts/vbulletin5.rb:632:in `<main>'
        4: from script/import_scripts/vbulletin5.rb:632:in `new'
        3: from script/import_scripts/vbulletin5.rb:27:in `initialize'
        2: from script/import_scripts/vbulletin5.rb:27:in `new'
        1: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `connect': Access denied for user 'root'@'localhost' (Mysql2::Error)
su discourse
mysqlcheck -c vb5  -u root -p
Введите пароль: #password1234
mysqlcheck: Получена ошибка: 1698: Access denied for user 'root'@'localhost' при попытке подключения

Отлично, я стал на шаг ближе к решению этой задачи. Мне удалось подключить пользователя Discourse.

  1. Подключитесь к контейнеру Discourse как root.
  2. Подключитесь к базе данных MariaDB
mysql -u root -p
*введите ваш пароль*
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
EXIT;

Затем переключитесь на пользователя discourse и попробуйте подключиться к базе данных от имени root:

su discourse
mysql -u root -p
Введите пароль: #password1234

Теперь вы должны увидеть оболочку SQL, тогда как ранее вы получали ошибку «доступ запрещён».

Теперь выйдите из учётной записи пользователя discourse и попробуйте снова запустить скрипт миграции:

exit
su discourse -c 'bundle exec ruby script/import_scripts/vbulletin5.rb'

Скрипт теперь выполняется (но я получаю ошибку, связанную с vBulletin5, которую мне нужно будет разобраться дальше).