【问题标题】:Insert data into mysql tables using ansible使用ansible将数据插入mysql表
【发布时间】:2015-01-28 09:19:52
【问题描述】:

应该有一些体面的方法来使用 ansible 来处理 mysql 数据库,比如将数据插入表或在 mysql db 上运行的任何命令。

我知道有一些模块可以创建数据库、管理复制、用户和变量:

  • mysql_db - 从远程主机添加或删除 MySQL 数据库。
  • mysql_replication (E) - 管理 MySQL 复制
  • mysql_user - 在 MySQL 数据库中添加或删除用户。
  • mysql_variables - 管理 MySQL 全局变量

我的用例场景是,我在 ubuntu 上安装了 mysql-server 并成功创建了数据库,现在我必须将数据插入表中,并想知道是否有办法通过 ansible 实现它。

【问题讨论】:

    标签: mysql ubuntu ansible


    【解决方案1】:

    解决方案 1:

    我认为您错过了 mysql_db 模块的导入功能。您可以使用import 作为状态参数来加载模式和数据,并为其提供一个文件以在@​​987654326@ 中加载

    来自 Ansible 文档的示例:

    # Copy database dump file to remote host and restore it to database 'my_db'
    - copy: src=dump.sql.bz2 dest=/tmp
    - mysql_db: name=my_db state=import target=/tmp/dump.sql.bz2
    

    解决方案 2:

    如果 mysql_db 没有为您提供所需的所有选项和灵活性,您可以将mysql 程序与shell 结合使用。

    - name: Import DB 
      shell: mysql db_name < dump.sql
    

    以上将dump.sql 文件加载到数据库db_name 中。更多选项见mysql程序手册:man mysql

    解决方案 3:

    mysqlimport 带有command 模块的实用程序:

    - name: Import DB 
      command: mysqlimport [options] db_name textfile1 [textfile2 ...]
    

    见:mysqlimport docs

    【讨论】:

    • 谢谢两位!感谢您的回复! mysql_db 中的导入参数效果很好。我还必须在我们的部署中更新现有的 .sql,所以现在就着手处理。再次感谢:)
    • 以下线程中有一些方便的提示可帮助您避免每次运行 playbook 时都导入相同的数据库:groups.google.com/forum/#!msg/ansible-project/XrQ08TdtcRk/…
    【解决方案2】:

    您可以使用mysql_db 模块。其state: 参数的值为presentabsentdumpimport。如果它设置为import,那么您可以使用target: 参数来指示要读取的转储文件在远程主机上的位置。支持未压缩的 SQL 文件 (.sql) 以及 bzip2 (.bz2) 和 gzip (.gz) 压缩文件。

    # Copy database dump file to remote host and restore it to database 'my_db'
    - copy: src=dump.sql.bz2 dest=/tmp
    - mysql_db: name=my_db state=import target=/tmp/dump.sql.bz2
    

    【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2017-05-14
    • 2019-07-13
    相关资源
    最近更新 更多