2025年05月最新!MySQL开源项目在Azure VM的实践指南

云信安装大师
90
AI 质量分
10 5 月, 2025
3 分钟阅读
0 阅读

2025年05月最新!MySQL开源项目在Azure VM的实践指南

引言

MySQL作为最流行的开源关系型数据库之一,在云环境中的部署需求日益增长。本文将详细介绍如何在Azure虚拟机上部署最新版MySQL(2025年5月版本),包括从VM创建到MySQL配置的全过程。无论你是开发者还是系统管理员,这篇指南都能帮助你快速搭建生产可用的MySQL环境。

准备工作

在开始之前,请确保:
1. 拥有有效的Azure订阅
2. 安装最新版Azure CLI(建议版本2.55+)
3. 准备SSH密钥对(用于安全连接VM)
4. 确定所需的VM规格(本文以StandardD4sv5为例)

第一步:创建Azure虚拟机

1.1 登录Azure并设置默认订阅

代码片段
az login
az account set --subscription "你的订阅名称"

1.2 创建资源组

代码片段
az group create --name MySQLRG --location eastus2

1.3 创建Ubuntu Server VM(2025年LTS版本)

代码片段
az vm create \
    --resource-group MySQLRG \
    --name MySQLVM \
    --image Ubuntu2204 \
    --size Standard_D4s_v5 \
    --admin-username azureuser \
    --ssh-key-values ~/.ssh/id_rsa.pub \
    --public-ip-sku Standard \
    --os-disk-size-gb 100 \
    --data-disk-sizes-gb 200 \
    --storage-sku Premium_LRS

参数说明:
--data-disk-sizes-gb: 为MySQL数据单独挂载200GB高性能磁盘
--storage-sku Premium_LRS: 使用高性能SSD存储

第二步:连接到VM并准备环境

2.1 SSH连接到虚拟机

代码片段
ssh azureuser@<你的VM公网IP>

2.2 更新系统并安装必要工具

代码片段
sudo apt update && sudo apt upgrade -y
sudo apt install -y wget gnupg lsb-release

第三步:安装MySQL Server(2025最新版)

3.1 添加官方MySQL APT仓库

代码片段
wget https://dev.mysql.com/get/mysql-apt-config_0.8.28-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.28-1_all.deb

注意:
选择”MySQL Server & Cluster”和最新的8.0.x系列(2025年5月版本)

3.2 安装MySQL Server

代码片段
sudo apt update
sudo apt install -y mysql-server mysql-client

3.3 验证安装

代码片段
systemctl status mysql.service
mysql --version

第四步:配置MySQL最佳实践

4.1 MySQL安全初始化

代码片段
sudo mysql_secure_installation

按照提示设置root密码并移除测试数据库等不安全配置。

4.2 MySQL性能优化配置

编辑配置文件:

代码片段
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

添加/修改以下参数:

代码片段
[mysqld]
# General配置
datadir=/var/lib/mysql/data   # MySQL数据目录改到数据盘上(稍后挂载)
socket=/var/run/mysqld/mysqld.sock

# InnoDB配置(针对200GB内存的D4s_v5 VM优化)
innodb_buffer_pool_size=12G   # RAM的60%
innodb_log_file_size=2G       # Redo日志大小优化写性能
innodb_flush_method=O_DIRECT  
innodb_thread_concurrency=16  

# Connection配置(针对多应用连接场景)
max_connections=500           
thread_cache_size=32          
table_open_cache=4000         

# Query缓存(根据应用特点调整)
query_cache_type=1           
query_cache_size=256M        
query_cache_limit=4M         

# Logging配置(可选)
slow_query_log=1             
long_query_time=2            
log_queries_not_using_indexes=1  

4.3 MySQL数据目录迁移到独立数据盘

(1)格式化并挂载数据盘:

