aru*_*han 9 mysql linux centos ansible
我的远程系统上安装了 mysql 5.7。我必须创建一个新数据库和一个新用户访问该数据库。因为它是 mysql-community-server 5.7 最初我必须从 /var/log/mysqld.log grep 密码
[root@lamp2 labadmin]# cat /var/log/mysqld.log | grep temporary
2018-01-09T10:57:17.326484Z 1 [Note] A temporary password is generated for
root@localhost: gg%j,opuE3Sm
2018-01-09T10:57:34.471131Z 0 [Note] InnoDB: Creating shared tablespace for
temporary tables
Run Code Online (Sandbox Code Playgroud)
因此,通过使用 ansible,我如何授予 root 访问权限,因为我找不到任何模块来使用此密码。我想为此创建一个脚本。我已执行以下剧本并出现错误
- hosts: lamp
remote_user: root
vars:
dbname: wordpressdb
dbuser: wordpressuser
password: REDhat@123
tasks:
- name: installing mysql-python
yum:
name: MySQL-python
state: present
- name: Creating database
mysql_db: name={{ dbname }} state=present
- name: Create db User
mysql_user: name={{ dbuser }} password={{ password }} priv=*.*:ALL
host='localhost' state=present
Run Code Online (Sandbox Code Playgroud)
错误:
TASK [Creating database]
*******************************************************
fatal: [52.172.48.12]: FAILED! => {"changed": false, "failed": true, "msg":
"unable to find /root/.my.cnf. Exception message: (1045, \"Access denied
for user 'root'@'localhost' (using password: NO)\")"}
Run Code Online (Sandbox Code Playgroud)
帮我找到解决方案。我是 ansible 的新手。我也想知道如何重置 root 密码。
注意:我已经将 .my.cnf 复制到包含用于 mysql 登录的用户名和密码的目标。但是我是手动完成的。我想首先使用该临时密码登录。我怎样才能使它成为可能
小智 10
MySQL 5.7 的“全新”安装允许使用套接字文件进行本地 root 登录(关键点是login_unix_socket: /var/run/mysqld/mysqld.sock
tasks/main.yml 中的行)
尽管在其他答案中提到了“shell”解决方法,但类似问题可以完成它们的工作-它们不是幂等的,并且会产生不好的“已更改”状态。
以下代码段在 Ubuntu 18.04+ 上以完全幂等的方式工作
# ...deleted...
- name: Ensure mysql is running and starts on boot
service:
name: mysql
state: started
enabled: yes
become: yes
- name: Ensure mysql root password is updated for all root accounts
mysql_user:
name: root
host: "{{ item }}"
login_unix_socket: /var/run/mysqld/mysqld.sock
password: "{{ mysql.root_db_password }}"
priv: '*.*:ALL,GRANT'
check_implicit_admin: true
loop: "{{ mysql.hosts }}"
become: yes
notify: Restart MySQL
- name: Create `/root/.my.cnf` with root password credentials
template:
src: my.cnf.j2
dest: /root/.my.cnf
owner: root
mode: 0600
become: yes
notify: Restart MySQL
Run Code Online (Sandbox Code Playgroud)
[client]
user=root
password={{ mysql.root_db_password }}
Run Code Online (Sandbox Code Playgroud)
mysql:
root_db_password: REDACTED
hosts:
- "{{ ansible_hostname }}"
- 127.0.0.1
- ::1
- localhost
Run Code Online (Sandbox Code Playgroud)
小智 1
如mysql_db 模块注释和mysql_user 注释中所述(两者的文本相同):
\n\n\n\n\n当您传递凭据时,需要登录密码和登录用户。\n 如果不存在,模块将尝试从 ~/.my.cnf 读取\n 凭据,并最终回退到使用 \xe2\x80\x98root\xe2\x80\x99 的 MySQL\n 默认登录名,且不带任何凭据。密码。
\n
所以你有几个选择:
\n\n将凭据传递给任务
\n\n- name: Creating database\n mysql_db: name={{ dbname }} state=present login_user={{ DB_USER }} login_password={{ DB_USER_PASS }} \n\n- name: Create db User\n mysql_user: name={{ dbuser }} password={{ password }} priv=*.*:ALL\n host=\'localhost\' state=present login_user={{ DB_USER }} login_password={{ DB_USER_PASS }} \n
Run Code Online (Sandbox Code Playgroud)\n\n将 DB_USER 和 DB_USER_PASS 替换为您的数据库用户管理员凭据。
\n\n但这远非最佳,因为您必须将凭据放入每个 mysql 任务中,并且您的凭据应该位于您的 ansible 代码中。您可以使用ansibleVault来缓解这种情况,但即使有更好的选择。
\n\n写入~/.my.cnf
带有凭据的文件
~/.my.cnf
使用 mysql 凭据在用户的主目录(可能是 root)中创建或编辑文件:
[client]\nuser=root\npassword="PASSWORD"\n
Run Code Online (Sandbox Code Playgroud)\n\n(您可能需要添加其他连接详细信息)。
\n\n第三个选项我不确定它在 CentOS 中如何工作,但主要意味着 root 用户可以在不使用凭据的情况下连接到 mysql。通常它依赖于 /root/-.my.cnf 文件,但在 CentOS 中可能有所不同。
\n 归档时间: |
|
查看次数: |
15550 次 |
最近记录: |