1

我正在尝试使用 hostPath 将具有持久卷的 minikube mysql pod 部署到 Mac 主机上的 /data 或 /Users 目录。但是,创建的目录总是具有错误的权限,mysql 无法访问或写入该目录。如果我运行minikube ssh并运行,chmod -R 777 /data/db/那么 mysql 运行良好。有没有办法让 minikube 设置正确的权限?

我得到的错误是

2017-05-08 23:22:45 23 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-05-08 23:22:45 23 [Note] InnoDB: The InnoDB memory heap is disabled
2017-05-08 23:22:45 23 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-05-08 23:22:45 23 [Note] InnoDB: Memory barrier is not used
2017-05-08 23:22:45 23 [Note] InnoDB: Compressed tables use zlib 1.2.8
2017-05-08 23:22:45 23 [Note] InnoDB: Using Linux native AIO
2017-05-08 23:22:45 23 [Note] InnoDB: Using CPU crc32 instructions
2017-05-08 23:22:45 23 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-05-08 23:22:45 23 [Note] InnoDB: Completed initialization of buffer pool
2017-05-08 23:22:45 7fb9598ee740  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
2017-05-08 23:22:45 7fb9598ee740  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
2017-05-08 23:22:45 23 [ERROR] InnoDB: Creating or opening ./ibdata1 failed!
2017-05-08 23:22:45 23 [ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data!
2017-05-08 23:22:45 23 [ERROR] Plugin 'InnoDB' init function returned error.
2017-05-08 23:22:45 23 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2017-05-08 23:22:45 23 [ERROR] Unknown/unsupported storage engine: InnoDB
2017-05-08 23:22:45 23 [ERROR] Aborting

我的容器定义是

spec: {
      containers: [
        {
          name: 'percona',
          image: 'percona:5.6',
          env: [
            {
              name: 'MYSQL_ROOT_PASSWORD',
              value: secrets['system-mysql-root-password'],
            },
            {
              name: 'MYSQL_OPS_USER',
              value: variables['system-mysql-ops-user'],
            },
            {
              name: 'MYSQL_OPS_PASSWORD',
              value: secrets['system-mysql-ops-password'],
            },
            {
              name: 'MYSQL_APP_USER',
              value: variables['system-mysql-app-user'],
            },
            {
              name: 'MYSQL_APP_PASSWORD',
              value: secrets['system-mysql-app-password'],
            },
          ],
          ports: [
            {
              containerPort: 3306,
              protocol: 'TCP',
            },
          ],
          volumeMounts: [
            { name: 'data', mountPath: '/var/lib/mysql' },
            { name: 'conf', mountPath: '/etc/mysql/conf.d' },
          ],
        },
      ],
      volumes: [
        { name: 'data', hostPath: { path: '/data/db/database' } },
        { name: 'conf', hostPath: { path: '/data/db/database-conf' } },
      ],
    },

以及minikube创建的目录的默认权限

drwxr-xr-x 2 root root 4096 May  8 23:22 database
drwxr-xr-x 2 root root 4096 May  8 23:22 database-conf
4

1 回答 1

0

解决方案 1. 将主机上的权限更改为例如 777。

解决方案2.(更好)通过容器启动将卷所有者更改为mysql用户。对于码头工人(Dockerfile):

...
CMD chown mysql:mysql -R /data/db/

解决方案 3. 以 root 用户启动 mysql ;)

于 2017-05-09T20:45:35.493 回答