通过Ansible(Debian)安装MySQL

通过Ansible(Debian)安装MySQL,mysql,ansible,debian,Mysql,Ansible,Debian,我正试图使用Ansible将MySQL安装到Debian服务器上,但我遇到了问题,尽管我已经阅读了一些相关指南,并在这里查看了一些问题。此外,我编写了一个测试用例,当然效果很好,我无法理解有效的区别 我想要的版本是一个单独的mysql.yml任务,它包含在一个更大的角色中。我不喜欢使用.my.cnf文件,我不清楚这是否是严格必要的(我在正常安装中不使用它,我以其他方式输入密码),但在任何情况下,它都无法以另一种方式工作。此任务的初始部分如下所示(预先运行的内容显然不相关——安装SSH密钥、获取一

我正试图使用Ansible将MySQL安装到Debian服务器上,但我遇到了问题,尽管我已经阅读了一些相关指南,并在这里查看了一些问题。此外,我编写了一个测试用例,当然效果很好,我无法理解有效的区别

我想要的版本是一个单独的mysql.yml任务,它包含在一个更大的角色中。我不喜欢使用.my.cnf文件,我不清楚这是否是严格必要的(我在正常安装中不使用它,我以其他方式输入密码),但在任何情况下,它都无法以另一种方式工作。此任务的初始部分如下所示(预先运行的内容显然不相关——安装SSH密钥、获取一些文件等):

这将产生以下输出:

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,而实际上我无法使用它

另一方面,我编写了一个独立的测试playbook,代码几乎相同,但只是安装了MySQL软件包(而不是其他几个),当我运行它时,我能够使用playbook中设置的密码以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
(该版本可以完全按照编写的方式运行。)


正确的方法是什么?为什么我的原始版本在某种程度上失败了,而测试用例版本却没有?在所有情况下,我都安装到一个VM上,在运行Ansible之前,我会将其重置为其初始安装快照,因此在上一次运行中不会留下任何东西。

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


关于,

“当我尝试以root用户身份手动登录MySQL服务器时,它不允许我”-“我可以以root用户身份登录服务器”ー 表现出来,而不是描述。如果从
root
帐户执行,一切都正常。使用详细输出运行时,是否可以显示输出?安装后是否需要启动MySQL服务?(我不使用Debian)您可以使用不需要引用的简单密码(例如:1234_Ab-Cd)进行测试,或者将其硬编码到剧本中进行测试,然后在以后的版本中移动到变量。
- 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