수백만 개의 게시물이 있는 vBulletin 4 가져오기를 수행하고 있습니다. 작업을 수행 중인 서버가 매우 느립니다(포기했을 때 사용자들이 분당 약 50개씩 가져오고 있었습니다). 간단한 계산에 따르면 3개월이 걸릴 것으로 보입니다.
그래서 대량 가져오기 스크립트에 다시 한 번 기회를 주기로 했습니다. 저는 일반 가져오기 스크립트를 프로덕션 컨테이너에서 실행합니다. 표준 스크립트를 잘 실행하던 바로 그 컨테이너가 Discourse 데이터베이스에 액세스할 수 없습니다. 하지만 대량 가져오기 도구는 프로덕션과 일반 가져오기 스크립트가 사용하는 것이 아니라 /var/run/postgresql/.s.PGSQL.5432에 액세스하려고 합니다. 그래서 web_only.yml에 다음을 추가했습니다.
- volume:
host: /var/discourse/shared/data/postgres_run
guest: /var/run/postgresql
이제 postgres에 액세스할 수 있습니다.
하지만 이번에는 mysql에 액세스할 수 없습니다. 일반 스크립트에서 작동하고 컨테이너 내부의 mysql 명령줄에서도 작동하는 동일한 자격 증명이 작동하지 않습니다. 액세스가 거부됩니다. 자격 증명이 예상대로 모두 존재하는지 확인하기 위해 puts를 추가했는데, 실제로 모두 존재합니다. 하지만 일반 스크립트의 코드:
@client =
Mysql2::Client.new(host: DB_HOST, username: DB_USER, password: DB_PW, database: DB_NAME)
은 잘 작동하지만, 이 코드는
@client =
Mysql2::Client.new(
host: host,
username: username,
password: password,
database: database,
reconnect: true,
)
작동하지 않습니다. 확인해 보니
puts "#{username}:#{password}@#{host}/#{database}"
puts "PASSWORD: #{password.inspect}"
을 실행하면 모든 것이 예상대로 표시됩니다.
개발 환경에서 실행해야 하나요? (왜죠?)
mysql 클라이언트와 일반 가져오기 스크립트에서는 mysql 연결이 어떻게 작동하는지, 하지만 대량 스크립트에서는 왜 작동하지 않는지 정말 막막합니다. 코드는 똑같이 보입니다. base.rb 스크립트에서 mysql에 관한 내용은 아무것도 보이지 않습니다.
아니면, 그 머신에 귀신이 들린 건지도 모릅니다.