zoukankan      html  css  js  c++  java
  • ansible一键安装mysql8.0

    ansbile安装:

    # ansible在CentOS7中需要安装epel仓库
    yum install -y epel-release
    yum install -y ansible

    安装有好几种方法,yum安装是最简单的,安装ansible不是重点。

    我的版本如下:

    [root@szwpldb1081 mysqltools]# ansible --version
    ansible 2.7.10
      config file = /etc/ansible/ansible.cfg
      configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/local/python-3.7.3/lib/python3.7/site-packages/ansible
      executable location = /usr/local/python/bin/ansible
      python version = 3.7.3 (default, Dec 15 2019, 15:54:59) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39.0.3)]

    我的目录树如下:

    [root@szwpldb1081 mysql]# tree
    .
    ├── common
    │   ├── config_systemd.yaml
    │   ├── create_my_cnf.yaml
    │   ├── create_user.yaml
    │   ├── export_path.yaml
    │   ├── init_mysql_data_dir.yaml
    │   ├── install_mysql.yaml
    │   └── mysql_dependencies.yaml
    ├── install_group_replication.yaml
    ├── install_master_slaves.yaml
    ├── install_multi_source_replication.yaml
    ├── install_single.yaml
    ├── templates
    │   ├── 5.7
    │   │   └── my.cnf.jinja
    │   ├── 8.0
    │   │   ├── my.cnf
    │   │   └── my.cnf.jinja
    │   ├── init_mysql_data_dir.sh
    │   ├── ld.so.conf
    │   ├── mysqld.service
    │   ├── mysqldump_backup.sh
    │   ├── untar_mysql_pkg.sh
    │   ├── users.sql
    │   └── users.sql.jinja
    ├── upgrad_single_mysql.yaml
    └── vars
        ├── group_replication.yaml
        ├── master_slaves.yaml
        ├── multi_source_replication.yaml
        └── mysql.yaml

    以安装单机版为例, install_single.yaml 如下:

    [root@szwpldb1081 mysql]# cat install_single.yaml 
    ---
      - hosts: uat
        remote_user: root
        become_user: root
        become: yes
        vars_files:
          - ../../config.yaml
          - ./vars/mysql.yaml
        tasks:
          - name: create mysql user
            import_tasks: common/create_user.yaml
          
          - name: install dependencies
            import_tasks: common/mysql_dependencies.yaml
          
          - name: "create /etc/my-{{mysql_port}}.cnf"
            import_tasks: common/create_my_cnf.yaml
    
          - name: "install {{mysql_binary_pkg}}"
            import_tasks: common/install_mysql.yaml
    
          - name: "init data dir"
            import_tasks: common/init_mysql_data_dir.yaml
    
          - name: "config path"
            import_tasks: common/export_path.yaml
    
          - name: "config systemd and start mysqld"
            import_tasks: common/config_systemd.yaml

     create_user.yaml 

    [root@szwpldb1081 mysql]# cat common/create_user.yaml 
    ---
     - name: create mysql group
       group:
         name: "{{mysql_group}}"
         state: present
         gid: "{{mysql_gid}}"
        
     - name: create user "{{mysql_user}}"
       user:
         name: "{{mysql_user}}"
         state: present
         uid: "{{mysql_uid}}"
         group: mysql

     mysql_dependencies.yaml 

    [root@szwpldb1081 mysql]# cat common/mysql_dependencies.yaml
    ---
     - name: install libaio
       yum:
        name: libaio-devel
        state: present
    
     - name: install numactl
       yum:
        name: numactl-devel
        state: present
    
     - name: install perl-Data-Dumper 
       yum:
        name: perl-Data-Dumper 
        state: present

     install_mysql.yaml 

    [root@szwpldb1081 mysql]# cat common/install_mysql.yaml
    ---
      - name: "transfer {{mysql_binary_pkg}} to target host(s)."
        copy:
          src: "../../../sps/mysql/{{mysql_binary_pkg}}"
          dest: "/tmp/mysql/"
          owner: "{{mysql_user}}"
      
      - name: "generate untar script /tmp/untar_mysql_pkg.sh"
        template:
          src: "../templates/untar_mysql_pkg.sh"
          dest: "/tmp/mysql/untar_mysql_pkg.sh"
      
      - name: "untar {{mysql_binary_pkg}} "
        shell: "bash /tmp/mysql/untar_mysql_pkg.sh > /tmp/untar_mysql_pkg.log"
      
      - name: "rm /tmp/untar_mysql_pkg.sh"
        file:
          path: "/tmp/mysql/untar_mysql_pkg.sh"
          state: absent
    
      - name: "create libmysqlclient_r.so"
        file:
          src: "{{mysql_base_dir}}/lib/libmysqlclient.so"
          dest: "{{mysql_base_dir}}/lib/libmysqlclient_r.so"
          state: link
      
      - name: "update file privileges"
        file:
          path: "{{mysql_base_dir}}"
          owner: "{{mysql_user}}"
          group: "{{mysql_group}}"
          recurse: yes
      
      - name: "config ldconfig"
        template:
          src: "../templates/ld.so.conf"
          dest: "/etc/ld.so.conf.d/{{mysql_version}}.conf"
      
      - name: "load so"
        shell: ldconfig
      
      - name: "conifg header file"
        file:
          src: "{{mysql_base_dir}}/include"
          dest: "/usr/include/{{mysql_version}}"
          state: link

     init_mysql_data_dir.yaml 

    [root@szwpldb1081 mysql]# cat common/init_mysql_data_dir.yaml
    ---
      - name: "transfer users.sql to target host(s)."
        template:
          src: "../templates/users.sql"
          dest: "/tmp/mysql/users.sql"
    
      - name: "transfer init_mysql_data_dir.sh to target host(s)."
        template:
          src: "../templates/init_mysql_data_dir.sh"
          dest: /tmp/mysql/init_mysql_data_dir.sh
      
      - name: "init data dir"
        shell: bash /tmp/mysql/init_mysql_data_dir.sh
    
      - name: "rm mysql_pkg_scripts"
        file:
          path: "/tmp/mysql/"
          state: absent

     export_path.yaml 

    [root@szwpldb1081 mysql]# cat common/export_path.yaml
    ---
      - name: /etc/profile
        lineinfile:
          path: /etc/profile
          line: "export PATH={{mysql_base_dir}}/bin/:$PATH"
          insertafter: EOF
          state: present
      
      - name: ~/.bash_profile
        lineinfile:
          path: "/home/{{mysql_user}}/.bash_profile"
          line: "export PATH={{mysql_base_dir}}/bin/:$PATH"
          insertafter: EOF
          state: present   
    
      - name: ~/.bashrc
        lineinfile:
          path: "/home/{{mysql_user}}/.bashrc"
          line: "export PATH={{mysql_base_dir}}/bin/:$PATH"
          insertafter: EOF
          state: present  

     config_systemd.yaml 

    [root@szwpldb1081 mysql]# cat common/config_systemd.yaml
    ---
      - name: "config mysqld-{{mysql_port}}.service"
        template:
          src: "../templates/mysqld.service"
          dest: "/usr/lib/systemd/system/mysqld-{{mysql_port}}.service"
      
      - name: "conifg mysqld-{{mysql_port}} auto start"
        systemd:
          name: "mysqld-{{mysql_port}}"
          enabled: yes
          daemon_reload: yes
      
      - name: "start mysqld-{{mysql_port}}"
        systemd:
          name: "mysqld-{{mysql_port}}"
          state: started
          daemon_reload: yes

    定义一些变量配置参数 config.yaml :

    [root@szwpldb1081 mysql]# cat ../../config.yaml
    max_memory_size_mb: "{{ 1024 * 512 }}" # 512G内存
    mysql_port: 33601
    mysql_binary_pkg: "mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz"

     mysql.yaml 

    [root@szwpldb1081 mysql]# cat ./vars/mysql.yaml
    #mysql configure
    mysql_user: "mysql"
    mysql_group: "mysql"
    mysql_uid: "{{mysql_port}}"
    mysql_gid: "{{mysql_port}}"
    mysql_packages_dir: "/usr/local/mysqltools/sps/mysql/"
    mysql_base_dir: "/usr/local/{{ mysql_binary_pkg | replace('.tar.gz','') | replace('.tar.xz','') }}"
    mysql_data_dir: "/database/mysql/node1"
    mysql_version: "{{ mysql_binary_pkg | replace('.tar.gz','') | replace('.tar.xz','') }}"
    mysql_root_pwd: 'xxxx'
    mysql_monitor_user: 'xxx'
    mysql_monitor_pwd: 'xxxx'
    mysql_binlog_format: "row"
    mysql_xport: "{{ mysql_port + 100 }}"
    mysql_mgrport: "{{ mysql_port + 101 }}"
    mysql_admin_port: "{{ mysql_port + 102 }}"

     create_my_cnf.yaml 

    [root@szwpldb1081 mysql]# cat common/create_my_cnf.yaml
    ---
      - name: "/etc/my-{{mysql_port}}.cnf for mysql-8.0.x "
        when: mysql_binary_pkg.find('8.0') != -1
        template:
          src: ../templates/8.0/my.cnf
          dest: "/etc/my.cnf"
          owner: "{{mysql_user}}"
          group: "{{mysql_group}}"
          backup: yes
    
      - name: "/etc/my-{{mysql_port}}.cnf for mysql-5.7.x "
        when: mysql_binary_pkg.find('5.7') != -1
        template:
          src: ../templates/5.7/my.cnf
          dest: "/etc/my.cnf"
          owner: "{{mysql_user}}"
          group: "{{mysql_group}}"
          backup: yes

    文件目录设置的比较多,主要是为了配置方便灵活,可以适当的增加,看每个人自己实际的情况来操作就好。

    [root@szwpldb1081 mysql]# cat /etc/ansible/ansible.cfg 
    [defaults]
    host_key_checking = False    #不检测host key
    stdout_callback = debug
    ANSIBLE_STDOUT_CALLBACK=debug

    修改ansible配置文件hosts主机里面的主机,然后与 install_single.yaml:里面的host对应上:

    [root@szwpldb1081 ~]# cat /etc/ansible/hosts
    [uat]
    x.x.x.x ansible_host=x.x.x.x ansible_user=root ansible_ssh_pass=xxxxx ansible_su_pass=xxxxx

    执行过程报错:

    TASK [init data dir] *********************************************************************************************************************
    fatal: [172.18.1.192]: FAILED! => {
        "changed": true,
        "cmd": "bash /tmp/mysql/init_mysql_data_dir.sh",
        "delta": "0:00:14.202501",
        "end": "2020-05-01 12:36:32.514086",
        "rc": 1,
        "start": "2020-05-01 12:36:18.311585"
    }
    
    MSG:
    
    non-zero return code
    
        to retry, use: --limit @/usr/local/mysqltools/ansible/mysql/install_single.retry
    
    PLAY RECAP *******************************************************************************************************************************
    172.18.1.192               : ok=18   changed=7    unreachable=0    failed=1   

    手动执行提示:

    hing off the --initialize-insecure option.
    2020-05-01T12:51:17.339226+08:00 5 [Note] [MY-011061] [Server] Creating the system tables.
    2020-05-01T12:51:17.506281+08:00 5 [Note] [MY-011061] [Server] Filling in the system tables, part 1.
    2020-05-01T12:51:17.517417+08:00 5 [Note] [MY-011061] [Server] Filling in the system tables, part 2.
    2020-05-01T12:51:17.776951+08:00 5 [Note] [MY-011061] [Server] Filling in the mysql.help table.
    2020-05-01T12:51:17.858580+08:00 5 [Note] [MY-011061] [Server] Creating the system users for internal usage.
    2020-05-01T12:51:17.886104+08:00 5 [Note] [MY-011061] [Server] Creating the sys schema.
    2020-05-01T12:51:18.387866+08:00 5 [Note] [MY-010456] [Server] Bootstrapping complete
    2020-05-01T12:51:18.486722+08:00 5 [ERROR] [MY-000061] [Server] 1410  You are not allowed to create a user with GRANT.
    2020-05-01T12:51:18.489065+08:00 0 [Note] [MY-010138] [Server] Execution of init_file '/tmp/mysql/users.sql' ended.
    2020-05-01T12:51:18.489096+08:00 0 [ERROR] [MY-013455] [Server] The newly created data directory /database/mysql/node1/ by --initialize is unusable. You can remove it.

    脚本如下:

    [root@SZWPLDB1091 ~]# cat /tmp/mysql/init_mysql_data_dir.sh 
    #!/bin/bash
    
    cd /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64
    
    if [ -d /database/mysql/node1 ]
    then
        echo "`date`  | datadir has been inited" >> /tmp/mtls8.log
        exit 1;
    else
        mkdir -p /database/mysql/33601
        mkdir -p /database/mysql/33601/binlogs
        mkdir -p /database/mysql/33601/undolog
        mkdir -p /database/mysql/33601/relaylogs    
        mkdir -p /database/mysql/33601/tmpdir 
        chown mysql:mysql -R /database/mysql
        chmod 600 /root/.mylogin.cnf
        chmod 777 -R /database/mysql
        ./bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --initialize-insecure --init-file=/tmp/mysql/users.sql
    fi

    最后排查发现是 --init-file=/tmp/mysql/users.sql 有问题,修改以后然后执行:

    [root@szwpldb1081 mysql]# ansible-playbook install_single.yaml 
    
    PLAY [uat] *******************************************************************************************************************************
    
    TASK [Gathering Facts] *******************************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [create mysql group] ****************************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [create user "mysql"] ***************************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [install libaio] ********************************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [install numactl] *******************************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [install perl-Data-Dumper] **********************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [/etc/my-33601.cnf for mysql-8.0.x] *************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [/etc/my-33601.cnf for mysql-5.7.x] *************************************************************************************************
    skipping: [172.18.1.192]
    
    TASK [transfer mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz to target host(s).] ************************************************************
    ok: [172.18.1.192]
    
    TASK [generate untar script /tmp/untar_mysql_pkg.sh] *************************************************************************************
    changed: [172.18.1.192]
    
    TASK [untar mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz] **********************************************************************************
    changed: [172.18.1.192]
    
    TASK [rm /tmp/untar_mysql_pkg.sh] ********************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [create libmysqlclient_r.so] ********************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [update file privileges] ************************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [config ldconfig] *******************************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [load so] ***************************************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [conifg header file] ****************************************************************************************************************
    ok: [172.18.1.192]
    
    TASK [transfer users.sql to target host(s).] *********************************************************************************************
    changed: [172.18.1.192]
    
    TASK [transfer init_mysql_data_dir.sh to target host(s).] ********************************************************************************
    ok: [172.18.1.192]
    
    TASK [init data dir] *********************************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [rm mysql_pkg_scripts] **************************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [/etc/profile] **********************************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [~/.bash_profile] *******************************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [~/.bashrc] *************************************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [config mysqld-33601.service] *******************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [conifg mysqld-33601 auto start] ****************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [start mysqld-33601] ****************************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [create backup dir] *****************************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [create backup script dir] **********************************************************************************************************
    changed: [172.18.1.192]
    
    TASK [transfer backup script to target host (mysqldump)] *********************************************************************************
    changed: [172.18.1.192]
    
    TASK [config backup job (mysqldump)] *****************************************************************************************************
    changed: [172.18.1.192]
    
    PLAY RECAP *******************************************************************************************************************************
    172.18.1.192               : ok=30   changed=18   unreachable=0    failed=0   

    至此单机mysql一键安装算是完毕,借鉴了https://galaxy.ansible.com/home,看什么时候能自己整合一个平台,把ansible集成到界面,鼠标点记下,就完成一台机器安装,就好了。

  • 相关阅读:
    java打包成windows服务(转)
    java程序在windows系统作为服务程序运行(转)
    java String 转 Long 两种方法区别(转)
    css清除浮动clearfix:after的用法详解(转)
    管理界面的头2
    ROS 设置串口USB软连接
    ROS 用 roboware实现节点信息发送和接收
    javascript实现html中关键字查询
    winfrom 中 label 文字随着窗体大小变化
    lattice planner 规划详解
  • 原文地址:https://www.cnblogs.com/5sdba-notes/p/12813302.html
Copyright © 2011-2022 走看看