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集成到界面,鼠标点记下,就完成一台机器安装,就好了。

  • 相关阅读:
    Chandy-Lamport_algorithm
    3 differences between Savepoints and Checkpoints in Apache Flink
    列数 行数 表数 限制
    数据收集、传输、元数据管理、作业流调度、海量数据查询引擎、数据可视化
    分析云负载均衡产品
    端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则
    JSON Web Token
    查看开启端口的应用
    If the parts of an organization (e.g., teams, departments, or subdivisions) do not closely reflect the essential parts of the product, or if the relationship between organizations do not reflect the r
    微服务架构的理论基础
  • 原文地址:https://www.cnblogs.com/5sdba-notes/p/12813302.html
Copyright © 2011-2022 走看看