我需要在python脚本中使用mysql客户端执行sql文件(我不能使用python-mysql模块执行查询(,数据库是GCloud上的mysql实例,我使用cloud_sql_proxy
连接到该实例。
我使用tcp启动了my_sql_proxy
,比如:
./cloud_sql_proxy -instances=<my_instance>=tcp:12367
我正在尝试执行这样的sql脚本:
gunzip -c <filename>.sql.gz 2>&1 | mysql --host=127.0.0.1 --port=12367 --user=<user> --password=<password> <dbmane>
这会产生以下错误:
ERROR 1045 (28000): Access denied for user '<myuser>'@'cloudsqlproxy~<some ip>' (using password: YES)
我显然检查了user/pwd/instance是否正确。
指向实际托管在localhost上的mysql实例的相同命令也在工作。
在运行相同的cloud_sql_proxy
进程的情况下,我可以使用具有相同身份验证信息的Sequel Pro
客户端进行连接,并且可以使用以下命令连接到数据库:
/rnd/pos/components/mysql --host=127.0.0.1 --port=12367 --user=<myuser> -p <dbname>
>>> Enter password:
>>> Welcome to the MySQL monitor. Commands....
连接时,这是SELECT USER(), CURRENT_USER();
的输出(屏蔽(
+--------------------------------------------+-------------------------------------------------+
| USER() | CURRENT_USER() |
+--------------------------------------------+-------------------------------------------------+
| <my user>@cloudsqlproxy~<same ip as above> | <my user>@cloudsqlproxy~<part of the same ip>.% |
+--------------------------------------------+-------------------------------------------------+
我尝试使用-p[password]
和--password[=password]
,输出相同。
为什么--密码被阻止?它是cloud_sql_proxy
配置吗?还是MySQL实例设置?我在谷歌上搜索了一下,但找不到任何与我的案件相关的东西。
我怀疑mysql
默认情况下会查找套接字,而cloud_sql_proxy
明确使用TCP。
我认为添加--protocol=TCP
应该可以解决问题。至少当我在同样的情况下面对这个障碍时,它帮助了我。