source

ubuntu에 ansible과 함께 MySQL 설치

manycodes 2023. 11. 7. 21:01
반응형

ubuntu에 ansible과 함께 MySQL 설치

부랑 우분투에 ansible로 MySQL을 설치하는 데 문제가 있습니다.

이것은 MySQL 부분입니다.

---
- name: Install MySQL
  apt:
    name: "{{ item }}"
  with_items:
    - python-mysqldb
    - mysql-server

- name: copy .my.cnf file with root password credentials
  template: 
    src: templates/root/.my.cnf
    dest: ~/.my.cnf
    owner: root
    mode: 0600

- name: Start the MySQL service
  service: 
    name: mysql 
    state: started
    enabled: true

  # 'localhost' needs to be the last item for idempotency, see
  # http://ansible.cc/docs/modules.html#mysql-user
- name: update mysql root password for all root accounts
  mysql_user: 
    name: root 
    host: "{{ item }}" 
    password: "{{ mysql_root_password }}" 
    priv: "*.*:ALL,GRANT"
  with_items:
    - "{{ ansible_hostname }}"
    - 127.0.0.1
    - ::1
    - localhost 

그리고 나는 이 오류가 있습니다.

failed: [default] => (item=vagrant-ubuntu-trusty-64) => {"failed": true, "item": "vagrant-ubuntu-trusty-64"}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
failed: [default] => (item=127.0.0.1) => {"failed": true, "item": "127.0.0.1"}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
failed: [default] => (item=::1) => {"failed": true, "item": "::1"}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
failed: [default] => (item=localhost) => {"failed": true, "item": "localhost"}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials

나의 .my.cnf는

[client]
user=root
password={{ mysql_root_password }}

서버에 복사할 경우

[client]
user=root
password=root

왜 ~/.my.cnf가 생성되었는지 이해할 수 없습니다.

프로젝트 깃허브

감사해요.

언제mysql-server무턱대고 설치되고 비밀번호가 없습니다.그러므로 만들기 위해서는.my.cnfwork, 빈 비밀번호 줄이 있어야 합니다.제가 테스트한 것은 다음과 같습니다..my.cnf:

[client]
user=root
password=

또 약간 이상한 느낌이 들 정도입니다..my.cnf당신의vagrant루트가 소유하고 루트로만 읽을 수 있는 사용자 디렉토리입니다.

암호가 공백인지 확인한 후.my.cnf, 저는 이 네 가지 상황에서 루트의 비밀번호를 적절하게 설정할 수 있었습니다.다음 이후에는 실행되지 않습니다..my.cnf업데이트해야 하므로 idempotency test에 실패합니다.

ansible mysql_user module 페이지에 비밀번호를 작성한 후 작성할 것을 제안하는 노트가 있습니다..my.cnf파일. 만약 그렇게 한다면, 당신은 그가 필요합니다.where에 대한 조항mysql_useraction (이전의 file stat로 probably).

사용하는 것이 더욱 우아합니다.check_implicit_admin와 함께login_user그리고.login_password. 그것은 아주 무능력한 것입니다.

제3의 방법으로, 아마도check_implicit_admin더 쉽게 만들 수 있습니다.

여기 몇 개의 새로운 서버로 테스트한 위의 내용을 보여주는 성공적인 플레이북이 있습니다.자랑스럽긴 하네요.메모.my.cnf이 모든 것에 불필요한 것입니다.

---
- hosts: mysql
  vars:
    mysql_root_password: fart
  tasks:
  - name: Install MySQL
    apt: name={{ item }} update_cache=yes cache_valid_time=3600 state=present
    sudo: yes
    with_items:
    - python-mysqldb
    - mysql-server
  #- name: copy cnf
  #  copy: src=.my.cnf dest=~/.my.cnf owner=ubuntu mode=0644
  #  sudo: yes
  - name: Start the MySQL service
    sudo: yes
    service: 
      name: mysql 
      state: started
      enabled: true
  - name: update mysql root password for all root accounts
    sudo: yes
    mysql_user: 
      name: root 
      host: "{{ item }}" 
      password: "{{ mysql_root_password }}"
      login_user: root
      login_password: "{{ mysql_root_password }}"
      check_implicit_admin: yes
      priv: "*.*:ALL,GRANT"
    with_items:
      - "{{ ansible_hostname }}"
      - 127.0.0.1
      - ::1
      - localhost 

(편집 - my.cnf 제거)

도움이 될만한 MySQL 역할이 여기 있습니다.

vars/main.yml:

mysql_root_pass: mypassword #MySQL Root Password

asks/main.yml:

---
 - name: Install the MySQL packages
   apt: name={{ item }} state=installed update_cache=yes
   with_items:
     - mysql-server-5.6
     - mysql-client-5.6
     - python-mysqldb
     - libmysqlclient-dev

 - name: Update MySQL root password for all root accounts
   mysql_user: name=root host={{ item }} password={{ mysql_root_pass }} state=present
   with_items:
     - "{{ ansible_hostname }}"
     - 127.0.0.1
     - ::1
     - localhost

 - name: Copy the root credentials as .my.cnf file
   template: src=root.cnf.j2 dest=~/.my.cnf mode=0600

 - name: Ensure Anonymous user(s) are not in the database
   mysql_user: name='' host={{ item }} state=absent
   with_items:
     - localhost
     - "{{ ansible_hostname }}"

 - name: Remove the test database
   mysql_db: name=test state=absent
   notify:
     - Restart MySQL

템플릿/root.cnf.j2

[client]
user=root
password={{ mysql_root_pass }}

핸들러/메인.yml

---
 - name: Restart MySQL
   service: name=mysql state=restarted

site.yml

---
- hosts: all
  become: yes
  gather_facts: yes
  roles:
    - mysql

도움이 필요하시면 이 github 링크를 확인해주시기 바랍니다.감사해요.

ubuntu 20.04에서는 login_unix_socket이 필요합니다.

- name: setting default root password
  mysql_user:
    name: root
    password: "{{ mysql_root_password }}"
    check_implicit_admin: true
    login_unix_socket: /var/run/mysqld/mysqld.sock

건배.

언급URL : https://stackoverflow.com/questions/26597926/install-mysql-with-ansible-on-ubuntu

반응형