【问题标题】:DbDeployer - MySQL instance - Grants for new databases (or root user)DbDeployer - MySQL 实例 - 授予新数据库(或 root 用户)
【发布时间】:2021-04-06 15:11:01
【问题描述】:

此问题与位于Dbdeployer at Github 的第 3 方工具 dbdeployer 相关

有问题的部分:

用户:

root,默认授权由正在安装的服务器版本给出。

我分别在port 5730 and port 5731 上安装了一个实例。 (对应 MySQL 5.7.30 和 5.7.31)。

我可以这样连接:

mysql -u msandbox -p -h 127.0.0.1 -P 5730
mysql -u msandbox -p -h 127.0.0.1 -P 5731
mysql -u mycustomusername -p -h 127.0.0.1 -P 5730

我为文章中所示的赠款创建了一个文件:

使用选项--post-grants-sql-file 加载指令。

> cat << EOF > orchestrator.sql

CREATE DATABASE IF NOT EXISTS orchestrator;
CREATE USER orchestrator IDENTIFIED BY 'msandbox';
GRANT ALL PRIVILEGES ON orchestrator.* TO orchestrator;
GRANT SELECT ON mysql.slave_master_info TO orchestrator;

EOF

$ dbdeployer deploy single 5.7 \
  --post-grants-sql-file=$PWD/orchestrator.sql

这适用于由 SQL 脚本(及其授权)部署的新空数据库,但我现在有一个 现有 实例,并希望从 创建一个新数据库>在 mysql 实例中

文章声称root应该可用,但是:

mysql -u root -p -h 127.0.0.1 -P 5731
Access denied for user 'root'@'localhost' (using password: YES)

我在 3306 上安装了本地实例,但这不应该是我需要登录的用户

当我这样做时:

mysql -u root -p -h localhost -P 5731

我可以登录,_但是这似乎忽略了端口(当连接为 localhost 时),因为我看到 不同的数据库(那些在端口 3306 上而不是来自 5730/5731 的那些)

这也证实了我对端口被忽略的怀疑:

SHOW GRANTS FOR mycustomusername;
ERROR 1141 (42000): There is no such grant defined for user 'mycustomusername' on host '%'

SHOW GLOBAL VARIABLES LIKE '%port%';
.... truncated ....
port   | 3306

我需要使用root@host5731root@host5730,但这里似乎没有使用root 的方法?

我需要执行以下一项(其中一项):

  • 在这些端口使用root 用户,
  • 想办法让msandboxmycustomusername 能够在新数据库上执行GRANT ALL PRIVILEGES

为什么?

当我已经拥有现有数据库时,我无法删除/重新创建新的 MySQL 实例来添加新数据库(使用 SQL 文件方法)--post-grants-sql-file

【问题讨论】:

    标签: mysql database port dbdeploy


    【解决方案1】:

    已安装 Dbdeployer 实例和设置,并将 root 的密码配置为与指定用户名相同的密码(默认用户名 msandbox)。

    你不能这样做(尽管 github repo 上的一些答案声称你可以)

    dbdeployer deploy single 5.7.31 -u root -p somepassword
    

    发生的事情(并且在任何容易访问的地方都没有明确提及)是您可以执行以下操作:

    dbdeployer deploy single 5.7.31 -u someuser -p somepassword
    

    Dbdeployer 设置然后部署此 someuser AND root 以获得相同的密码 (somepassword)。

    更多信息:

    我发现我可以这样做:

    cd /var/dbdeployer/instance/location/of/mysql.5.7.31/
    ./use -u root
    

    (此处未指定密码。) 检查./use 脚本,它会从您的配置中获取密码(这是someuser 的密码。

    这使我们能够通过root 登录以更改授权:

    mysql -u root -p -h 127.0.0.1 -P 5731
    

    我现在已经从内部更改了密码:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
    

    这会阻止您在外部使用./use -u root,因为密码现在与其他用户不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-12
      • 2011-03-13
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多