使用Ansible创建MySQL环境(附加奖励)
我想要做的事情 (Wǒ zuò de
使用Ansible来自动化以下操作:
– 安装MySQL
– 创建数据库用户
– 创建数据库
– 从另一个数据库中提取并恢复数据
执行环境
-
- OS: OS X Yosemite (10.11.6)
-
- Vagrant: 1.8.5
-
- Virtualbox: 5.1.6 r110634
- Ansible: 2.1.2.0
1. 准备各种工具(如果已经安装则不需要)
这里有写着。 .)
第一步:安装Homebrew。
步骤2:安装Homebrew Cask
步骤3. 安装VirtualBox。
第四步:安装Vagrant
第五步。安装Vagrant-vbguest插件。
第六步:安装Ansible
2. 创建 Vagrantfile
这些信息在这附近或这里写着。
至此为止的感觉差不多
Vagrant.configure("2") do |config|
config.vm.box = "puppetlabs/centos-6.6-64-nocm"
config.vm.box_url = "https://atlas.hashicorp.com/puppetlabs/boxes/centos-6.6-64-nocm/versions/1.0.3/providers/virtualbox.box"
config.ssh.insert_key = false
config.hostmanager.enabled = true
config.hostmanager.manage_host = true
# create db server
config.vm.define :"db" do |host|
host.vm.hostname = "db"
host.vm.network :private_network, ip: "192.168.34.21", netmask: "255.255.255.0"
host.vm.network :private_network, ip: "192.168.33.21", virtualbox__intnet: "mv"
# ansible
host.vm.provision "ansible" do |ansible|
ansible.playbook = "provisioning/dbservers.yml"
ansible.inventory_path = "provisioning/hosts"
ansible.limit = 'all'
end
end
end
创建Ansible任务
步骤1. 参考最佳实践,创建目录和文件
roles/
hosts
dbservers.yml
common/
tasks/
main.yml
database/
handlers/
main.yml
tasks/
main.yml
mysql.yml
restore.yml
vars/
main.yml
编写Ansible的Playbook
步骤1. 主办方
[dbservers]
127.0.0.1 ansible_ssh_private_key_file=.vagrant/machines/db/virtualbox/private_key ansible_ssh_user=vagrant
步骤2:dbservers.yml
---
- hosts: dbservers
become: true
roles:
- common
- database
步骤3. 常见/任务/main.yml
---
- name: change timezone
command: cp -p /usr/share/zoneinfo/Japan /etc/localtime
- name: remove all rules from iptables
command: /sbin/iptables -F
- name: iptables stop
service: name=iptables state=stopped
- name: iptables off
command: /sbin/chkconfig iptables off
步骤4. 数据库/处理程序/main.yml
---
- name: enable mysql launch settings
command: /sbin/chkconfig mysqld on
步骤5. 数据库/任务/main.yml
---
- include: mysql.yml
- include: restore.yml
第6步:数据库/任务/mysql.yml
---
- name: MySQL5.1(デフォルト)削除
yum: name=mysql* state=absent
- name: install repository
yum: name=http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm state=present
- name: MySQL5.6インストール
yum: name={{ item }} state=present
with_items:
- mysql
- mysql-devel
- mysql-server
- mysql-utilities
- MySQL-python
notify:
- enable mysql launch settings
- name: start MySQL
service: name=mysqld state=started enabled=yes
- name: データベース作成
mysql_db: db={{ item }} state=present encoding=utf8
with_items: "{{ dbnames }}"
- name: データベースのユーザ作成(権限も付与する)
mysql_user: >
name={{ dbuser }}
password="{{ dbpass }}"
host={{ item[0] }}
priv={{ item[1] }}.*:ALL
append_privs=yes
state=present
with_nested:
- "{{ hosts }}"
- "{{ dbnames }}"
第七步:数据库/任务/恢复.yml
---
- name: ダンプファイル作成(データは別のDBから取ってくる)
mysql_db: >
login_host={{ remotehost }}
login_user={{ dbuser }}
login_password={{ dbpass }}
name={{ item }}
target=/tmp/{{ item }}.dump
state=dump
with_items: "{{ dbnames }}"
- name: リストア
mysql_db: name={{ item }} target=/tmp/{{ item }}.dump state=import
with_items: "{{ dbnames }}"
- name: ダンプファイル削除
file: path=/tmp/{{ item }}.dump state=absent
with_items: "{{ dbnames }}"
步骤7. 数据库/变量/主要.yml
---
dbuser: <DBユーザ名>
dbpass: <DBユーザのパスワード>
remotehost: <データ取得元のIP>
hosts:
- "localhost"
- "192.168.33.20"
dbnames:
- <restoreするDB名>
- <restoreするDB名>
5. 检查动作是否正确
第一步:创建虚拟机
$ vagrant up
第二步:验证动作
只要能连接到数据库就可以。(Zhi yao neng lian jie dao shu ju ku jiu ke yi.)
6. 附赠1:同时使用no-data(-d)
由于mysql_db模块无法指定dump选项,因此需要使用shell来执行。请注意,使用命令时无法使用”>”符号。
- name: create no-data dump files
shell: mysqldump -h {{ remotehost }} -u {{ dbuser }} -p{{ dbpass }} {{ item }} -d > /tmp/{{ item }}.dump
with_items: "{{ nodatadbs }}"
在执行”リストア”(Restore)等操作时,可以使用”Jinja2 filters”中的”union”函数来编写良好的代码。
- name: restore databases
mysql_db: name={{ item }} target=/tmp/{{ item }}.dump state=import
with_items: "{{ dbnames | union(nodatadbs) }}"
7. 包括 View 的数据库支持
如果目标数据库中包含视图,根据定义者的设置可能无法访问,因此在还原之前需要进行替换(仅当替换没有问题时)。
- name: edit dump files
replace: dest=/tmp/{{ item }}.dump regexp='<置換前>`@`%' replace={{ dbuser }}`@`localhost
with_items: "{{ dbnames }}"
8. 附赠品3:兼容Windows
由于Windows无法安装Ansible,因此需要在虚拟机上运行。
步骤1. 添加$script
$script = <<SCRIPT
if ! [ `which ansible` ]; then
yum update -y
yum install -y http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/epel.repo
yum install --enablerepo=epel -y ansible
fi
ansible-playbook -i /vagrant/provisioning/hosts /vagrant/provisioning/dbservers.yml
SCRIPT
步骤2. 编辑 provision
编辑之前
host.vm.provision "ansible" do |ansible|
ansible.playbook = "provisioning/dbservers.yml"
ansible.inventory_path = "provisioning/hosts"
ansible.limit = 'all'
end
编辑后
config.vm.provision "shell", inline: $script
mysql_db模块真方便呀。