【问题标题】:Connecting to mysql running in container from host through perl DBI通过perl DBI从主机连接到容器中运行的mysql
【发布时间】:2021-10-16 01:39:34
【问题描述】:

我正在尝试通过 perl 脚本连接到容器中运行的 mysql。

容器

1063b3f15b0f   mysql:latest            "docker-entrypoint.s…"   3 days ago   Up 3 days   0.0.0.0:3306->3306/tcp, 33060/tcp   test_db

使用 tcp 协议在主机上进行连接 mysql -P 3306 --protocol=tcp -u root -p

但不确定如何在 perl 中使用 DBI 指定协议

use DBI;

my $driver = "mysql";
my $host = "127.0.0.1";
my $database = "users";
my $dsn = "DBI:$driver:database=$database,host=$host";
my $userid = "root";
my $password = "testpw";

my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr;


因错误而失败

DBI connect('database=users,host=127.0.0.1','root',...) failed: Access denied for user 'root'@'localhost' (using password: YES) at update_db.pl line 10.
Access denied for user 'root'@'localhost' (using password: YES) at update_db.pl line 10.

有人可以帮忙破解吗?

【问题讨论】:

  • 你真的可以在同一台机器上使用mysql 客户端吗?它通过 DBI 到达服务器,因此端口必须正确。但是它说你进不去。听起来好像mysql中的授权不正确。

标签: mysql docker perl containers dbi


【解决方案1】:

您无需指定协议。您连接到“127.0.0.1”(而不是“localhost”)这一事实足以确保 DBI 将通过 TCP 而不是使用 Unix 套接字进行连接(有关详细信息,请参阅Connection Transport Protocols)。

但是,我怀疑您的 root 用户无权从任何地方进行连接。如果您运行以下 SQL,您会看到什么:

select user, host from mysql.user where user = 'root';

MySQL 用户模块允许您指定用户可以从哪些主机连接。 host 列中的“%”将允许来自任何主机的连接。否则,您只能从某些主机连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多