我已经编写了一个 ansible playbook,用于在 ubuntu 远程机器上安装 MySQL 服务器,但是不起作用,这里是 yaml 代码
---
- name: setting mysql in ubuntu
hosts: web01
become: yes
tasks:
- name: install mysql
apt:
name: mysql-server
state: present
- name: install python
apt:
name: python3-pymysql
state: present
- name: start & enable server
service:
name: mysql
state: started
enabled: yes
- name: user setup in mysql
mysql_user:
check_implicit_admin: true
login_user: root
login_password: password
user: root
password: password
host: web01
priv: '*.*.:ALL,GRANT'
- name: create db
mysql_db:
name: db
state: present
每次在用户设置中都会显示:
致命:[web01]:失败!=> {“changed”:false,“msg”:“无法连接到数据库,请检查 login_user 和 login_******** 是否正确或 /root/.my.cnf 是否具有凭据。异常消息:(1698,“拒绝用户‘root’@‘localhost’访问”)”}
web01 是 aws 中的 ec2 服务器名称,我还正确配置了清单文件,并使用临时命令 -m ping 进行了检查
并且我还在目标机器的路径 /root/.my.cnf 中创建了 .my.cnf,并按如下方式输入:
[client]
user=root
password=password
答案1
在user setup
任务中,您尝试使用要设置的用户凭据连接到 MySQL,但此时该凭据不存在。
在 Ubuntu 上,MySQL 默认配置为通过 unix 套接字接受来自 root 的连接,无需密码。
如果您将任务更改为此,则可以设置 root 用户:
- name: user setup in mysql
mysql_user:
user: root
password: password
host: web01
priv: '*.*:ALL,GRANT'
login_unix_socket: /var/run/mysqld/mysqld.sock
(请注意,您的priv
参数中也有一个拼写错误,我已更正)
但从技术上讲,您根本不需要设置这个 root 用户,因为您只需要提供参数login_unix_socket
。您可以通过 进行设置module_defaults
,因此您不需要在每个任务上都指定它:
- name: setting mysql in ubuntu
hosts: web01
become: yes
module_defaults:
mysql:
login_unix_socket: /var/run/mysqld/mysqld.sock
tasks:
您可以为其创建应用程序数据库和应用程序用户。