使用SaltStack创建Mysql数据库

3

我正在使用SaltStack(与vagrant)/ Ubuntu 12.04

我的目标是安装Mysql,创建数据库和用户,并授予所有权限。

这个SLS文件有什么问题?

mysql_setup:
  debconf.set:
    - name: mysql-server
    - data:
        'mysql-server/root_password': {'type': 'string', 'value': '{{ pillar['database']['password'] }}'}
        'mysql-server/root_password_again': {'type': 'string', 'value': '{{ pillar['database']['password'] }}'}

mysql-server:
  pkg:
    - installed
    - require:
      - debconf: mysql_setup

mysql-base:
  mysql_database.present:
    - name: owncloud
  mysql_user.present:
    - name: owncloud
    - password: pass
  mysql_grants.present:
    - database: owncloud.*
    - grant: ALL PRIVILEGES
    - user: owncloud

我有过这个错误:
[INFO    ] All specified answers are already set
[INFO    ] Completed state [mysql-server] at time 14:48:13.611204
[INFO    ] Running state [mysql-server] at time 14:48:13.644547
[INFO    ] Executing state pkg.installed for mysql-server
[INFO    ] Package mysql-server is already installed.
[INFO    ] Completed state [mysql-server] at time 14:48:13.695092
[DEBUG   ] LazyLoaded mysql_database.mod_init
[INFO    ] Running state [owncloud] at time 14:48:13.702359
[DEBUG   ] LazyLoaded mysql_database.present
[ERROR   ] State 'mysql_database.present' was not found in SLS 'mysql'

[DEBUG   ] LazyLoaded mysql_user.mod_init
[INFO    ] Running state [owncloud] at time 14:48:13.710744
[DEBUG   ] LazyLoaded mysql_user.present
[ERROR   ] State 'mysql_user.present' was not found in SLS 'mysql'

[DEBUG   ] LazyLoaded mysql_grants.mod_init
[INFO    ] Running state [mysql-base] at time 14:48:13.733003
[DEBUG   ] LazyLoaded mysql_grants.present
[ERROR   ] State 'mysql_grants.present' was not found in SLS 'mysql'
3个回答

6

除了@Utah_Dave所建议的之外,您可能还需要安装python-mysqldb APT软件包以及mysql pip软件包,并且您需要连接信息,在您的minion配置文件中提供或者在状态中提供,可能像这样:

foo_db:
  mysql_database.present:
    - name: {{ pillar['SQL_DATABASE'] }}
    - connection_host: {{ pillar['SQL_HOST'] }}
    - connection_user: {{ pillar['SQL_ROOT_USER'] }}
    - connection_pass: {{ pillar['SQL_ROOT_PASSWORD'] }}
    - require:
      - pip: mysql

未来状态可以像这样使用use:重新使用连接信息:
sql_app_user:
  mysql_user.present:
    - name: {{ pillar['SQL_APP_USER'] }}
    - password: {{ pillar['SQL_APP_PASSWORD'] }}
    - host: '%'
    - use:
      - mysql_database: foo_db

这些内容记录在salt.modules.mysql中。要安装其他依赖项:

server_pkgs:
  pkg:
    - installed
    - pkgs:
      - python-dev
    - refresh: True

mysql_python_pkgs:
  pkg.installed:
    - pkgs:
      - libmysqlclient-dev
      - mysql-client
      - python-mysqldb
    - require:
      - pkg: server_pkgs

python-pip:
  pkg:
    - installed
    - refresh: False

mysql:
  pip.installed:
    - require:
      - pkg: python-pip
      - pkg: mysql_python_pkgs

这是我个人在一个特定项目中的状态的简化版本,可能不是你所需的最小要素,但它绝对有效。


Comment: The following requisites were not found: require:pip: mysql - 4m1nh4j1
那留给读者作为“练习” :)出于明确表述的考虑,我会更新我的回答。 - Nathan Hoover

3

我知道这是一个旧问题,但当我在谷歌搜索错误时,它一直弹出:

无法LazyLoad mysql.version:'mysql' 虚拟返回False:无法加载mysql执行模块:MySQLdb和PyMySQL都不可用。

我使用的是Ubuntu 18.04,对我有用的解决方法是安装以下软件包

python3-mysqldb

显然,我同时安装了Python 2.7和3,而salt正在使用3,并且python-mysqldb软件包仅适用于2.7。

希望这能帮助其他遇到同样错误的人。


0

第二次运行状态时,或者在重新启动salt-minion守护程序后,这个工作吗?如果是这样,那么这是因为mysql_*状态不知道mysql服务器已经被安装了。

您可以在这里看到,mysql_grants状态要求在Salt中已经加载mysql.grant_exists函数。 https://github.com/saltstack/salt/blob/1fb606ef6beffecc3e34f18b9ce189db4fe4292f/salt/states/mysql_grants.py#L52

尝试像这样将- reload_modules: true添加到您的mysql-server状态中:

mysql-server:
  pkg:
    - installed
    - require:
      - debconf: mysql_setup
    - reload_modules: True

谢谢。我正在尝试做这件事,遇到了同样的问题。我会随时向你更新。 - 4m1nh4j1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接