详细探索如何用脚本实现M小ySQL一键安装与配置,提升运维效率!

以下是基于脚本实现MySQL一键安装与配置的详细方案,涵盖Linux主流系统(CentOS/Ubuntu)及Windows环境,结合自动化部署与高可用性扩展,旨在提升运维效率:


一、Linux系统(CentOS 7.x)一键安装脚本方案

1. 基于YUM源的自动化安装(MySQL 5.7/8.0)
 
#!/bin/bash
# 变量定义
VERSION="8.0"  # 可选5.7或8.0
ROOT_PASSWORD="StrongPass@123"
BASE_DIR="/usr/local/mysql"

# 环境准备
yum install -y wget net-tools
wget https://dev.mysql.com/get/mysql $ {VERSION}-community-release-el7-11.noarch.rpm
yum install -y mysql $ {VERSION}-community-release-el7-11.noarch.rpm
yum install -y mysql-community-server

# 初始化服务
systemctl start mysqld
systemctl enable mysqld

# 获取临时密码并重置
TEMP_PASSWORD= $ (grep 'temporary password' /var/log/mysqld.log | awk '{print  $ NF}')
mysql -uroot -p $ {TEMP_PASSWORD} --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY ' $ {ROOT_PASSWORD}';"

# 配置远程访问与字符集
mysql -uroot -p $ {ROOT_PASSWORD} -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ' $ {ROOT_PASSWORD}' WITH GRANT OPTION;"
mysql -uroot -p $ {ROOT_PASSWORD} -e "FLUSH PRIVILEGES;"
echo "[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-authentication-plugin=mysql_native_password" >> /etc/my.cnf

systemctl restart mysqld

2. 二进制包手动安装(MySQL 8.0)
 
#!/bin/bash
# 变量定义
VERSION="8.0.34"
ROOT_PASSWORD="SecurePass@456"
DATA_DIR="/data/mysql"

# 环境准备
groupadd mysql && useradd -r -g mysql mysql
mkdir -p  $ DATA_DIR/{data,logs,conf}
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql- $ {VERSION}-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql- $ {VERSION}-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/mysql- $ {VERSION}-linux-glibc2.12-x86_64 /usr/local/mysql

# 初始化数据库
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir= $ DATA_DIR/data
mv /var/log/mysqld.log  $ DATA_DIR/logs/
chmod 755  $ DATA_DIR -R
chown -R mysql:mysql  $ DATA_DIR /usr/local/mysql

# 配置环境变量
echo 'export PATH= $ PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

# 创建服务文件
cat <<EOF > /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir= $ DATA_DIR/data --pid-file= $ DATA_DIR/mysqld.pid
ExecReload=/bin/kill -HUP  $ MAINPID
ExecStop=/usr/local/mysql/bin/mysqladmin shutdown -u root -p $ {ROOT_PASSWORD}
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

# 启动服务并配置
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld

# 获取临时密码并重置
TEMP_PASSWORD= $ (grep 'temporary password'  $ DATA_DIR/logs/mysqld.log | awk '{print  $ NF}')
mysql -uroot -p $ {TEMP_PASSWORD} --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY ' $ {ROOT_PASSWORD}';"
mysql -uroot -p $ {ROOT_PASSWORD} -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ' $ {ROOT_PASSWORD}' WITH GRANT OPTION;"
mysql -uroot -p $ {ROOT_PASSWORD} -e "FLUSH PRIVILEGES;"


二、Windows系统一键安装脚本方案

1. 批处理脚本(MySQL 8.0)
 
@echo off
setlocal enabledelayedexpansion

set INSTALL_DIR=C:\mysql-8.0.34-winx64
set DATA_DIR=C:\mysql_data
set ROOT_PASSWORD=Admin@123

:: 下载并解压
bitsadmin.exe /transfer MySQLDownload /download /priority normal https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-%VERSION%-winx64.zip %TEMP%\mysql.zip
powershell Expand-Archive -Path %TEMP%\mysql.zip -DestinationPath %INSTALL_DIR%

