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/
の有効なデータディレクトリ。
mariabackup
がdatadir
の2つの異なるパスを参照するという警告を理解しました。1つは-h
を介して提供し、もう1つはサーバー上で提供しました。/var/lib/mysql/
であると明示的に(-h
フラグを介して)言ったときに、_mariabackup
が/mnt/data/
を使用しようとするのはなぜですか? mariabackup
を取得してサーバーの発言を無視し、cd
を指定したディレクトリに取得できますか?Mariabackupが/var/lib/mysql
が存在すると考えるように、ホストにシンボリックリンクを作成します。次に、完了したらシンボリックリンクを削除します。
$ Sudo ln -s /mnt/data /var/lib/mysql