Mysql 无法写入 minikube 创建的持久卷

标签 mysql macos-sierra minikube

我正在尝试部署一个 minikube mysql pod,该 pod 具有使用 hostPath 到 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

最佳答案

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

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

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

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

关于Mysql 无法写入 minikube 创建的持久卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43858614/

相关文章:

php - 比较并显示不匹配的数据

objective-c - 在 macOS Sierra 上用 clang 编译 Objective-C

nginx - macos nginx 配置文件不存在

docker - 尝试在本地 PC 中启用 RBAC 时 Minikube 运行异常

kubernetes - MySQL 与 Kubernetes 集群集成的 DNS 错误

docker - 是否有minikube的docker镜像

php - mysql:复制表中的某些行,更改重复行中的信息

php - 如何在sql中计算用户优惠券 - mysql

MySql 类型 char 选择最大数量

macos - mac 无法远程访问 Jenkins 网页