:: 创建数据目录
mkdir %DATA_DIR%

:: 初始化配置
echo [mysqld] > %INSTALL_DIR%\my.ini
echo basedir = "%INSTALL_DIR%" >> %INSTALL_DIR%\my.ini
echo datadir = "%DATA_DIR%" >> %INSTALL_DIR%\my.ini
echo port = 3306 >> %INSTALL_DIR%\my.ini
echo character-set-server=utf8mb4 >> %INSTALL_DIR%\my.ini
echo default-authentication-plugin=mysql_native_password >> %INSTALL_DIR%\my.ini

:: 初始化数据库
%INSTALL_DIR%\bin\mysqld --initialize --console --datadir=%DATA_DIR% --user=root
set /p TEMP_PASSWORD=请输入临时密码:

:: 修改密码并配置远程访问
%INSTALL_DIR%\bin\mysql -u root -p%TEMP_PASSWORD% --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '%ROOT_PASSWORD%';"
%INSTALL_DIR%\bin\mysql -u root -p%ROOT_PASSWORD% -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '%ROOT_PASSWORD%' WITH GRANT OPTION;"
%INSTALL_DIR%\bin\mysql -u root -p%ROOT_PASSWORD% -e "FLUSH PRIVILEGES;"

:: 安装服务
%INSTALL_DIR%\bin\mysqld --install MySQL80
net start MySQL80


三、自动化部署高级方案

1. Ansible批量部署(支持多节点)
 
#(ansible-playbook)
- name: Deploy MySQL Cluster
  hosts: mysql_nodes
  become: yes
  tasks:
    - name: Install MySQL Repository
      yum:
        name: https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
        state: present

    - name: Install MySQL Server
      yum:
        name: mysql-community-server
        state: present

    - name: Start MySQL Service
      service:
        name: mysqld
        state: started
        enabled: yes

    - name: Get Initial Password
      shell: grep 'temporary password' /var/log/mysqld.log | awk '{print  $ NF}'
      register: temp_password

    - name: Set Root Password
      mysql_user:
        login_user: root
        login_password: "{{ temp_password.stdout }}"
        check_implicit_admin: yes
        name: root
        password: StrongPass@123
        host_all: yes

    - name: Configure Remote Access
      mysql_query:
        login_user: root
        login_password: StrongPass@123
        query: "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'StrongPass@123'; FLUSH PRIVILEGES;"

2. 高可用性扩展(MySQL Group Replication)
# 主节点配置(脚本片段)
mysql -uroot -p -e "CREATE USER 'repl'@'%' IDENTIFIED BY 'ReplicaPass@456';"
mysql -uroot -p -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';"
mysql -uroot -p -e "CHANGE MASTER TO MASTER_HOST='secondary_ip', MASTER_USER='repl', MASTER_PASSWORD='ReplicaPass@456';"
mysql -uroot -p -e "INSTALL PLUGIN group_replication SONAME 'group_replication.so';"
mysql -uroot -p -e "SET GLOBAL group_replication_group_name='uuid';"
mysql -uroot -p -e "SET GLOBAL group_replication_start_on_BOOT='ON';"
mysql -uroot -p -e "START GROUP_REPLICATION;"

四、关键配置优化建议

  1. 性能调优
    • 调整innodb_buffer_pool_size为物理内存的70%
    • 启用查询缓存:query_cache_type=1(MySQL 8.0后默认禁用)
    • 日志优化:slow_query_log=1 + long_query_time=2
  2. 安全加固
    • 禁用匿名账户:DROP USER ''@'localhost';
    • 删除测试数据库:DROP DATABASE test;
    • 配置防火墙规则:firewall-cmd --add-port=3306/tcp --permanent
  3. 监控集成
    • 安装Percona Monitoring Toolkit
    • 配置Prometheus + Grafana监控面板

五、脚本执行流程图

