zoukankan      html  css  js  c++  java
  • 使用ansible搭建mysql主从复制

    系统配置:centos7

            mysql5.7

                      ansible 2.9.1

    1、安装ansible

    yum install epel-release-y
    
    yum install ansible

    2、编写inventory文件  hosts.ini

    [mysql_servers]
    192.168.235.145 ansible_ssh_user="root" ansible_ssh_pass="xxxxxxx" mysql_role=master  server_id=1
    192.168.235.146 ansible_ssh_user="root" ansible_ssh_pass="xxxxxxx" mysql_role=slave  server_id=2
    192.168.235.147 ansible_ssh_user="root" ansible_ssh_pass="xxxxxxx" mysql_role=slave  server_id=3
    
    [mysql_servers:vars]
    master_ip=192.168.235.145
    mysql_version=5.7.28
    
    mysql_root_password=sy#M*tFE(11O
    mysqld_error_log=/var/log/mysqld.log
    mysql_repl_user=repl
    mysql_repl_password=repl

    3、编写tasks任务文件  main.yml

    ---
    - name: stop firewalld
      shell: systemctl stop firewalld

     register: command_result
      failed_when: "'FAILED' in command_result.stderr"

    - name: disable firewalld shell: systemctl disable firewalld
      register: command_result
      failed_when: "'FAILED' in command_result.stderr"

    - name: install repository
      yum :
        name: https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
        state: present
    
    - name: copy global my.cnf
      template:
        src: templates/my.cnf.j2
        dest: /etc/my.cnf
    
    - name: install mysql '{{ mysql_version  }}'
      yum:
        name: 'mysql-community-server-{{ mysql_version }}'
        state: present
        enablerepo: mysql57-community
        disablerepo: mysql80-community
    
    - name: start mysql
      service:
          name: mysqld
          state: started
    
    - name: Find temporary password
      shell: >
        echo `grep 'temporary.*root@localhost' "{{ mysqld_error_log  }}" | sed 's/.*root@localhost: //'`
      register: mysql_root_password_temp
    
    - name: Set new password for mysql root user
      shell: >
          mysql -NBe "alter user USER() identified by '{{ mysql_root_password }}';"
          --connect-expired-password -uroot -p'{{ mysql_root_password_temp.stdout }}'
    
    - name: uninstall validate_password plugin
      shell: >
          mysql -NBe "uninstall plugin validate_password" -uroot -p'{{ mysql_root_password  }}'
    
    - name: install MySQL-python
      yum:
          name: MySQL-python
          state: latest
    
    - name: create replication user
      mysql_user:
        name: "{{ mysql_repl_user }}"
        host: "%"
        password: "{{ mysql_repl_password }}"
        priv: "*.*:REPLICATION SLAVE"
        state: present
        login_user: root
        login_password: "{{ mysql_root_password }}"
      when: mysql_role == "master"
      tags:
        - create-repl-user
    
    - name: change master to
      mysql_replication:
         mode: changemaster
         master_host: "{{ master_ip }}"
         master_user: repl
         master_password: repl
         master_auto_position: yes
         login_user: root
         login_password: "{{ mysql_root_password }}"
      when: mysql_role == 'slave'
    
    - name: start slave
      mysql_replication:
         mode: startslave
         login_user: root
         login_password: "{{ mysql_root_password }}"
      when: mysql_role == "slave"

    4、mysql配置文件模板 my.cnf.j2

    [mysqld]
    
    datadir = /var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    
    symbolic-links=0
    
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    log-bin=/var/lib/mysql/mysql-bin
    server-id = {{ server_id }}
    
    character_set_server='utf8'
    skip-name-resolve
    
    
    ## InnoDB specific parameters
    innodb_buffer_pool_size = 2G
    innodb_file_per_table=ON
    innodb_flush_log_at_trx_commit=1
    innodb_log_file_size=128M
    innodb_flush_method=O_DIRECT
    
    ## Transaction behavior
    autocommit=ON
    transaction-isolation=READ-COMMITTED
    
    
    #slow_query
    log_queries_not_using_indexes=1
    long_query_time=1
    slow_query_log=1
    
    
    ## Memory sizes
    join_buffer_size     = 8M
    sort_buffer_size     = 8M
    read_rnd_buffer_size = 16M
    
    tmp_table_size       = 128M
    max_heap_table_size  = 128M
    
    
    ## Miscellaneous parameters
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER
    default_storage_engine=InnoDB
    
    
    # max binlog keeps days
    expire_logs_days = 7
    
    max_connections=300
    log_timestamps=system
    slave_net_timeout=3600
    ## Enables binary logging
    max_relay_log_size=512M
    binlog_format=ROW
    max_binlog_size=512M
    master_info_repository = table
    relay_log_info_repository = table
    sync_binlog=0
    gtid_mode=ON
    log_slave_updates=ON
    enforce_gtid_consistency=ON
    plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    loose_rpl_semi_sync_master_enabled = 1
    loose_rpl_semi_sync_slave_enabled = 1
    loose_rpl_semi_sync_master_timeout = 5000
    ## Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    {% if mysql_role == "slave" %}
    read_only=ON
    {% endif %}

    执行:

    ansible-playbook -i hosts.ini start_deploy.yml

    完整代码链接:

    https://github.com/chaofan1/ansible_mysql_master_slave

  • 相关阅读:
    KTorrent 2.1
    Krusader-双面板文件治理器
    VirtualBox 1.3.4
    QEMU 0.9.0 & QEMU Accelerator 1.3.0pre10
    Sweep:音频编辑器材
    USBSink-优盘同步备份东西
    玩转 MPlayer(1)
    玩转 MPlayer(2)
    活动目录之迁移
    再学 GDI+[26]: TGPPen 画笔对齐 SetAlignment
  • 原文地址:https://www.cnblogs.com/chaofan-/p/11911029.html
Copyright © 2011-2022 走看看