Problem beim q2a-Import

Ich importiere eine Question2Answer-Website und habe die folgenden Schritte befolgt. Das Skript kann keine Verbindung zur Datenbank herstellen. Bitte hilft mir jemand dabei.

Ich habe mich an diesen vBulletin-Thread angelehnt.

Docker-Installationsserver

Schritte:

  1. Discourse wurde gemäß dem 30-Minuten-Leitfaden installiert, und alles funktioniert einwandfrei.
  2. Über folgende Befehle wurde die App betreten:

cd /var/discourse
./launcher enter app

  1. MariaDB wurde installiert, da ich MySQL nicht installieren konnte:

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

  1. Nach Abschluss der MariaDB-Installation wurde deren Status geprüft und der Dienst gestartet:

sudo service mysql status
sudo service mysql start

  1. Abhängigkeiten installieren

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. Datenbank importieren

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

  1. Folgende Variablen wurden exportiert. Da ich keine Anhänge habe, wurde diese Variable nicht exportiert. Auch wurde kein Passwort für den root-Benutzer festgelegt.

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’

Dies ist der Fehler, den ich nach Ausführung des folgenden Befehls erhalte.

/var/www/discourse# su discourse -c ‘bundle exec ruby script/import_scripts/question2answer.rb’
root:@localhost möchte auf q2adb zugreifen
Lade vorhandene Gruppen…
Lade vorhandene Benutzer…
Lade vorhandene Kategorien…
Lade vorhandene Beiträge…
Lade vorhandene Themen…

Zugriff verweigert für Benutzer ‘root’@‘localhost’
Keine Verbindung zur Datenbank möglich.

Hostname: localhost
Benutzername: root
Passwort:
Datenbank: q2adb

Bearbeiten Sie das Skript oder setzen Sie diese Umgebungsvariablen:

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

Beenden.

Entweder musst du ein Passwort festlegen oder vielleicht einen Hostnamen? Hast du MySQL innerhalb des Containers installiert?

Kannst du dich von der Kommandozeile aus mit MySQL verbinden und sehen, dass dort Daten vorhanden sind? (SHOW TABLES :wink:

@pfaffman

Ich befinde mich innerhalb eines Containers.

Ich habe versucht, den Hostnamen auf localhost, ‘127.0.0.1’, ip-171-22-11-150 (dies wird als Hostname angezeigt, wenn ich den Befehl >hostname ausführe) und die tatsächliche IP-Adresse des Servers zu setzen.

Ich habe auch ein Passwort für den Root-Benutzer festgelegt. Ich sehe, dass die Tabellen in der Datenbank korrekt aus q2a importiert wurden.

Habe ich einen Schritt übersehen?

Discourse-Experten, bitte helft mir dabei. Ich weiß im Moment nicht, wie ich weiter vorgehen soll.

Vielen Dank im Voraus für eure Hilfe!

Der traditionelle Weg, Menschen zu motivieren, dir zusätzliche Hilfe zu leisten, besteht darin, dafür Geld zu bezahlen. Du kannst dies mit einem Budget in Marketplace veröffentlichen.

Hallo Discourse-Community,

@sat, hast du dafür schon eine Lösung gefunden?

Ich bin auf denselben Fehler gestoßen, als ich versuchte, eine Migration von vBulletin5 über den Docker-Teil desselben Threads durchzuführen: Migrate a vBulletin 4 forum to Discourse

Ich habe zudem MariaDB anstelle von MySQL installiert:

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

Ich habe meine SQL-Daten importiert und kann eine Verbindung zur Datenbank herstellen. Die Tabellen wurden erstellt:

mysqlcheck -c vb5  -u root -p

Zunächst habe ich die Standard-Anmeldedaten (root / leer) verwendet. Beim zweiten Versuch habe ich ein Passwort für den root-Benutzer festgelegt:

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'

Ich bin mir beim TABLE_PREFIX nicht ganz sicher. Aber in meiner Standardinstallation beginnen alle Tabellennamen mit vb5. – ich gehe also davon aus, dass das in Ordnung ist (ich habe es auch einmal leer gelassen).

Das Hauptproblem ist jedoch, dass ich keine Verbindung zur MariaDB-Datenbank mit dem discourse-Benutzer herstellen kann:

su discourse -c 'bundle exec ruby script/import_scripts/vbulletin5.rb'
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
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
Enter password: #password1234
mysqlcheck: Got error: 1698: Access denied for user 'root'@'localhost' when trying to connect

Okay, ich bin jetzt einen Schritt näher daran, das zum Laufen zu bringen. Ich konnte die Verbindung zum Discourse-Benutzer herstellen.

  1. Verbinde dich als root mit dem Discourse-Container.
  2. Verbinde dich mit der MariaDB-Datenbank.
mysql -u root -p
*gebe dein Passwort ein*
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
EXIT;

Wechsle dann zum Discourse-Benutzer und versuche, dich mit dem root-Konto mit der Datenbank zu verbinden:

su discourse
mysql -u root -p
Passwort eingeben: #password1234

Du solltest jetzt die SQL-Shell sehen, wo du zuvor eine „Zugriff verweigert“-Meldung erhalten hast.

Verlasse nun den Discourse-Benutzer und versuche erneut, das Migrations-Skript auszuführen:

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

Jetzt läuft das Skript (aber ich erhalte einen vBulletin5-bezogenen Fehler, den ich als Nächstes herausfinden muss).