radondb-mysql-kubernetes
radondb-mysql-kubernetes copied to clipboard
关于启用root用户的问题!
按照issue中所说:将allowEmptyRootPassword设置为false,客户端连接时还是提示:

配置文件如下:

Hi! thanks for your contribution! great first issue!
你好,你安装的是helm版本,现在我们主要维护功能更强大的operator版本,建议你安装体验operator版本
您的意思是helm版本的,启用root这部分是有问题的是吗?我是在kubesphere的应用商店中安装的。

operator版本的需要您按照文档来部署,目前还不支持直接通过kubesphere一键部署。部署文档
From: https://github.com/kubesphere/website/issues/2202
operator 版本也遇到类似情况。
我的需求:打开 root 的远程有密码访问。
但我找不到途径满足它。
我试过两种方法:
- 尝试在创建
MysqlCluster资源的时候,把spec.mysqlOpts.rootHost设为了"%";但,不管用。 - 尝试根据文档 https://radondb.com/docs/mysql/v2.1.3/feature/mysqluser 内的线索,去寻找
root用户的配置;但是,什么也没有。
这是我的资源:
apiVersion: mysql.radondb.com/v1alpha1
kind: MysqlCluster
metadata:
name: mysql
namespace: mysql-bdp
spec:
replicas: 3
mysqlVersion: "5.7"
# the backupSecretName specify the secret file name which store S3 information,
# if you want S3 backup or restore, please create backup_secret.yaml, uncomment below and fill secret name:
# backupSecretName:
# if you want create mysqlcluster from S3, uncomment and fill the directory in S3 bucket below:
# restoreFrom:
mysqlOpts:
rootPassword: "RadonDB@123"
rootHost: "%"
user: radondb_usr
password: RadonDB@123
database: radondb
initTokuDB: true
# A simple map between string and string.
# Such as:
# mysqlConf:
# expire_logs_days: "7"
mysqlConf:
expire_logs_days: "7"
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 1Gi
xenonOpts:
image: radondb/xenon:1.1.5-alpha
admitDefeatHearbeatCount: 5
electionTimeout: 10000
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 100m
memory: 256Mi
metricsOpts:
enabled: false
image: prom/mysqld-exporter:v0.12.1
resources:
requests:
cpu: 10m
memory: 32Mi
limits:
cpu: 100m
memory: 128Mi
podPolicy:
imagePullPolicy: IfNotPresent
sidecarImage: radondb/mysql-sidecar:v2.1.4
busyboxImage: busybox:1.32
slowLogTail: false
auditLogTail: false
labels: {}
annotations: {}
affinity: {}
priorityClassName: ""
tolerations: []
schedulerName: ""
# extraResources defines quotas for containers other than mysql or xenon.
extraResources:
requests:
cpu: 10m
memory: 32Mi
persistence:
enabled: true
accessModes:
- ReadWriteOnce
#storageClass: ""
size: 20Gi
其中我把 spec.mysqlOpts.rootHost 设为了 "%" ,它原本是 localhost 。
我 apply 这个 yaml ,等待有状态副本集的 Pod 都正常运行后,我尝试连接,却仍然不妥:
如图,我先分别试过了用 -p 和不用,但都不行;但换做 radondb_usr 就可以了。
这是我寻找 root 用户的 MysqlUser 资源时看到的:
暂时算是解决了。
我通过 mysql-leader 服务找到对应 Pod 并进入 mysql 容器的终端,然后执行 grant 命令即可:
grant all privileges on *.* to 'root'@'%' identified by 'RadonDB@123' with grant option ;
然后就可以远程登陆了:
这个改动按说是作用于持久卷了的。因此,按说是不怕 Pod 重建把它给冲没了。不过我没测试就是了。
@yhm-amber
你好,目前默认禁止使用远程root,可以通过创建超级用户来代替。 #182
@yhm-amber
你好,目前默认禁止使用远程root,可以通过创建超级用户来代替。 #182
了解,我也找到了让微服务不要用名为 root 的用户登录的途径。
但是问个事:我上面这样打开的 root 远程登录,经过集群/Pod等重启后,它会失效吗?
grant all privileges on *.* to 'root'@'%' identified by 'RadonDB@123' with grant option ;
因为我没看到像 mysql 那样的管理用户信息的库(应该是 mysql 库)在这个 radondb 的 mysql 里存在,所以我不知道我用 grant 命令这样做,会不会有啥问题。。。
@yhm-amber 你好,目前默认禁止使用远程root,可以通过创建超级用户来代替。 #182
了解,我也找到了让微服务不要用名为 root 的用户登录的途径。
但是问个事:我上面这样打开的 root 远程登录,经过集群/Pod等重启后,它会失效吗?
grant all privileges on *.* to 'root'@'%' identified by 'RadonDB@123' with grant option ;因为我没看到像 mysql 那样的管理用户信息的库(应该是 mysql 库)在这个 radondb 的 mysql 里存在,所以我不知道我用
grant命令这样做,会不会有啥问题。。。
不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。
不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。
。。。还好改回来不?
不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。
。。。还好改回来不?
节点重启之后会恢复(sts的节点,为了保持一致,建议重建sts,如果不想停服务,更改cluster的配置,触发一次滚动更新即可)
不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。
。。。还好改回来不?
节点重启之后会恢复
这个节点是指 STS 就算,还是必须是 k8s 的 node 重启才能恢复它?(我猜应该是前者……对吧,不会必须重启 node 吧。。。)
另外,关于普通用户的问题:
我有一堆通过 grant 创建微服务用户与库并给权限的代码。果普通用户只能用 Yaml 创建 MysqlUser 的 Kind 来创建用户的话,以前在 MySQL 的一些初始化代码岂不是不能复用了。。。
普通用户和数据库(以及相关权限)可以用 grant 创建,并能,不受(任何一种)重启所影响地、持久地存在吗?
示例:
create database if not exists `{}` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci ;
grant all on `{}`.* to "{}"@"%" identified by "{}-P@88w0rd" ;
show grants for "{}"@"%" ;
这是个模板,实际使用把 {} 换成服务名称。
不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。
。。。还好改回来不?
节点重启之后会恢复
这个节点是指 STS 就算,还是必须是 k8s 的 node 重启才能恢复它?(我猜应该是前者……对吧,不会必须重启 node 吧。。。)
另外,关于普通用户的问题:
我有一堆通过
grant创建微服务用户与库并给权限的代码。果普通用户只能用 Yaml 创建MysqlUser的 Kind 来创建用户的话,以前在 MySQL 的一些初始化代码岂不是不能复用了。。。普通用户和数据库(以及相关权限)可以用
grant创建,并能,不受(任何一种)重启所影响地、持久地存在吗?
普通用户可以直接使用sql操作,operator仅限制内置的用户,如root,replication-user,metrics-user等
普通用户可以直接使用sql操作,operator仅限制内置的用户,如root,replication-user,metrics-user等
好的。
另外,那个 MysqlUser 类型的资源,是不是,它并不能同步显示所有存在用户,只是单向地影响已有的 RadonDB MySQL 集群实例用的?
因为,我在(上面提到的)创建集群实例的 Yaml 里有设置 spec.mysqlOpts.user = radondb_usr ,但我仍然没看到我有任何的 MysqlUser 类型的资源被创建。
普通用户可以直接使用sql操作,operator仅限制内置的用户,如root,replication-user,metrics-user等
好的。
另外,那个
MysqlUser类型的资源,是不是,它并不能同步显示所有存在用户,只是单向地影响已有的 RadonDB MySQL 集群实例用的?因为,我在(上面提到的)创建集群实例的 Yaml 里有设置
spec.mysqlOpts.user = radondb_usr,但我仍然没看到我有任何的MysqlUser类型的资源被创建。
- mysqluser 不会同步mysql中已有的用户,只能保存使用它声明的用户的信息。
- 默认创建的几个用户(内置用户,不提供使用)是直接写到init.sql的,并不是通过mysqluser cr来管理。
- mysqluser 不会同步mysql中已有的用户,只能保存使用它声明的用户的信息。
- 默认创建的几个用户(内置用户,不提供使用)是直接写到init.sql的,并不是通过mysqluser cr来管理。
有没有一个类似于 init.sql.d 的目录,能让我用 configmap 挂进去在启动容器的时候做初始化?
我在 kubectl explain MysqlCluster 里靠猜来找了一下,没找到。。。
- mysqluser 不会同步mysql中已有的用户,只能保存使用它声明的用户的信息。
- 默认创建的几个用户(内置用户,不提供使用)是直接写到init.sql的,并不是通过mysqluser cr来管理。
有没有一个类似于
init.sql.d的目录,能让我用 configmap 挂进去在启动容器的时候做初始化?我在
kubectl explain MysqlCluster里靠猜来找了一下,没找到。。。
这个后续会支持