我已经使用 Ansible playbook 配置了我的服务器。我使用了root/bedrock-Ansible playbook。
其中一项任务是设置 mysql 服务器以及 mysql root 用户密码。
现在我迫切需要更改此密码。我采取的步骤:
ansible-playbook -i hosts/staging server.yml
是为了重新配置服务器所有任务都按预期执行(没有更改),但脚本失败并
[mariadb | Set root user password]
显示以下消息:
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
Run Code Online (Sandbox Code Playgroud)
我的猜测是,一旦设置了 MySQL 根密码,重新配置服务器就无法更改此密码。
是否可以通过使用 Ansible 重新配置服务器来更改 MySQL 根密码?我有哪些选择?
yda*_*coR 16
您遇到的问题是 Ansible 正在尝试使用与您想将其更改为相同的 root 密码登录:
- name: Set root user password
mysql_user: name=root
host="{{ item }}"
password="{{ mysql_root_password }}"
check_implicit_admin=yes
login_user="{{ mysql_user }}"
login_password="{{ mysql_root_password }}"
state=present
Run Code Online (Sandbox Code Playgroud)
显然,如果你想用这个剧本来改变它,这永远不会奏效。
相反,您应该将上述播放更改为:
- name: Set root user password
mysql_user: name=root
host="{{ item }}"
password="{{ mysql_root_password }}"
check_implicit_admin=yes
login_user="{{ mysql_user }}"
login_password="{{ mysql_old_root_password }}"
state=present
Run Code Online (Sandbox Code Playgroud)
然后更新相关的清单文件以添加这个新变量。
所以你group_vars/production
现在应该包含:
mysql_old_root_password: productionpw
mysql_root_password: newproductionpw
Run Code Online (Sandbox Code Playgroud)
它看起来像这样的剧本中都使用了root密码roles/mariadb/tasks/main.yml
剧本,也roles/wordpress-setup/tasks/database.yml
因此你可能需要运行整个server.yml
剧本,以确保该设置正确。
小智 11
您可以滥用~/.my.cnf来更改 mysql-root-password。
诀窍是有一个任务“设置root密码”(nr.1),它将设置密码。之后,您有一个任务,它使用正确的凭据 (nr.2)创建一个~/.my.cnf。
在新系统上,~/.my.cnf不存在。任务 nr.1 将使用给定的凭据创建 mysql-root-user。在现有系统上,来自~/.my.cnf 的凭据用于登录并将密码设置为mysql_root_password。任务 nr.2 将创建~/.my.cnf,或用新凭据覆盖现有的旧凭据~/.my.cnf。
这种方法的一大优点是只有一个变量“mysql_root_password”,从剧本的角度来看,它总是正确的。在目前的系统上,~/.my.cnf是当前本地 mysql-credentials 的一种存储。
- name: Set root user password
# If .my.cnf already exists, this will cause an mysql-root-password update.
mysql_user:
name: root
password: "{{ mysql_root_password}}"
check_implicit_admin: true
- name: Create .my.cnf
template:
src: "client.my.cnf.j2"
dest: "/root/.my.cnf"
owner: root
group: root
mode: 0600
Run Code Online (Sandbox Code Playgroud)
使用 client.my.cnf.j2:
[client]
user=root
password={{ mysql_root_password }}
Run Code Online (Sandbox Code Playgroud)
进一步阅读
ansible-mysql_user_module-documentation 的相关说明:
注1:
为了保护这个用户作为幂等剧本的一部分,您必须至少创建两个任务:第一个必须更改 root 用户的密码,而不提供任何 login_user/login_password 详细信息。第二个必须删除包含新根凭据的 ~/.my.cnf 文件。然后,通过从文件中读取新凭据,剧本的后续运行将成功。ansible-mysql_user_module,注释
笔记2:
传递凭据时, login_password 和 login_user 都是必需的。如果不存在,模块将尝试从 ~/.my.cnf 读取凭据,并最终回退到使用没有密码的 MySQL 默认登录“root”。ansible-mysql_user_module,注释
归档时间: |
|
查看次数: |
37928 次 |
最近记录: |