我正在尝试使用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之前,我将其重置为初始安装快照,因此没有任何东西会从上一次运行中遗留下来。
1条答案
按热度按时间wnavrhmk1#
如果使用带有stretch的debian软件包,请考虑通过os用户进行身份验证:
https://wiki.debian.org/mysql
当做,