【问题标题】:ansible mysql configuration in one file for ubuntu 14.04ubuntu 14.04 的一个文件中的 ansible mysql 配置
【发布时间】:2015-02-04 16:47:15
【问题描述】:

我正在尝试为 mysql 安装编写一个单页 ansible 脚本,并设置一个新用户并创建一个空数据库。到目前为止我尝试过的 -

hosts文件

[mysql]
webapp ansible_ssh_host=xxx.xxx.xxx.xxx

mysql.yml(所有任务/vars/handelers 的单个文件)(hosts 和 mysql.yml 在同一目录中),我可以使用 ssh 登录远程系统

---
- hosts: mysql
  vars:
    - system_packages:
          - build-essential
          - python-dev
          - python-pip
          - libmysqlclient-dev
          - mysql-server
          - python-mysqldb

    - root_password: root

  tasks:
    - name: Install MySQL
      apt: pkg={{ item }} state=installed update-cache=yes
      with_items: system_packages
      tags:
        - setup

    - name: Start MySQL service
      action: service name=mysql state=started enabled=yes 

    - name: Update mysql password for root account
      mysql_user: name=root host={{ item }} password={{root_password}}
      with_items:
            - 127.0.0.1   #In case of distributed system how should I place Ip addr of this system
            - localhost

    - name: create db 'mydb'
      action: mysql_db db=mydb state=present       

    - name: Creates database user 'eric' with password 'eric' for 'mydb' and grant all priveleges
      action: mysql_user state=present name=eric password=eric priv=mydb.*:ALL

  handlers:
    - name: start mysql
      service: name=mysql state=started

当我运行这个脚本时,我得到这个输出(+错误)

failed: [webapp] => (item=127.0.0.1) => {"failed": true, "item": "127.0.0.1"}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials

【问题讨论】:

  • 这看起来像是一个没有目标信息的代码转储。读者可能无法确定“您要达到什么目标?”请相应地编辑问题。

标签: mysql mysql-python ansible ansible-playbook


【解决方案1】:

请将此任务添加到您的 task/main.yml 中

- name: Copy the root credentials as .my.cnf file
   template: src=root.cnf.j2 dest=~/.my.cnf mode=0600

这将是你的 root.cnf.j2

[client]
user=root
password={{ root_password }}

它将做的是,从没有密码的root用户连接mysql并执行这些任务。您可以在运行所有任务后将其删除,也可以将其保留,因为它在 root 下并且具有严格的权限。

【讨论】:

    【解决方案2】:

    在 ubuntu 上默认安装后,您只能以 root 身份使用密码“root”登录到您的 mysql。因此,要更改您的密码,您必须将您的 mysql 登录用户设置为 root(就像您在下一个任务中所做的那样)

    - name: Update mysql password for root account
      mysql_user: 
        name=root host={{ item }} 
        password={{root_password}} 
        login_user=root 
        login_password="root"
      sudo: yes
      sudo_user: root
    

    ansible galaxy也有现成的解决方案

    【讨论】:

    • 已编辑,正如我提到的 login_password 是空的 -> login_password=""
    • 好吧,除了以下几点,一切看起来都很好:1.你的行太长:你可能会将下一行中的每个参数都设置为缩进(见我的帖子)2.为了可重用性,我会设置 mysql作为一个角色 (docs.ansible.com/playbooks_roles.html) 3. Ansible 剧本应该是幂等的,你的剧本在第二次执行时会失败(因为 root 密码已更改)。我会在mysql password for root account 任务上设置一个条件(例如when: initial_install),并将它设置为host_variable 用于您使用此剧本的机器。
    【解决方案3】:

    在设置 root 密码之前,您无法连接到 mysql 服务器。为此,请使用以下命令:

    - name: Set password for root user
      shell:
        mysqladmin password "{{ root_password }}" -u root
    

    【讨论】:

    • 我宁愿选择真正的 ansible 模块也不愿掏空(见下面的答案)。 mysql_user 模块用于更改密码;)因此看起来更干净
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多