Иннобэкапекс:Как извлечь отдельные файлы из резервных копий, сжатых 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)