Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2018/01/27 (Sat)

CentOS7.4にMySQL5.6をAnsibleでインストール

|  CentOS7.4にMySQL5.6をAnsibleでインストール - ひとり開発日記。 を含むブックマーク はてなブックマーク -  CentOS7.4にMySQL5.6をAnsibleでインストール - ひとり開発日記。

はいな、これ*12018年版です。

当然、あれから年月を経て、色々便利になっているのですよね。

  • CentOSは7がメインになった
  • Vagrantでup/reload時にプロビジョニング出来るようになった
  • MySQLは、5.6はほとんど枯れた存在になった*2

またひとり開発をやりたいな、って思った時、手持ちのWindows7機で、Vagrant/Virtualbox/CentOS7/MySQL5.6を使って、ローカル開発環境を作ろうかと思ったら、思いの外大変だったので、以下に記します。


環境

C:\workspace\vagrant>dir /b
my.cnf.j2
playbook.yml
Vagrantfile
  • Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define "server_db" do |node|
    node.vm.box = "centos/7"
    node.vm.network "private_network", ip:"192.168.33.12"
    node.vm.synced_folder ".", "/vagrant"
  end

  config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "playbook.yml"
  end

  config.vm.provider "virtualbox" do |v|
    v.gui = true
  end

end
  • playbook.yml
- hosts: all
  remote_user: vagrant
  become: yes
  vars:
    mysql_root_password: rootpassword1
    mysql_user_password: dbpassword1
    mysql_user_name: dbuser
    mysql_db: sampledb

  tasks:
    - name: yum update all
      yum: name=* state=latest

    - name: install MySQL-python/libselinux-python/yum-utils
      yum: name="{{ item }}" state=present
      with_items:
        - MySQL-python
        - libselinux-python
        - yum-utils

    - name: add MySQL Yum Repository
      yum:
        name: https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
        state: present
   
    - name: disable mysql57-community
      command: yum-config-manager --disable mysql57-community

    - name: enable mysql56-community
      command: yum-config-manager --enable mysql56-community
 
    - name: install MySQL
      yum: name="{{ item }}" state=present
      with_items:
        - mysql-community-server
        - mysql-community-client
        - mysql-community-common
        - mysql-community-libs

    - name: /root/.my.cnf by template
      template: src=my.cnf.j2 dest=/root/.my.cnf owner=root group=root mode=0600

    - name: start MySQL service
      service: name=mysqld enabled=yes state=started

    - name: root password changed
      mysql_user: name=root password={{ mysql_root_password }} host_all=yes check_implicit_admin=yes

    - name: dbuser created
      mysql_user: name={{ mysql_user_name }} password={{ mysql_user_password }} host={{ item }} priv=*.*:ALL,GRANT state=present
      with_items:
        - localhost
        - '%'

    - name: create mysql database
      mysql_db: name={{ mysql_db }} state=present
  • my.conf.j2
[client]
user=root
password={{ mysql_root_password }}

以下、ハマりどころ

*1g:program:id:halflite:20151014:provisioning_mysql_server

*2:それ故に知見が貯まって、ハマりにくく、調べればすぐ解が見つかる

トラックバック - http://program.g.hatena.ne.jp/halflite/20180127

2015/10/14 (Wed)

Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール

| Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール - ひとり開発日記。 を含むブックマーク はてなブックマーク - Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール - ひとり開発日記。

VirtualBoxCentOSインスタンスを作って、Vagrantで起動し、それにMySQLインストールして、ローカル試験環境として使ってるのですが、誤って vagrant destroy してしまうこともありますよね…?*1

折角の仮想環境なので、すぐに作ったり壊したり出来たほうがいいよなぁ、と言うことで、手順をここに書いておきます。

方針
  1. ホストOSWindows7、ゲストOSはCentOS6.7
  2. VagrantVirtualBox を起動
  3. 仮想環境にSSHログイン
  4. Ansibleをインストール
  5. Ansible Playbookをコピー
  6. hosts設定
  7. AnsibleでMySQLインストール

