web-dev-qa-db-ja.com

dockerで実行中のデータベースのmariabackup

DockerコンテナーでMariaDBを実行していて、コンテナーのデータディレクトリ/var/lib/mysql/がホストディレクトリ/mnt/data/にマップされています。

ホストからmariabackupを実行して、データディレクトリの物理バックアップを作成します(ホストに関する限り、/mnt/dataであり、コンテナの観点からは/var/lib/mysql/です)。

エラーが発生しましたが、データディレクトリが見つからないというmariabackupの実行:

$ mariabackup --backup --user=backup --stream=xbstream -h /mnt/data/ | gzip > foo.gz
Connecting to MySQL server Host: 127.0.0.1, user: backup, password: set, port: 3306 ...
Using server version 10.3.10-MariaDB-1:10.3.10+maria~bionic
Warning: MySQL variable 'datadir' points to nonexistent directory '/var/lib/mysql/'
Warning: option 'datadir' has different balues:
    '/mnt/data/' in defaults file
    '/var/lib/mysql/' in SHOW VARIABLES
mariabackup based on MariaDB server 10.1.29-MariaDB debian-linux-gnu (x86_54)
mariabackup: uses posix_fadvise().
mariabackup: Can't change dir to '/var/lib/mysql/ (Errcode: 2 "No such file or directory")
mariabackup: cannot my_setwd /var/lib/mysql/

-hフラグでデータディレクトリを指定しないと、同様のことが起こります。私はmariabackupからcdから/mnt/data/を期待し、サーバーで実行する必要があるコマンドを実行し、SHOW VARIABLESが何を言っているかが重要ではないように見えるため、すべてが単純に機能する/mnt/data/の有効なデータディレクトリ。

  • mariabackupdatadirの2つの異なるパスを参照するという警告を理解しました。1つは-hを介して提供し、もう1つはサーバー上で提供しました。
  • ただし、データディレクトリが/var/lib/mysql/であると明示的に(-hフラグを介して)言ったときに、_mariabackup/mnt/data/を使用しようとするのはなぜですか? mariabackupを取得してサーバーの発言を無視し、cdを指定したディレクトリに取得できますか?
  • 私のアプローチがすべて間違っている場合、データディレクトリがホストディレクトリにマップされているコンテナで実行されているサーバーの物理バックアップを実行する最良の方法は何ですか?
2
ChrisP

Mariabackupが/var/lib/mysqlが存在すると考えるように、ホストにシンボリックリンクを作成します。次に、完了したらシンボリックリンクを削除します。

$ Sudo ln -s /mnt/data /var/lib/mysql
1
Maxime Gosselin