版本:
安装方法:
我通过以下方式安装了 Ansible:
目标=“/tmp/ansible01” sudo apt-get install python-setuptools 须藤easy_install virtualenv cd $TARGET && virtualenv ansible 源 $TARGET/ansible/bin/activate pip 安装 ansible
描述:
使用此剧本(从文档中复制/粘贴),客户端上的 mysql 查询能够实际创建用户。 但它无法应用特权。
- 名称:设置 Galera 用户密码 mysql_user: login_user={{ mysql_user }} login_password={{ mysql_password }} name={{ galera_user }} password={{ galera_password }} state=present priv=*.*:ALL
抛出错误:
REMOTE_MODULE mysql_user login_user=root login_password=curious name=elvis password=spring state=present priv=*.*:ALL 致命:[c6-4] => 解析失败:回溯(最近一次调用): 文件“/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user”,第1348行,在 主要的() 文件“/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user”,第405行,主 更改 = user_mod(光标,用户,主机,密码,priv) 文件“/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user”,第 188 行,在 user_mod 中 权限撤销(光标、用户、主机、db_table、grant_option) 文件“/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user”,第263行,在privileges_revoke 游标.执行(查询) 文件“/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py”,第173行,在执行中 self.errorhandler(self, exc, value) 文件“/usr/lib64/python2.6/site-packages/MySQLdb/connections.py”,第 36 行,在 defaulterrorhandler 引发错误类,错误值 _mysql_exceptions.OperationalError: (1045, "访问被拒绝用户 'root'@'localhost' (使用密码: YES)") 致命:所有主机都已经失败——正在中止
请注意,用户实际上确实被创建了:
[root@c6-4 ~]# mysql mysql -e "select Host,User from user;" | 猫王 | 本地主机 | 猫王 |
这似乎是一个 MySQL 模块身份验证问题(可能需要设置 my.cnf 等),如果您需要帮助,请访问邮件列表。
经验教训:不要不假思索地从文档中复制/粘贴。
为后代:
我使用此任务来更改 mysql 用户“root”的密码:
- name- name: 设置 MySQL Root 密码 mysql_user: name=root password={{ mysql_password}} priv=*.*:ALL state=present
似乎这破坏了“root”的 GRANT 权限,因此无法向新创建的用户授予权限...
他妈的,我也遇到了同样的情况。 应尽快在此处更改文档。
现在我必须手动修复很多系统:(
我花了很长时间才弄清楚为什么对现有用户的某些调用或删除用户可以正常工作,但是使用相同的正确凭据创建新用户是不可能的......
这应该重新打开,直到文档被修复,并且 mysql_user 模块中应该有一个预防机制或者至少是一个警告!!!
这可能会破坏许多系统,查找或修复它很麻烦。
如果有人真的想通过priv=*.*:ALL
删除授权,即使对于 root 用户也应该有另一个选项来强制执行此操作(文档中有一个很大的警告,这可能会使您没有任何具有授权权限的用户)或它如果没有找到具有授予权限的用户,则应该失败...
手动修复是使用以下选项重新启动 mysql:
--skip-grant-tables
并在 mysql 命令中执行以下命令(注意:GRANT ... ALL .. 不起作用,因为该授权表被跳过了):
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;