开始
├─ 检查系统环境(依赖、防火墙、SELinux)
├─ 下载安装包/配置源
├─ 执行安装命令
├─ 获取临时密码并重置
├─ 配置字符集与远程访问
├─ 初始化数据库目录权限
├─ 启动服务并验证状态
└─ 输出最终配置报告

六、常见问题解决方案

  1. 端口冲突:修改my.cnf中的port参数
  2. 权限不足:确保mysql用户对数据目录有读写权限
  3. SSL错误:添加skip-grant-tables临时启动后修复权限
  4. 服务启动失败:检查mysqld.log日志定位具体错误

通过上述脚本方案,可实现MySQL的快速部署与标准化配置,结合Ansible等工具可进一步扩展为集群化部署,显著提升运维效率。建议根据实际业务需求选择脚本模板并定制化调整参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/981911.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用Adobe Acrobat 实现PPT中图片分辨率的提升

1. 下载适用于 Windows 的 64 位 Acrobat 注册方式参考&#xff1a;https://ca.whu.edu.cn/knowledge.html?type1 2. 将ppt中需要提高分辨率的图片复制粘贴到新建的pptx问价中&#xff0c;然后执行“文件—>导出---->创建PDF、XPS文档” 3. 我们会发现保存下来的distrib…

自学微信小程序的第十二天

DAY12 1、腾讯地图SDK是一套为开发者提供多种地理位置服务的工具,可以使开发者在自己的应用中加入地图相关功能,轻松访问腾讯地图服务和数据,更好地实现微信小程序的地图功能。 表49:search()方法的常用选项 选项 类型 说明 keyword string POI搜索关键词,默认周边搜索 l…

海南自贸港的数字先锋:树莓集团的战略布局解析

海南自贸港凭借其独特的政策优势和地理条件&#xff0c;成为了数字产业发展的热土。树莓集团敏锐地捕捉到这一机遇&#xff0c;在此展开了全面而深远的战略布局。 在基础设施建设方面&#xff0c;树莓集团投入大量资金&#xff0c;建设了先进的数据中心。这些数据中心配备了顶…

MySQL -操作

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 文章目录 创建数据库格式编码集 操控数据库查看数据库修改数据库删除数据库备份与还原 部分表操作创建表查看表修改表 我的版本号&#xff1a;8.0.41-0ubuntu0.22.04.1 创…

ubuntu20系统下conda虚拟环境下安装文件存储位置

在 Conda 虚拟环境中执行 pip install 安装软件后&#xff0c;安装的文件会存储在该虚拟环境专属的 site-packages 目录中。具体路径取决于你激活的 Conda 环境路径。以下是定位步骤&#xff1a; 1. 确认 Conda 虚拟环境的安装路径 查看所有环境&#xff1a; conda info --env…

Blazor-路由模板(上)

Blazor 的路由模板是定义应用中不同页面或组件访问路径的一种方式。通过路由模板&#xff0c;你可以管理应用程序的导航结构&#xff0c;支持基本路由、参数路由、子路由和区域路由等功能。 我们为访问组件使用page 指令指定路由 URL page "/demoPage" <h3>&l…

OpenObserve开源高性能云原生平台本地部署与远程监控数据攻略

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;人工智能教程 文章目录 前言1. 安装Docker2. 创建并启动OpenObserve容器3. 本地访问测试4. 公网访问本地部署的OpenObserve4.1 内网穿透工具安装…

鸿蒙HarmonyOS-Navagation基本用法

Navagation基本用法 Navigation组件是路由导航的根视图容器&#xff0c;一般作为Page页面的根容器使用&#xff0c;其内部默认包含了标题栏&#xff0c;内容栏和公工具栏&#xff0c;其中内容区默认首页显示导航内容&#xff08;Navigation的子组件&#xff09;或非首页显示&am…

相控阵扫盲

下图展示天线增益 在仰角为0度的情况下随着方位角的变化而变化。需要注意到的是在天线视轴方向上的高增益主瓣上还有几个低增益旁瓣 阵列因子乘以新的阵元方向图会形成指向性更强的波速

CDefView::_OnFSNotify函数分析