お仕事でMacじゃなくてWindowsマシンの人、多いでしょう? で、WindowsにAnsible入れるのってのも無謀な気がしましたし。 試験環境として、MySQLだけ動けば良いわけですので、ベストプラクティス*2は無視して、一枚ペラのPlaybookをローカル実行、と言う方針で。

環境
VagrantVirtualBox を起動
  • Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define :server_db do |node|
    node.vm.box = "box-cutter/centos67"
    node.vm.box_version = "2.0.5"
    node.vm.network :private_network, ip:"192.168.33.15"
  end

  config.vm.provider "virtualbox" do |v|
    v.gui = true
  end

end

Vagrantfileはこんな感じで。 boxは、Atlas上にあるミニマムCentOS環境 box-cutter/centos67 v2.0.5 を使い、固定IPは 192.168.33.15 で。

vagrant up

で起動します。

仮想環境にSSHログイン

仮想環境へSSHログインします*3 ユーザー:vagrant / パスワード:vagrantログインできます。

Ansibleをインストール
sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo yum -y install ansible

ミニマム過ぎて、EPELリポジトリも入ってないので、まずEPELリポジトリインストール。 その後でAnsibleをインストールします

[vagrant@localhost ~]$ ansible --version
ansible 1.9.4
  configured module search path = None

この時点でのAnsibleのバージョンは 1.9.4

Ansible Playbookをコピー
  • playbook.yml
- hosts: all
  remote_user: vagrant
  sudo: yes

  tasks:
    - name: yum update all
      yum: name=* state=latest

    - name: install MySQL Yum Repository
      yum: name=https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm state=present

    - name: install MySQL/MySQL-python/libselinux-python
      yum: name={{ item.name }} enablerepo={{ item.repo }} state=present
      with_items:
        - { name: "mysql-community-libs-compat", repo: "mysql56-community" }
        - { name: "mysql-community-client", repo: "mysql56-community" }
        - { name: "mysql-community-server", repo: "mysql56-community" }
        - { name: "MySQL-python", repo: "epel" }
        - { name: "libselinux-python", repo: "epel" }

    - name: add my.cnf character-set-server
      replace: dest=/etc/my.cnf regexp="^\[mysqld\]$" replace="[mysqld]\ncharacter-set-server=utf8"

    - name: start MySQL service
      service: name=mysqld enabled=yes state=started

    - name: add MySQL work user
      mysql_user: name=dbuser password=dbpassword1 host={{ item }} priv=*.*:ALL,GRANT state=present
      with_items:
        - "localhost"
        - "%"

vi等でコピー。*4

hosts設定
echo "127.0.0.1" | sudo tee /etc/ansible/hosts > /dev/null

/etc/ansible/hostsにローカルIPだけ設定*5

AnsibleでMySQLインストール
sudo ansible-playbook playbook.yml -c local

playbookが反映され、MySQLが起動されている(はずです)

*1:本日のワタクシがそうでした…

*2:Best Practices — Ansible Documentation http://docs.ansible.com/ansible/playbooks_best_practices.html

*3クライアントTeraTerm 等で https://osdn.jp/projects/ttssh2/

*4:本当はGitHubとかにコミットしておいて、git cloneで持ってくるのが良いのかもですけど

*5sudoリダイレクトが Permission denied になる件 | CUBE SUGAR STORAGE http://bit.ly/1VSAkPS

2014/11/23 (Sun)

CenOS6.5にMySQL5.6 communityをyumでインストール

| CenOS6.5にMySQL5.6 communityをyumでインストール - ひとり開発日記。 を含むブックマーク はてなブックマーク - CenOS6.5にMySQL5.6 communityをyumでインストール - ひとり開発日記。

手順
  1. 公式MySQL Yum Repositoryをyumインストール
  2. リポジトリmysql56-communityを指定して、MySQLインストール
  3. MySQL Serverを起動
  4. mysql_secure_installation で rootパスワード設定
