كيفية نسخ قاعدة البيانات احتياطيًا فقط (بدون ملفات) من وحدة التحكم؟

هل توجد طريقة لعمل نسخة احتياطية لقاعدة البيانات فقط من وحدة التحكم؟

./launcher enter app
discourse backup

يفشل عند محاولة تضمين الملفات المرفوعة:

...
إعادة تشغيل sidekiq...
إنهاء النسخة الاحتياطية...
إنشاء الأرشيف: mysite-2020-02-24-183504-v20200203061927.tar.gz
التأكد من عدم وجود الأرشيف مسبقًا...
إنشاء أرشيف فارغ...
أرشفة بيانات النسخة الاحتياطية...
أرشفة الملفات المرفوعة...
استثناء: lib/discourse.rb:57:in `exec': فشل في أرشفة الملفات المرفوعة.
tar: /var/www/discourse/public/backups/default/mysite-2020-02-24-183504-v20200203061927.tar: تم كتابة 2048 بايت فقط من أصل 10240 بايت
...

غير متأكد.. @gerhard أو @vinothkannans هل لديكم أي أفكار؟

نعم، يمكنك أخذ نسخة احتياطية لقاعدة البيانات فقط من وحدة تحكم Rails باستخدام الأوامر أدناه.

./launcher enter app
rails c
> BackupRestore::Backuper.new(Discourse.system_user.id, with_uploads: false)

حسناً، لم يتم إنشاء ملف النسخ الاحتياطي. ومع ذلك، يعمل النسخ الاحتياطي اليدوي كما هو متوقع.

هل توجد أي سجلات يجب أن أفحصها؟

مخرجات الأمر:

[1] pry(main)> BackupRestore::Backuper.new(Discourse.system_user.id, with_uploads: false)
=> #<BackupRestore::Backuper:0x0000562961f73998
 @archive_basename="/var/www/discourse/public/backups/default/mysite-2020-02-25-140934-v20200203061927",
 @archive_directory="/var/www/discourse/public/backups/default",
 @backup_filename="mysite-2020-02-25-140934-v20200203061927.sql.gz",
 @client_id=nil,
 @current_db="default",
 @dump_filename="/var/www/discourse/tmp/backups/default/2020-02-25-140934/dump.sql.gz",
 @filename_override=nil,
 @logs=[],
 @publish_to_message_bus=false,
 @readonly_mode_was_enabled=true,
 @store=#<BackupRestore::LocalBackupStore:0x0000562961f74938 @base_directory="/var/www/discourse/public/backups/default">,
 @success=false,
 @timestamp="2020-02-25-140934",
 @tmp_directory="/var/www/discourse/tmp/backups/default/2020-02-25-140934",
 @user=
  #<User:0x0000562961f70c48
   id: -1,
   username: "system",
   created_at: Wed, 16 Jul 2014 08:22:15 UTC +00:00,
   updated_at: Mon, 24 Feb 2020 23:41:26 UTC +00:00,
   name: "system",
   seen_notification_id: 0,
   last_posted_at: Thu, 13 Feb 2020 05:29:57 UTC +00:00,
   password_hash: [FILTERED],
   salt: "5a5b04e52bc687549aeb1fc8c7537af6",
   active: true,
   username_lower: "system",
   last_seen_at: nil,
   admin: true,
   last_emailed_at: nil,
   trust_level: 4,
   approved: true,
   approved_by_id: nil,
   approved_at: nil,
   previous_visit_at: nil,
   suspended_at: nil,
   suspended_till: nil,
   date_of_birth: nil,
   views: 0,
   flag_level: 0,
   ip_address: nil,
   moderator: true,
   title: nil,
   uploaded_avatar_id: 1,
   locale: nil,
   primary_group_id: nil,
   registration_ip_address: nil,
   staged: false,
   first_seen_at: nil,
   silenced_till: nil,
   group_locked_trust_level: nil,
   manual_locked_trust_level: 4,
   secure_identifier: nil>,
 @user_id=-1,
 @with_uploads=false>

آه، لقد نسيت إضافة .run في النهاية. يجب أن يكون الأمر BackupRestore::Backuper.new(Discourse.system_user.id, with_uploads: false).run

أصبحت مهتمًا بالموضوع وقرأت العديد من المناقشات. استنتاجي هو أنه حتى من الآمن استعادة النسخ مباشرة من وحدة التحكم لتجنب الأخطاء - بشكل عام، كيف يتم ذلك بشكل صحيح؟