应该有一些体面的方式来使用mysql数据库使用ansible,比如将数据插入表或任何命令以在mysql db上运行。
我知道有创建数据库,管理复制,用户和变量的模块:
mysql_db
- 从远程主机添加或删除MySQL数据库。mysql_replication
(E) - 管理MySQL复制mysql_user
- 在MySQL数据库中添加或删除用户。mysql_variables
- 管理MySQL全局变量我的用例场景是,我已经在ubuntu上安装了mysql-server
并成功创建了数据库,现在我必须将数据插入到表中,并想知道是否有办法通过ansible实现它。
答案 0 :(得分:23)
解决方案1:
我认为您错过了mysql_db
模块的导入功能。您可以使用import
作为参数来加载架构和数据,并在target
来自Ansible docs的示例:
# 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
答案 1 :(得分:5)
您可以使用mysql_db模块。其state:
参数的值为present
,absent
,dump
, import
。如果将其设置为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