Use um script de importação que requer 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 curtida

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 curtida

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 curtidas

Thanks for your helpful tutorial , worked fine for me !

Cheers

Sam

Olá,
obrigado por este guia :slight_smile:
Os anexos também são importados?

Parece que sim. Há uma configuração para o diretório de anexos.

1 curtida

Olá,
Desculpe, mas como você gera o arquivo yourbackup.sql? O que este arquivo deve conter? Uma exportação dos bancos de dados do bbPress?

Obrigado
++ .

Isso mesmo. Como obtê-lo depende das ferramentas que você tem e do que sabe usar.

Uma instalação do bbPress é bastante padrão. Um banco de dados do WordPress e todas as postagens dentro de wp_posts. Então, tudo o que preciso é fazer um dump do banco de dados de postagens do WordPress?
Desculpe perguntar, mas não encontrei outras instruções.

Obrigado

Você pode obter um dump de todo o banco de dados do WordPress ou ler o código e ver quais tabelas são realmente usadas. É mais fácil fazer o dump de todo o banco de dados.

Seja com mysqump, cPanel, phpMyAdmin ou alguma outra ferramenta, é difícil fazer uma recomendação.

Funciona (após alguns ajustes) :slight_smile: :slight_smile: Obrigado :wink:
succeed

1 curtida

Estou com erro de conexão ao banco de dados MySQL durante a importação. O banco de dados SQL está em localhost. Como posso resolver esse erro?

/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’: Não foi possível conectar ao servidor MySQL local através do socket ‘/var/run/mysqld/mysqld.sock’ (2) (Mysql2::Error::ConnectionError)

Obrigado.

Se o servidor MySQL estiver rodando no servidor e não no contêiner, tente usar o endereço IP do host.

O MySQL está rodando em um container onde o Discourse também está em execução. Parece que o script de importação do container do Discourse não consegue se conectar ao container do MySQL. O que mais posso fazer?

Você tem certeza? Consegue se conectar a ele usando a ferramenta de linha de comando do mysql de dentro do container?

1 curtida

Já resolvi esse problema. Eu estava usando localhost, mas percebi que o endereço IP do MySQL deveria ser obtido via ```
docker inspect mysql | grep IPAddress.


Próximo problema com o script de importação.. 

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect': O plugin caching_sha2_password não pôde ser carregado: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: não foi possível abrir o arquivo compartilhado: Arquivo ou diretório não encontrado (Mysql2::Error::ConnectionError)

Eu usei o comando ALTER para alterar a senha.

Solução para o problema acima - Executei o seguinte comando novamente.

ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'novo_senha';
1 curtida

Depois de aplicar algumas das correções diversas postadas acima para problemas ao executar o importador, não estou vendo nenhum post ser realmente importado. Alguma ideia do motivo pelo qual obtive uma conexão bem-sucedida com o novo banco de dados, mas nenhum post foi importado?

Estou tentando importar algumas centenas de posts de um site WordPress (5.7) que não usa bbPress para um site Discourse já em execução, que também possui algumas centenas de posts (2.7.0-beta5).

O banco de dados importado parece existir:

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              |
…
Saída ao executar o importador:
/var/www/discourse# su discourse -c "bundle exec ruby script/import_scripts/bbpress.rb"
Carregando grupos existentes...
Carregando usuários existentes...
Carregando categorias existentes...
Carregando posts existentes...
Carregando tópicos existentes...

importando usuários...

importando usuários anônimos...

importando categorias...

importando tópicos e posts...

Importando anexos de 'postmeta'...

criando permalinks...


Atualizando status do tópico

Atualizando bumped_at nos tópicos

Atualizando last_posted_at nos usuários

Atualizando last_seen_at nos usuários

Atualizando first_post_created_at...

Atualizando post_count do usuário...

Atualizando topic_count do usuário...

Atualizando digest_attempted_at do usuário...

Atualizando usuários dos tópicos

Atualizando tempos dos posts

Atualizando usuários dos tópicos em destaque

Atualizando tópicos em destaque nas categorias
        6 / 6 (100.0%)  [1771 itens/min]  ]  
Resetando contadores dos tópicos


Concluído (00h 00min 00sec)