代码片段
sudo mkfs.ext4 /dev/sdc   # Azure数据盘通常是/dev/sdc或/dev/sdb,请确认实际设备名!
sudo mkdir /var/lib/mysql/data  
sudo mount /dev/sdc /var/lib/mysql/data  
echo "/dev/sdc /var/lib/mysql/data ext4 defaults,nofail,noatime,nodiratime,barrier=0,data=writeback,discard,errors=remount-ro,x-systemd.device-timeout=30s,x-systemd.mount-timeout=30s,_netdev,commit=60,stripe=64,inode_readahead_blks=32,delalloc,lazytime,journal_async_commit,journal_checksum,journal_ioprio_class_realtime,journal_ioprio_level7,data_err=none,nobarrier,nodatacow,noacl,nouser_xattr,nosuid,nodev,nofail" | sudo tee -a /etc/fstab  
sudo chown -R mysql:mysql /var/lib/mysql/data  

(2)迁移现有数据:

代码片段
sudo systemctl stop mysql  
sudo rsync -av /var/lib/mysql/ /var/lib/mysql/data/  
sudo mv /var/lib/mysql /var/lib/mysql.bak  
sudo ln -s /var/lib/mysql/data /var/lib/mysql  
sudo systemctl start mysql  

第五步:网络与安全配置

Azure网络安全组规则添加:

回到本地终端执行:

代码片段
az network nsg rule create \ 
    --resource-group MySQLRG \ 
    --nsg-name MySQLVMNSG \ 
    --name Allow-MySQL \ 
    --access Allow \ 
    --protocol Tcp \ 
    --direction Inbound \ 
    --priority 1000 \ 
    --source-address-prefixes "客户端IP地址" \ 
    --source-port-range "*" \ 
    --destination-port-range "3306"

安全建议:
生产环境应使用VPN或Private Link而非公网暴露3306端口!
强烈建议启用SSL连接和防火墙规则限制源IP。

MySQL用户与权限管理最佳实践示例:

连接到MySQL:

代码片段
mysql -u root -p  

执行以下SQL:

代码片段
-- (1)创建应用专用用户(不要使用root!)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'ComplexPassword123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'%';

-- (2)创建只读监控用户(用于Prometheus等监控工具)
CREATE USER 'monitor'@'10.%' IDENTIFIED BY 'MonitorPass456!';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'monitor'@'10.%';
GRANT SELECT ON performance_schema.* TO 'monitor'@'10.%';

-- (3)启用SSL连接要求(增强安全性)
ALTER USER 'appuser'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;

Azure备份策略配置示例:

为保障数据安全,建议设置自动备份策略:

代码片段
az backup vault create \ 
    --resource-group MySQLRG \ 
    --name MySQLBackupVault \ 
    --location eastus2 

az backup policy create \ 
    --resource-group MySQLRG \ 
    --vault-name MySQLBackupVault \ 
    --name DailyMySQLBackupPolicy \ 
    --backup-management-type AzureIaasVM \ 
    --policy '{ "properties": { "schedulePolicy": { "scheduleRunFrequency": "Daily", "scheduleRunTimes": ["02:00"], "scheduleRunDays": null }, "retentionPolicy": { "retentionPolicyType": "LongTermRetentionPolicy", "dailySchedule": { "retentionTimes": ["02:00"], "retentionDuration": { "count":30,"durationType":"Days" } } } } }'

az backup protection enable-for-vm \ 
    --resource-group MySQLRG \ 
    --vault-name MySQLBackupVault \  
    --vm $(az vm show -g MySQLRG -n MySQLVM –query id -o tsv) \
    --policy-name DailyMySQLBackupPolicy  

VM自动扩展设置(应对流量高峰):

“`bash
az vmss create \
–resource-group MySQLRG \
–name MySQLElasticPool \
–image Ubuntu2204 \
–vm-sku StandardD4sv5 \
–instance-count 2 \
–admin-username azureuser \
–ssh-key-values ~/.ssh/id_rsa.pub

az monitor autoscale create \
–resource-group MySQLRG \
–resource MySQLElasticPool \
–resource-type virtualMachineScaleSets \
–name autoscale-mysql-cpu80pct \
–min-count 2 \
–max-count

原创 高质量