我试图通过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.
谁能帮我把它打开吗?您不需要指定协议。事实上,你正在连接到"127.0.0.1"。(而不是"localhost")足以确保DBI将通过TCP而不是使用Unix套接字进行连接(详细信息请参阅连接传输协议)。
然而,我怀疑你的根用户没有权限从任何地方连接。如果运行以下SQL,会看到什么:
select user, host from mysql.user where user = 'root';
MySQL用户模块允许你指定用户可以从哪个主机连接。host
列中的'%'将允许来自任何主机的连接。否则,您只能从某些主机连接。