Bug 43463

Summary: Не работает ключ --datadir при создании бэкапа в xtrabackup
Product: Sisyphus Reporter: Alexandr Shashkin <dutyrok>
Component: percona-xtrabackupAssignee: Alexei Takaseev <taf>
Status: CLOSED WORKSFORME QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: taf
Version: unstable   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
Логи выполнения команды xtrabackup none

Description Alexandr Shashkin 2022-08-05 16:13:07 MSK
Created attachment 11290 [details]
Логи выполнения команды xtrabackup

Версия программы:
=================
percona-xtrabackup-8.0.28-alt1
MySQL-server-8.0.29-alt1

Шаги, приводящие к ошибке:
==========================
1) Установить необходимые пакеты:
   # apt-get install percona-xtrabackup perl-DBD-mysql -y
2) Установить и запустить MySQL:
   # rm -rvf /var/lib/mysql/ && apt-get --reinstall install MySQL -y
   # chkconfig mysqld on && systemctl enable --now mysqld ; sleep 2 ; \
   systemctl status --no-pager mysqld
3) Выполнить команду для backup, указав другой каталог с базами данных:
   # mkdir -p /data/backups && xtrabackup --backup --target-dir=/data/backups/base \
   --datadir=/var/lib/mysql/db/

Результат:
==========
Создание бэкапа не происходит, так как отсутствует файл /db/binlog.0000* (/db/ это каталог с базами данных для xtrabackup по умолчанию), а он (файл binlog.0000*) находится в /var/lib/mysql/db. При этом все остальные файлы копируются из указанного при помощи ключа --datadir каталога. (См приложенный лог)

Ожидаемый результат:
====================
При использовании ключа --datadir все все файлы копируются из директории, указанной им.
Comment 1 Alexei Takaseev 2022-08-05 17:07:35 MSK
Проблема кроется в chroot-режиме работы сервера СУБД. Сама утилита честно
идет в каталог, указанный в --datadir и там считывает содержимое файлов *.index
в которых как раз указывается место положение файлов бинарных логов. В случае
работы СУБД в chroot'е, там как раз будут строки вида
/db/mysql-bin.000082
/db/mysql-bin.000083

и естественно утилита не сможет найти эти файлы. Вариантов решения мне видится два:

1 - крайне неправильный, создание символьной ссылки ln -s /var/lib/mysql/db /db
2 - правильный: control mysqld-chroot disabled && systemctl restart mysqld