微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – 如何使用Ansible创建一个大型数据库

假设您有一个sql-file database.sql,它创建@R_404_6274@模式,其中的表和一些初始填充.通常,我可以使用ansible通过以下方式创建此@R_404_6274@:

---

- name: copy database.sql to server
  template: src=database.sql dest=/tmp/database.sql owner=root group=root

- name: sql the thing into MysqL
  command: MysqL "-u root -p{{ MysqL_root_password }} < /tmp/database.sql"

- name: remove the sql file from the server
  command: rm -f /tmp/database.sql

而这正是它所说的.但是当database.sql很大(可能是2 TByte)时,你真的不想先复制复制操作.有没有办法将database.sql作为一个文件引用到ansible-master服务器上(我们从中推送它),这样你就可以做一个MysqL -u root @ master -p …< “本地文件”,以便不再需要复制操作?

解决方法:

无论您做什么,数据都必须从它到达@R_404_6274@服务器的位置流动.请注意,在您的示例中,您应该使用copy而不是template:Jinja正在解析模板,解析大文件的成本非常高.

话虽这么说,您可能想使用local_action并远程提供您的my​​sql服务器:

- name: Feed database.sql to server
  local_action: shell MysqL -u root -p{{ MysqL_root_password }} -h {{ ansible_default_ipv4 }} < /tmp/database.sql

这将在本地运行命令,并应在以下情况下运行:

>您的@R_404_6274@转储位于localmachine上的/tmp/database.sql
> /tmp/database.sql包含@R_404_6274@创建语句
>您可以远程连接到您的MysqL服务器(提示:检查权限bind_address)

为了使事情更清洁,您可以使用MysqL_db模块:

- name: Feed database.sql to server
  local_action: MysqL_db login_user=root login_password={{ MysqL_root_password }} login_host={{ ansible_default_ipv4 }} name={{ db_name }} state=import target=/tmp/database.sql

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