[root@localhost ~]# whoami
root
[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@localhost ~]# arch
x86_64
[root@localhost ~]# yum -y install https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
[root@localhost ~]# yum -y install mysql-community-libs-compat --enablerepo=mysql56-community
[root@localhost ~]# yum -y install mysql-community-client --enablerepo=mysql56-community
[root@localhost ~]# yum -y install mysql-community-server --enablerepo=mysql56-community
[root@localhost ~]# service mysqld start
[root@localhost ~]# mysql_secure_installation
参考
トラックバック - http://program.g.hatena.ne.jp/halflite/20141123

2014/10/13 (Mon)

MySQLで設定されている文字コードを調べる

| MySQLで設定されている文字コードを調べる - ひとり開発日記。 を含むブックマーク はてなブックマーク - MySQLで設定されている文字コードを調べる - ひとり開発日記。

新しく設定したサーバーMySQLにダンプ流して、Java側から、MySQLアクセスすると、文字列が"???"になってしまう…。*1

mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

なんで、character_set_serverだけlatin1に設定されてるの…。

まぁ、my.cnfに"character-set-server=utf8"を書き足して、再起動すればオッケーなんですけどね。

*1サーバーOSCentOS 6.5、MySQL 5.6

トラックバック - http://program.g.hatena.ne.jp/halflite/20141013

2014/05/23 (Fri)

CentOS 6.5にMySQL5.7をyumでインストールする

| CentOS 6.5にMySQL5.7をyumでインストールする - ひとり開発日記。 を含むブックマーク はてなブックマーク - CentOS 6.5にMySQL5.7をyumでインストールする - ひとり開発日記。

覚え書きです。

OSバージョン確認

[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@localhost ~]# arch
x86_64

ミラーサーバー http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.7/ を開き、末尾が".el6.x86_64.rpm"のもののうち、以下の三つのリンクURLをコピーする

  1. MySQL-shared-compat-***.el6.x86_64.rpm
  2. MySQL-client-***.el6.x86_64.rpm
  3. MySQL-server-***.el6.x86_64.rpm

yumコマンドで順次インストール*1 MySQL-shared-compatから順にインストールしていけば、古いmysql-libsとコンフリクトすることもないですよ。

[root@localhost ~]# yum -y install http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.7/MySQL-shared-compat-5.7.4_m14-1.el6.x86_64.rpm
[root@localhost ~]# yum -y install http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.7/MySQL-client-5.7.4_m14-1.el6.x86_64.rpm
[root@localhost ~]# yum -y install http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.7/MySQL-server-5.7.4_m14-1.el6.x86_64.rpm

MySQL-serverをインストールすると、以下のようなメッセージが出ます。

A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !
You will find that password in '/root/.mysql_secret'.

You must change that password on your first connect,
no other statement but 'SET PASSWORD' will be accepted.
See the manual for the semantics of the 'password expired' flag.

/root/.mysql_secret に初期rootパスワードが書き出されているので、MySQLを起動後、それでログインして、rootパスワードを書き換えます。

[root@localhost ~]# cat /root/.mysql_secret
# The random password set for the root user at Thu May 22 21:11:27 2014 (local time):
C4={X-@0.dta(yfd

[root@localhost ~]# service mysql start
Starting MySQL...                                          [  OK  ]
[root@localhost ~]# chkconfig mysql on
[root@localhost ~]# chkconfig --list mysql
mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.7.4-m14

mysql> SET PASSWORD FOR root@localhost=PASSWORD('hello2014');
Query OK, 0 rows affected (0.03 sec)
mysql> quit
Bye

MySQLrootパスワードをhello2014に書き換え*2、再度ログインできることを確認。

[root@localhost ~]# mysql -u root -p
Enter password:

*1:最近のyumコマンドは、*.rpmファイルのURLを指定すれば、自動的ダウンロードして解決してくれるんですね…。

*2:本当はもっとセキュアでランダムなパスワードですが

トラックバック - http://program.g.hatena.ne.jp/halflite/20140523