Utilisez un script d'importation qui nécessite MySQL

With the latest update ver 2.0.0 beta10 I’m now getting more errors with the bbpress import script (still can’t figure out why images are not being pulled over, but instead referring to their old URLs). Error after the importing topics and posts:

importing private messages...
      120 / 120 (100.0%)  [156526 items/min]  /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:131:in `_query': Table 'db.wp_bp_messages_messages' doesn't exist (Mysql2::Error)
	from /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:131:in `block in query'
	from /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:130:in `handle_interrupt'
	from /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:130:in `query'
	from /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/rack-mini-profiler-1.0.0/lib/patches/db/mysql2.rb:22:in `query'
	from script/import_scripts/bbpress.rb:505:in `bbpress_query'
	from script/import_scripts/bbpress.rb:453:in `block in import_private_messages'
	from /var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
	from /var/www/discourse/script/import_scripts/base.rb:869:in `loop'
	from /var/www/discourse/script/import_scripts/base.rb:869:in `batches'
	from script/import_scripts/bbpress.rb:452:in `import_private_messages'
	from script/import_scripts/bbpress.rb:32:in `execute'
	from /var/www/discourse/script/import_scripts/base.rb:46:in `perform'
	from script/import_scripts/bbpress.rb:510:in `<main>'
1 « J'aime »

EDIT: After deeper inspection I found that (at least in my setup) the file was called

  - "templates/import/mysql-dep.template.yml"

NOTE that the correct spelling is “dep”, not “dev”.

=================

Hello! Thanks for posting this. I tried but got this error:

cat: templates/import/mysql-dev.template.yml: No such file or directory

I unfortunately don’t know enough about Docker to proceed…What am I doing wrong? Thank you so much. Here is the full output:

root@forum /var/discourse # ./launcher rebuild import
Ensuring launcher is up to date
Fetching origin
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 16 (delta 12), reused 7 (delta 6), pack-reused 0
Unpacking objects: 100% (16/16), done.
From https://github.com/discourse/discourse_docker
   2ad56e6..d032356  master     -> origin/master
Updating Launcher
Updating 2ad56e6..d032356
Fast-forward
 discourse-setup       | 2 +-
 image/base/Dockerfile | 5 +++--
 launcher              | 4 ++--
 3 files changed, 6 insertions(+), 5 deletions(-)
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
cat: templates/import/mysql-dev.template.yml: No such file or directory
cd /pups && git pull && /pups/bin/pups --stdin
/usr/bin/docker: invalid reference format: repository name must be lowercase.
See '/usr/bin/docker run --help'.
cat: cids/import_bootstrap.cid: No such file or directory
"docker rm" requires at least 1 argument.
See 'docker rm --help'.

Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

Remove one or more containers
rm: cannot remove 'cids/import_bootstrap.cid': No such file or directory
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one
root@forum /var/discourse #support
1 « J'aime »

did you get it resolved? Im too having this error

No. we just manually re-uploaded all of the images.

So I found out the reason for the issue we were having. The import script is breaking when it is trying to get wp_bb_message_message table, that’s happening because you would not have BuddyPress private messages module (which create these table) installed in your WordPress.

I did manage to pass that error by removing the code in bbpress.rb from line 414 to 502
This

 def import_private_messages
puts "", "importing private messages..."
last_post_id = -1
total_posts = bbpress_query("SELECT COUNT(*) count FROM #{BB_PRESS_PREFIX}bp_messages_messages").first["count"]

threads = {}

total_count = bbpress_query("SELECT COUNT(*) count FROM #{BB_PRESS_PREFIX}bp_messages_recipients").first["count"]
current_count = 0

batches(BATCH_SIZE) do |offset|
  rows = bbpress_query(<<-SQL
    SELECT thread_id, user_id
      FROM #{BB_PRESS_PREFIX}bp_messages_recipients
  ORDER BY id
     LIMIT #{BATCH_SIZE}
    OFFSET #{offset}
  SQL
  ).to_a

  break if rows.empty?

  rows.each do |row|
    current_count += 1
    print_status(current_count, total_count, get_start_time('private_messages'))

    threads[row['thread_id']] ||= {
      target_user_ids: [],
      imported_topic_id: nil
    }
    user_id = user_id_from_imported_user_id(row['user_id'])
    if user_id && !threads[row['thread_id']][:target_user_ids].include?(user_id)
      threads[row['thread_id']][:target_user_ids] << user_id
    end
  end
end

batches(BATCH_SIZE) do |offset|
  posts =  bbpress_query(<<-SQL
    SELECT id,
           thread_id,
           date_sent,
           sender_id,
           subject,
           message
      FROM wp_bp_messages_messages
     WHERE id > #{last_post_id}
  ORDER BY thread_id, date_sent
     LIMIT #{BATCH_SIZE}
  SQL
  ).to_a

  break if posts.empty?

  last_post_id = posts[-1]["id"].to_i

  create_posts(posts, total: total_posts, offset: offset) do |post|
    if tcf = TopicCustomField.where(name: 'bb_thread_id', value: post['thread_id']).first
      {
        id: "pm#{post['id']}",
        topic_id: threads[post['thread_id']][:imported_topic_id],
        user_id: user_id_from_imported_user_id(post['sender_id']) || find_user_by_import_id(post['sender_id'])&.id || -1,
        raw: post['message'],
        created_at: post['date_sent'],
      }
    else
      # First post of the thread
      {
        id: "pm#{post['id']}",
        archetype: Archetype.private_message,
        user_id: user_id_from_imported_user_id(post['sender_id']) || find_user_by_import_id(post['sender_id'])&.id || -1,
        title: post['subject'],
        raw: post['message'],
        created_at: post['date_sent'],
        target_usernames: User.where(id: threads[post['thread_id']][:target_user_ids]).pluck(:username),
        post_create_action: proc do |new_post|
          if topic = new_post.topic
            threads[post['thread_id']][:imported_topic_id] = topic.id
            TopicCustomField.create(topic_id: topic.id, name: 'bb_thread_id', value: post['thread_id'])
          else
            puts "Error in post_create_action! Can't find topic!"
          end
        end
      }
    end
  end
end
end

You can also get past it by simply installing buddypress and enabling its private message module.

2 « J'aime »

Thanks for your helpful tutorial , worked fine for me !

Cheers

Sam

Bonjour,
Merci pour ce tutoriel :slight_smile:
Les pièces jointes sont-elles également importées ?

On dirait bien. Il existe une configuration pour le répertoire des pièces jointes.

1 « J'aime »

Bonjour,
Désolé, mais comment générez-vous yourbackup.sql ? Que doit contenir ce fichier ? Une exportation des bases de données bbPress ?

Merci
++ .

C’est exact. La méthode pour l’obtenir dépend des outils dont vous disposez et de vos compétences pour les utiliser.

Une installation bbPress est tout à fait standard : une base de données WordPress avec tous les articles dans wp_posts. Donc, tout ce dont j’ai besoin, c’est d’exporter la base de données des articles de WordPress ?
Désolé de demander, mais je n’ai trouvé aucune autre instruction.

Merci

Vous pouvez soit obtenir un dump de toute la base de données WordPress, soit lire le code pour voir quelles tables sont réellement utilisées. Il est plus facile de faire un dump de toute la base de données.

Il est difficile de recommander un outil spécifique pour le faire, que ce soit avec mysqump, cPanel, phpMyAdmin ou un autre outil.

Cela fonctionne (après quelques ajustements) :slight_smile: :slight_smile: Merci :wink:
succeed

1 « J'aime »

J’ai une erreur de connexion à la base de données MySQL lors de l’importation. La base de données SQL est sur localhost. Comment puis-je contourner cette erreur ?

/var/www/discourse# su discourse -c “bundle exec ruby script/import_scripts/bbpress.rb”

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect’: Impossible de se connecter au serveur MySQL local via le socket ‘/var/run/mysqld/mysqld.sock’ (2) (Mysql2::Error::ConnectionError)

Merci.

Si le serveur MySQL s’exécute sur le serveur et non dans le conteneur, essayez d’utiliser l’adresse IP de l’hôte.

MySQL s’exécute dans un conteneur où Discourse est également en cours d’exécution. Il semble que le script d’importation du conteneur Discourse ne parvienne pas à se connecter au conteneur MySQL. Que puis-je faire d’autre ?

En êtes-vous sûr ? Pouvez-vous vous y connecter avec l’outil en ligne de commande mysql depuis l’intérieur du conteneur ?

1 « J'aime »

J’ai résolu ce problème. J’utilisais localhost, puis j’ai compris que l’adresse IP pour MySQL devait être obtenue via :

Prochain problème avec le script d’importation..

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect’: Le plugin caching_sha2_password n’a pas pu être chargé : /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: impossible d’ouvrir le fichier partagé : Aucun fichier ou répertoire du type (Mysql2::Error::ConnectionError)

J’ai utilisé la commande ALTER pour modifier le mot de passe.

Solution au problème ci-dessus : Exécutez à nouveau la commande suivante.

ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'newpassword';
1 « J'aime »

Après avoir appliqué certaines des diverses corrections publiées ci-dessus pour résoudre les problèmes liés à l’exécution de l’importateur, je ne vois aucun message effectivement importé. Avez-vous des idées sur la raison pour laquelle je parviens à établir une connexion réussie avec la nouvelle base de données, mais aucun message n’est importé ?

Je tente d’importer quelques centaines de messages depuis un site WordPress (5.7) non bbPress vers un site Discourse déjà en cours d’exécution (2.7.0-beta5) contenant également quelques centaines de messages.

La base de données importée semble exister :

mysql> show tables;
…
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
…
Sortie lors de l'exécution de l'importateur:
/var/www/discourse# su discourse -c "bundle exec ruby script/import_scripts/bbpress.rb"
Chargement des groupes existants...
Chargement des utilisateurs existants...
Chargement des catégories existantes...
Chargement des messages existants...
Chargement des sujets existants...

Importation des utilisateurs...

Importation des utilisateurs anonymes...

Importation des catégories...

Importation des sujets et des messages...

Importation des pièces jointes depuis 'postmeta'...

Création des permaliens...


Mise à jour du statut des sujets

Mise à jour de bumped_at sur les sujets

Mise à jour de last_posted_at sur les utilisateurs

Mise à jour de last_seen_at sur les utilisateurs

Mise à jour de first_post_created_at...

Mise à jour de user post_count...

Mise à jour de user topic_count...

Mise à jour de user digest_attempted_at...

Mise à jour des utilisateurs des sujets

Mise à jour des timings des messages

Mise à jour des utilisateurs des sujets en vedette

Mise à jour des sujets en vedette dans les catégories
        6 / 6 (100.0%)  [1771 éléments/min]  ]  
Réinitialisation des compteurs de sujets


Terminé (00h 00min 00sec)