在 ubuntu 远程机器上使用 ansible 设置 mysql

在 ubuntu 远程机器上使用 ansible 设置 mysql

我已经编写了一个 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:

您可以为其创建应用程序数据库和应用程序用户。

相关内容