通过ansible(debian)安装mysql

w8f9ii69  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(357)

我正在尝试使用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,而实际上我无法使用它。
另一方面,我编写了一个独立的测试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

(该版本可以完全按照所写的运行。)
正确的方法是什么?为什么我的原始版本失败了,而测试用例版本没有?在所有情况下,我安装到一个虚拟机上,在运行ansible之前,我将其重置为初始安装快照,因此没有任何东西会从上一次运行中遗留下来。

wnavrhmk

wnavrhmk1#

如果使用带有stretch的debian软件包,请考虑通过os用户进行身份验证:
https://wiki.debian.org/mysql
当做,

相关问题