إينوباكوبكس:كيفية استخراج الملفات الفردية من النسخ الاحتياطية المضغوطة xbstream
-
28-09-2020 - |
سؤال
نحن نقوم ببرمجة مزيج من إعداد النسخ الاحتياطي الكامل والمتزايد للواجهة الخلفية للمنتج الخاص بنا مع تشغيل النسخ الاحتياطي الكامل والنسخ الاحتياطي المتزايد يوم الأحد في جميع الأيام المتبقية.
في هذه العملية، يجب أن نكون قادرين على قراءة رقم LSN للملف من ملف النسخة الاحتياطية الكاملة.
لقد قمنا بإعداد البرنامج النصي لضغط النسخة الاحتياطية إلى تنسيق xbstream بحيث يؤدي ذلك إلى ضغط ملف واحد لجميع البيانات.
والسؤال المطروح الآن هو كيفية استخراج أو قراءة LSN أو ملف معلومات واحد من ملف xbstream الكامل.
على الرغم من أنه يمكننا استخدام ملف السجل لهذا الغرض، إلا أننا أردنا حلاً أكثر موثوقية.
شكرًا لك.
المحلول
يقوم XtraBackup بتسجيل أحدث LSN ليس فقط في xtrabackup_info
والذي سيتعين عليك استخراجه، ولكن إلى STDERR أيضًا:
150731 16:33:28 innobackupex: Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
150731 16:33:28 innobackupex: Waiting for log copying to finish
xtrabackup: The latest check point (for incremental): '1948062848'
xtrabackup: Stopping log copying thread.
.>> log scanned up to (1948062848)
سيكون LSN 1948062848
.ابحث عن السلسلة xtrabackup: The latest check point (for incremental):
في الإخراج.يرى http://bazaar.launchpad.net/~twindb-dev/twindb-agent/trunk/view/head:/twindb.py#L1888 على سبيل المثال:
def grep_lsn(output):
"""
Finds LSN in XtraBackup output
:param output: string with Xtrabackup output
:return: LSN
"""
lsn = None
for line in output.split("\n"):
if line.startswith("xtrabackup: The latest check point (for incremental):"):
lsn = line.split("'")[1]
return lsn
ثم مرر 1948062848
مع --incremental-lsn=
الخيار عند أخذ نسخة إضافية.مثال: http://bazaar.launchpad.net/~twindb-dev/twindb-agent/trunk/view/head:/twindb.py#L1429
if backup_type == 'incremental':
last_lsn = job["params"]["lsn"]
xtrabackup_cmd.append("--incremental")
xtrabackup_cmd.append(".")
xtrabackup_cmd.append("--incremental-lsn=%s" % last_lsn)