利用Ansible实现MySQL多实例自动化安装(mysql 8.0.21)

您所在的位置:网站首页 Mysql集群一键重启 利用Ansible实现MySQL多实例自动化安装(mysql 8.0.21)

利用Ansible实现MySQL多实例自动化安装(mysql 8.0.21)

2023-11-24 21:24| 来源: 网络整理| 查看: 265

本文知识点,学于 “知数堂 MySQL DBA 实战课程”,讲师 吴炳锡

如果对课程感兴趣可以私聊我,我推荐您报名学习(这样我能赚个鸡腿钱 O(∩_∩)O哈哈~)

或者点击链接直达:https://ke.qq.com/course/2739817

 

环境:

操作系统: CentOS Linux release 7.8.2003 (Core)

MySQL版本:8.0.21

安装 ansible 机器:192.168.31.127

目标机器:192.168.31.45

 

首先要知道,我们为什么要使用多实例?

物理机强劲,单个项目无法把资源使用完

现在单个实例数据库大小

资源隔离,减少相互影响

分担连接数

更充分的利用资源

 

MySQL 多实例安装方式 手动新建一个新的实例(本文不做讨论)利用 ansible 实现远程自动化的安装与部署(还有其他的工具可以使用,这里主要介绍 ansible)

 

实现过程 安装 ansible(二选一,笔者这里使用的是 yum 方式) #yum install ansible #pip install ansible 安装完成之后会出现 /etc/ansible/ 这样的目录接下来就是配置好相关的文档了(下图是我的 ansible 文件路径) [root@*** 02:06:56 /etc/ansible] #tree . ├── ansible.cfg ├── hosts ├── mysql.yml └── roles └── zst_mysql8 ├── files │   └── mysql-8.0.21-linux-glibc2.12-x86_64.tar ├── handlers ├── meta ├── tasks │   ├── : │   ├── install.yml │   ├── main.yml │   └── prepare.yml ├── templates │   ├── after_start.sh │   └── my.cnf └── vars └── main.yml 8 directories, 11 files 相关配置文件

# cat hosts

[mysql] 192.168.31.45 # 目标机器 ip 地址

#cat mysql.yml

#cat mysql.yml --- - hosts: mysql roles: - zst_mysql8

#cat roles/zst_mysql8/tasks/install.yml(一定要注意缩进哈)

- name: 1. 创建 MySQL 用户组 group: name={{ MYSQL_USER }} state=present - name: 2. 创建 MySQL 用户 user: name={{ MYSQL_USER }} group={{ MYSQL_USER }} state=present create_home=False shell=/sbin/nologin - name: 3. 创建所需目录及权限 file: name={{ item }} state=directory owner={{ MYSQL_USER }} group={{ MYSQL_USER }} mode=0750 recurse=yes with_items: - "{{ SOURCE_DIR }}" - "{{ DATA_BASE }}" - "{{ DATA_BASE }}/data" - "{{ DATA_BASE }}/tmp" - "{{ DATA_BASE }}/logs" - "/opt/mysql" - name: 4. 部署 MySQL stat: path={{ BASE_DIR }} register: base_ok - name: 4. 部署 MySQL Server 相关软件 unarchive: src=mysql-{{ MYSQL_VER }}-linux-glibc2.12-x86_64.tar dest=/opt/mysql owner={{ MYSQL_USER }} group={{ MYSQL_USER }} when: not base_ok.stat.exists - name: 5. 创建 basedir 的软链 file: src: /opt/mysql/mysql-{{ MYSQL_VER }}-linux-glibc2.12-x86_64 dest: "{{ BASE_DIR }}" owner: "{{ MYSQL_USER }}" group: "{{ MYSQL_USER }}" state: link # 复制 MySQL 配置文件 - name: 6. 拷贝 mysql 配置文件 template: src=my.cnf dest={{ DATA_BASE }}/my{{ MYSQL_PORT }}.cnf owner=root group=root - name: 7. 把 mysql 命令加入 PATH 中 shell: " if [ `grep {{ BASE_DIR }}/bin /etc/profile |wc -l` -eq 0 ]; then echo export PATH=$PATH:{{ BASE_DIR }}/bin >> /etc/profile && source /etc/profile; else source /etc/profile; fi" - name: 8. mysql 初始化 shell: "{{ BASE_DIR }}/bin/mysqld --defaults-file={{ DATA_BASE }}/my{{ MYSQL_PORT }}.cnf --initialize-insecure --user={{ MYSQL_USER }}" - name: 9. 启动 mysql 并开机启动 shell: "{{ BASE_DIR }}/bin/mysqld_safe --defaults-file={{ DATA_BASE }}/my{{ MYSQL_PORT }}.cnf &" - name: 10. 生成初始化脚本 template: src=after_start.sh dest=/root/ owner=root group=root - name: 11. 执行生成的脚本 shell: bash /root/after_start.sh

#cat roles/zst_mysql8/tasks/main.yml

- include: install.yml

#cat roles/zst_mysql8/templates/after_start.sh

#!/bin/bash echo "安装的 mysql 版本 {{ MYSQL_VER }}" echo "DATA_DIR {{ DATA_DIR }}" echo "指定你需要的初始化相关内容" echo "create user 'test'@'%' identified by '123456';grant replication slave on *.* to 'test'@'%';"|mysql -S /tmp/mysql{{ MYSQL_PORT}}.sock -uroot

# my.cnf

这里需要注意的是,base_dir、data_dir、port 换成 vars 中相应的变量即可 “{{ XXX }}”

