2017-06-18 353 views
1

由于6小时我试图找出如何ansible想在Ubuntu 16Ansible无法找到.my.cnf无法连接到本地MySQL服务器

与我MariaDB的工作当我手动登录与

的mysql -u SomeUser的-p

一切都在服务器上,当我尝试用ansible脚本访问服务器工作正常

- name: Create mysql database 
    mysql_user: name=someuser state=present password=somepw 

的抱怨:

致命:[IP]:失败! => {“changed”:false,“failed”:true, “msg”:“无法连接到数据库,请检查login_user,并且 login_password正确或/home/someuser/.my.cnf具有 凭据。消息:“}

然后我试图把.my.cnf成(2002年\ ”无法通过套接字 '/tmp/mysql.sock'(2)\连接到本地MySQL服务器 “)远程服务器上的目录就像它试图告诉我的一样。 我还添加了login_user和login_password。没有帮助。

文件看起来是这样的:

/home/someuser/.my.cnf

[client] 
user=someuser 
password=somepw 

“好吧” 我想。也许证书在安全脚本和conf文件中翻了一番。我试图离开conf文件或跳过脚本中的凭证。没有帮助

我也重新启动了mysql服务器。没有帮助。奇怪的是,从服务器本身一切工作与MySQL壳。 我真的很难找到解决方案。这不应该像魅力一样工作吗?

+0

@techraf剧本不是脚本?还有什么呢?可靠的脚本(剧本)访问服务器,否则无法理解。 (3)我知道有时程序员往往没有太多的幻想,但如果我说我加了它......也许......也许你可以预见?积极思考的人!感谢您的鼓舞人心的评论! – Jurudocs

回答

1

好吧,算了一下。 Ubuntu的16在我的情况下,把套接字文件到

/var/run/mysqld/mysqld.sock

其中ansible是没有预料到。 所以对我来说它的工作把login_unix_socket到剧本(ansible脚本)

- name: Create mysql database 
    mysql_db: 
     login_unix_socket: /var/run/mysqld/mysqld.sock 
     name: projectname 
     state: present 

,并把.my.cnf像上面提到。

0

需要远程主机上的MySQLdb Python包。对于Ubuntu,这与apt-get install python-mysqldb一样简单。 (见apt。)对于CentOS/Fedora,这与yum安装MySQL-python一样简单。 (请参见百分比)

当您传递凭据时,login_password和login_user都是必需的。如果不存在,模块将尝试从〜/ .my中读取证书。CNF,最后回落到使用“根”的MySQL的默认登录,没有密码

之后,请使用以下的代码与数据库连接:

mysql_user: 
    name: root 
    password: deepak 
    login_unix_socket: /var/run/mysqld/mysqld.sock 

请从my.cnf验证您的套接字文件并更新它。

如果您正在从远程主机的剧本,你可能会得到错误 "msg": "unable to connect to database, check login_user and login_password are correct or /home/********/.my.cnf has the credentials. Exception message: (1045, \"Access denied for user '********@'localhost' (using password: NO)\")"

要解决这一点,你必须允许远程主机连接到MySQL。

相关问题