通过Ansible(Debian)安装MySQL

时间:2018-07-02 21:20:36

标签: mysql ansible debian

我正在尝试使用Ansible将MySQL安装到Debian服务器上,但是尽管阅读了一些指南,但在这里遇到了一些问题,但还是遇到了麻烦。此外,我写了一个测试用例,当然可以正常工作,我无法理解有效的区别。

我的预期版本是一个单独的mysql.yml任务,该任务包含在更大的角色中。我不希望使用.my.cnf文件,也不清楚是否绝对必要(我在正常安装中不使用此文件,而是以其他方式输入密码),但是无论如何,它无法以一种不同的方式工作。此任务的初始部分看起来像这样(事先运行的东西显然不相关-安装SSH密钥,获取一些文件等):

- name: include variable file for MySQL
  include_vars:
      file: mysql.yml

- name: Set MySQL root password before installing
  debconf: name='mysql-server' question='mysql-server/root_password' value='{{MySQL_root_pass | quote}}' vtype='password'
  become: yes

- name: Confirm MySQL root password before installing
  debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{MySQL_root_pass | quote}}' vtype='password'
  become: yes

- name: Install MySQL packages.
  apt: name="{{item}}" state=present
  become: yes
  with_items:
     - default-mysql-server
     - default-mysql-client
     - python3-mysqldb
     - python-mysqldb
     - libdbd-mysql-perl

- name: Create a user for the 'library' db
  mysql_user:
    login_user: root
    login_password: '{{ MySQL_root_pass | quote }}'
    name: '{{ library_login_user }}'
    password: '{{ library_login_pw }}'
    priv: 'library.*:ALL,GRANT'
    state: present

这将产生以下输出:

TASK [common : include variable file for MySQL] ********************************
ok: [localhost]

TASK [common : Set MySQL root password before installing] **********************
changed: [localhost]

TASK [common : Confirm MySQL root password before installing] ******************
changed: [localhost]

TASK [common : Install MySQL packages.] ****************************************
ok: [localhost] => (item=[u'default-mysql-server', u'default-mysql-client', u'python3-mysqldb', u'python-mysqldb', u'libdbd-mysql-perl'])

TASK [common : Create a user for the 'library' db] *****************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "unable to connect to database, check login_user and login_password are correct or /home/testuser/.my.cnf has the credentials. Exception message: (1698, \"Access denied for user 'root'@'localhost'\")"}

我不明白的是,当我尝试以root身份手动登录到MySQL服务器时,它不会让我看到“我拒绝用户'root'@'localhost'的访问”错误,使用变量文件中的密码还是空白密码。因此,我坚持使用我无法实际使用的MySQL安装。

另一方面,我编写了一个隔离的测试手册,其中包含几乎相同的代码,但只安装了MySQL软件包(而不是其他几个),当我运行它时,我 am 使用剧本中设置的密码以root用户身份登录到服务器:

- name: install MySQL (only)
  hosts: localhost
  connection: local
  vars:
    MySQL_root_pass: foobar
  tasks:

    - name: Set MySQL root password before installing
      debconf: name='mysql-server' question='mysql-server/root_password' value='{{MySQL_root_pass | quote}}' vtype='password'
      become: yes

    - name: Confirm MySQL root password before installing
      debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{MySQL_root_pass | quote}}' vtype='password'
      become: yes

    - name: Install MySQL packages.
      apt: name="{{item}}" state=present
      become: yes
      with_items:
         - default-mysql-server
         - default-mysql-client

(该版本可以完全按照书面要求运行。)

正确的方法是什么?为什么我的原始版本以测试用例版本没有的方式失败?在所有情况下,我都会在运行Ansible之前将其安装到已重置为其初始安装快照的VM上,因此上次运行没有任何遗留。

1 个答案:

答案 0 :(得分:0)

如果将Debian软件包与Stretch一起使用,请考虑到身份验证是通过OS用户进行的:

https://wiki.debian.org/MySql

致谢

相关问题