Issue for q2a import

I’m importing question2answer site and followed below steps. Script is not able to connect to db. anyone please help me on this.

I took ref from vBulletin thread

Docker install Server

Steps:

  1. Installed discourse using 30 min guide and it worked perfectly fine.
  2. entered app using below commands

cd /var/discourse
./launcher enter app

  1. Installed Mariadb as I was not able to install mysql:

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

  1. After finishing installing Mariadb check its status and started:

sudo service mysql status
sudo service mysql start

  1. Install dependencies

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. Imported database

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

  1. exported below variables, I dont have any attachments so not exported that variable. also not set password for root user.

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’

This is the error I’m getting now after running below command.

/var/www/discourse# su discourse -c ‘bundle exec ruby script/import_scripts/question2answer.rb’
root:@localhost wants q2adb
Loading existing groups…
Loading existing users…
Loading existing categories…
Loading existing posts…
Loading existing topics…

Access denied for user ‘root’@‘localhost’
Cannot connect in to database.

Hostname: localhost
Username: root
Password:
database: q2adb

Edit the script or set these environment variables:

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

Exiting.

1 Like

Either you need to set a password or maybe a host name? You installed mysql inside the container?

Can you connect to mysql from the command line and see that there is data there. (Show tables :wink:

3 Likes

@pfaffman

I’m inside container.

I tried setting Hostname to localhost, ‘127.0.0.1’, ip-171-22-11-150 (this is shown as a hostname when I issue command >hostname) and with actual IP address of server.

I also set password for a root users. I do see tables in db got imported correctly from q2a.

Am I missing any step?

1 Like

discourse experts, please help me on this. I dont know how to proceed at the moment.

Thanks for your help in advance!

The traditional way to incentivize people to give you extra help is to pay money for it, you could post in #marketplace with a budget.

1 Like

Hello Discourse Community,

@sat have you found a solution for this yet ?

I ran into the same error while trying to migrate from vBulletin5 using the Docker part of the same thread.

I also installed MariaDB instead of MySQL:

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

I imported my SQL data and I am able to connect to the database and see that the tables are created:

mysqlcheck -c vb5  -u root -p

At first, I used the default login (root / blank) and in a second attempt I set a password for the root user:

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'

I am not sure about the TABLE_PREFIX here. But all table names start with vb5. in my default installation - so I guess this should be ok (I also tried leaving it empty).

But the main issue is that I cannot connect to the MariaDB database with the discourse user:

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

Ok I am now a step closer into getting this to work. I was able to get the discourse user to connect.

  1. Connect into the Discourse container as root.
  2. Connect to the MariaDB Database
mysql -u root -p
*enter your password*
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
EXIT;

Then switch to the discourse user and try to connect to the database with the root account:

su discourse
mysql -u root -p
Enter password: #password1234

And you should see the SQL shell, when before you were getting an access denied.

Now exit the discourse user and try to run the migration script again:

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

Now the script is running (but I am getting a vBulletin5 related error I have to figure out next)