进入CDefView::_OnFSNotify函数时状态栏 _UpdateStatusBar函数之后增加一个对象&#xff0c;变成7个对象。 LRESULT CDefView::_OnFSNotify(LONG lNotification, LPCITEMIDLIST* ppidl) { LPITEMIDLIST pidl; LPCITEMIDLIST pidlItem; // we may be registered for no…

人工智能之数学基础:矩阵的秩

本文重点 矩阵的秩,作为矩阵理论中的一个核心概念,是连接矩阵性质与应用的重要桥梁。本文我们将学习矩阵秩的概念,通过矩阵的秩可以判断矩阵是否可逆等等,所以矩阵的秩是非常重要的一个概念。 矩阵秩的概念 秩定义为矩阵A的线性独立的行(或列)的最大数目。也就是说,如…

告别GitHub连不上!一分钟快速访问方案

一、当GitHub抽风时&#xff0c;你是否也这样崩溃过&#xff1f; &#x1f621; npm install卡在node-sass半小时不动&#x1f62d; git clone到90%突然fatal: early EOF&#x1f92c; 改了半天hosts文件&#xff0c;第二天又失效了... 根本原因&#xff1a;传统代理需要复杂…

安装微软最新原版系统,配置好系统驱动并保留OOBE全新体验

记录一种安装原版系统&#xff0c;并在用户使用前安装好所有驱动&#xff0c;以及配置好网络和工作环境&#xff0c;但不影响用户全新体验的方法。 前言 有的时候我们可能会遇到这样一种情况&#xff1a; 需要给别人安装一个微软官网正版的全新系统&#xff0c;用户开机要有OO…

《导游职业资格考试:巧用答题技巧,实现分数飞跃》

《导游职业资格考试&#xff1a;巧用答题技巧&#xff0c;实现分数飞跃》 在导游职业资格考试中&#xff0c;掌握答题技巧能显著提升成绩。选择题方面&#xff0c;运用排除法是关键。对于考查导游基础知识的题目&#xff0c;如果选项中出现与历史事实不符、地理常识错误等明显…

嵌入式L6计算机网络

Telnet不加密 socket是应用层和下面的内核

C++、C#、python调用OpenCV进行图像处理耗时对比

C、C#、python调用OpenCV进行图像处理耗时对比 一、前言二、环境介绍三、耗时对比3.1读写jpg、bmp图片耗时对比3.2灰度化、阈值分割、膨胀腐蚀耗时对比 附录&#xff08;1&#xff09;imread函数以不同模式读取图片&#xff08;2&#xff09;OpenCV读取图片格式与PIL读取图片格…

【ubuntu20】--- 搭建 gerrit 最新最详细

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【ubuntu20】--- 搭建 gerrit 最新最详细…

制服小程序的“滑手”:禁用页面左右滑动全攻略

哈哈&#xff0c;看来你已经很聪明地发现了小程序中左右滑动的“顽皮”行为&#xff01;&#x1f604; 没错&#xff0c;我们可以通过设置 disableScroll 属性来“管教”它&#xff0c;同时结合 CSS 样式让页面既禁得住横向“乱跑”&#xff0c;又能顺畅地上下滚动。你的方案已…

ASP .NET Core 学习(.NET9)Serilog日志整合

Serilog 是一个功能强大的 .NET 日志库&#xff0c;以其简洁的配置和灵活的输出方式而受到开发者喜爱。支持多种日志输出目标&#xff08;如控制台、文件、数据库等&#xff09;&#xff0c;并且可以通过结构化日志的方式记录丰富的上下文信息&#xff0c;便于后续的日志分析和…

**NET400协议网关全系型号:多场景·全兼容工业物联解决方案**

行业痛点 工业现场需适配多样场景、差异化PLC协议、弹性扩展需求&#xff1a; 单一型号无法覆盖小规模车间到大型工厂的复杂组网&#xff1b;老旧系统升级需硬件兼容与数据平滑迁移&#xff1b;设备点位从数十到上千&#xff0c;需灵活选型控制成本。 NET400系列部分型号 按…