容器、主机、容器间权限相关

两个问题,原因是一样的

为什么 docker mysql 建出来的 /var/lib/mysql 用户是 systemd-coredump

是 systemd-coredump 只是碰巧而已

因为 mysql 容器内的 mysql 用户 ID 是 999

1
2
# passwd in mysql container
mysql:x:999:999::/var/lib/mysql:/bin/bash

而主机上的 999 为 systemd-coredump

1
2
# passwd on host
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin

为什么 percona-xtrabackup 备份容器中的 mysql 显示无权限

1
2
3
2023-07-24T02:47:58.476552-00:00 0 [ERROR] [MY-012592] [InnoDB] Operating system error number 13 in a file operation.
2023-07-24T02:47:58.476735-00:00 0 [ERROR] [MY-012595] [InnoDB] The error means mysqld does not have the access rights to the directory.
2023-07-24T02:47:58.490978-00:00 0 [ERROR] [MY-013861] [InnoDB] Failed to list redo log files in the redo log directory ./#innodb_redo/

因为 percona-xtrabackup 容器内的 mysql 用户又是其它 ID

1
2
3
# passwd in xtrabackup container
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
mysql:x:1001:1001:Default Application User:/home/mysql:/sbin/nologin

可以在 docker run 时指定用户 -u 解决这个问题

1
docker run --rm -u 999:999 --volumes-from [some-mysql] -v ./backup:/backup percona/percona-xtrabackup xtrabackup --backup --datadir=/var/lib/mysql/ --target-dir=/backup --user=user --password=password