#cat roles/zst_mysql8/vars/main.yml

# #定义 mysql 安装中的变量 MYSQL_VER: 8.0.21 MYSQL_USER: mysql #MYSQL_PORT: 3307 # 注意因为是多实例,这里给注释了。安装时手动添加即可 MYSQL_PASSWD: 626506 SOURCE_DIR: /data/soft BASE_DIR: /usr/local/mysql DATA_BASE: /data/mysql/mysql{{ MYSQL_PORT }} DATA_DIR: /data/mysql/mysql{{ MYSQL_PORT }}/data 接下来就是 ssh 连接主机了 #ssh-keygen # 获得证书,一路回车就行(可查看 /root/.ssh/*) #ssh-copy-id [email protected] # 注意,ip 是目标机器

 

 

环境搭建完毕,接下来开始整活ヾ(◍°∇°◍)ノ゙ 首先来个小测试,看看 ansible是否能连接上目标机器 看看目标机器 IP地址 #ansible 192.168.31.45 -m command -a 'ifconfig' 192.168.31.45 | CHANGED | rc=0 >> ens33: flags=4163 mtu 1500 inet 192.168.31.45 netmask 255.255.255.0 broadcast 192.168.31.255 安装 mysql 3306实例 #ansible-playbook mysql.yml -e "MYSQL_PORT=3306" PLAY [mysql] ******************************************************************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************************************************************** ok: [192.168.31.45] TASK [zst_mysql8 : 1. 创建 MySQL 用户组] ********************************************************************************************************************************************************* ok: [192.168.31.45] TASK [zst_mysql8 : 2. 创建 MySQL 用户] ********************************************************************************************************************************************************** ok: [192.168.31.45] TASK [zst_mysql8 : 3. 创建所需目录及权限] ************************************************************************************************************************************************************ ok: [192.168.31.45] => (item=/data/soft) changed: [192.168.31.45] => (item=/data/mysql/mysql3306) changed: [192.168.31.45] => (item=/data/mysql/mysql3306/data) changed: [192.168.31.45] => (item=/data/mysql/mysql3306/tmp) changed: [192.168.31.45] => (item=/data/mysql/mysql3306/logs) ok: [192.168.31.45] => (item=/opt/mysql) TASK [zst_mysql8 : 4. 部署 MySQL] ************************************************************************************************************************************************************* ok: [192.168.31.45] TASK [zst_mysql8 : 4. 部署 MySQL Server 相关软件] ************************************************************************************************************************************************* changed: [192.168.31.45] TASK [zst_mysql8 : 5. 创建 basedir 的软链] ******************************************************************************************************************************************************* changed: [192.168.31.45] TASK [zst_mysql8 : 6. 拷贝 mysql 配置文件] ******************************************************************************************************************************************************** changed: [192.168.31.45] TASK [zst_mysql8 : 7. 把 mysql 命令加入 PATH 中] ************************************************************************************************************************************************** changed: [192.168.31.45] TASK [zst_mysql8 : 8. mysql 初始化] ************************************************************************************************************************************************************ changed: [192.168.31.45] TASK [zst_mysql8 : 9. 启动 mysql 并开机启动] ******************************************************************************************************************************************************* changed: [192.168.31.45] TASK [zst_mysql8 : 10. 生成初始化脚本] ************************************************************************************************************************************************************* changed: [192.168.31.45] TASK [zst_mysql8 : 11. 执行生成的脚本] ************************************************************************************************************************************************************* changed: [192.168.31.45] PLAY RECAP ********************************************************************************************************************************************************************************** 192.168.31.45 : ok=13 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 在 4. 部署 MySQL Server 相关软件 可能会比较慢一点这里failed、skipped 都是 0,说明进行的很顺利 (*^▽^*)

 

切换到 192.164.31.45 机器,登陆下试试 #ps aux|grep mysql root 11485 0.0 0.0 113416 648 ? S 11月23 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3306/my3306.cnf mysql 13018 0.7 21.3 9031716 825692 ? Sl 11月23 0:57 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql3306/data/error.log --open-files-limit=65535 --pid-file=denyf.pid --socket=/tmp/mysql3306.sock --port=3306 root 30514 0.0 0.0 112828 976 pts/1 S+ 02:01 0:00 grep --color=auto mysql #mysql -S /tmp/mysql3306.sock -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 Server version: 8.0.21 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. root@localhost [(none)]>

 

接下来再安装一个 3307 实例(这里就会快很多了,纵享新丝滑) 这里需要注意的是 修改 after_start.sh 文件(注释或者删掉配置环境变量那一行)可以看到,现在已经起 2个 mysqld 实例了(3306、3307) #ps aux|grep mysql root 11485 0.0 0.0 113416 648 ? S 11月23 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3306/my3306.cnf mysql 13018 0.7 21.2 9031716 822308 ? Sl 11月23 1:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql3306/data/error.log --open-files-limit=65535 --pid-file=denyf.pid --socket=/tmp/mysql3306.sock --port=3306 root 31944 0.1 0.0 113416 1632 ? S 02:06 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3307/my3307.cnf mysql 33478 5.6 22.1 8899104 855408 ? Sl 02:06 0:03 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my3307.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql3307/data/error.log --open-files-limit=65535 --pid-file=denyf.pid --socket=/tmp/mysql3307.sock --port=3307 root 33779 0.0 0.0 112824 976 pts/1 S+ 02:07 0:00 grep --color=auto mysql

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3