1. 为什么选择在Linux上安装MySQL?
作为一个从Windows转向Linux开发的程序员,我花了三年时间才真正理解为什么企业级数据库首选Linux环境。MySQL在Linux上的性能表现通常比Windows高出15-30%,特别是在高并发场景下,这种差异源自两个系统的内核架构差异。
Linux的进程调度器(CFS)对数据库工作负载更友好,其I/O栈没有Windows那样的层层抽象。我曾用sysbench做过测试:相同配置的阿里云ECS上,Linux的QPS能达到Windows的1.8倍。更不用说Linux占用的内存更少——同样的MySQL实例,Windows版常驻内存要多出200-300MB。
重要提示:生产环境强烈建议选择Linux发行版的LTS版本,如Ubuntu 22.04 LTS或RHEL 9。非LTS版本可能遇到依赖库兼容性问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的环境准备
2.1 选择适合的Linux发行版
不同发行版的MySQL安装方式差异很大。以最常见的Ubuntu和CentOS为例:
| 发行版 | 包管理器 | 默认软件源版本 | 推荐安装方式 |
|---|---|---|---|
| Ubuntu | apt | 较新(如8.0) | apt官方仓库 |
| CentOS | yum | 较旧(如5.7) | 添加MySQL官方repo |
| Arch Linux | pacman | 最新 | AUR或手动编译 |
我推荐新手从Ubuntu开始,它的文档最丰富且社区支持最好。曾经在CentOS 7上遇到glibc版本不兼容的问题,最后不得不重新编译MySQL,花了整整一天时间。
2.2 硬件资源检查
在AWS t2.micro实例(1核1G)上安装MySQL 8.0的惨痛教训让我明白:至少需要以下配置:
- 2核CPU(避免查询阻塞)
- 4GB内存(innodb_buffer_pool_size建议设为总内存的50-70%)
- 20GB磁盘空间(考虑binlog和慢查询日志)
用这些命令快速检查资源:
bash复制free -h # 查看内存
df -h / # 查看磁盘
nproc # 查看CPU核心数
3. 三种主流安装方式详解
3.1 使用系统包管理器安装(推荐新手)
Ubuntu/Debian系:
bash复制sudo apt update
sudo apt install mysql-server -y
sudo systemctl start mysql
CentOS/RHEL系:
bash复制sudo yum install mysql-server
sudo systemctl start mysqld
注意:CentOS 8开始默认使用dnf而不是yum,但命令格式相同。安装后一定要运行
sudo mysql_secure_installation进行安全加固。
3.2 通过官方APT/YUM仓库安装(推荐生产环境)
MySQL官方提供了针对各发行版的仓库,可以获取最新版本。以Ubuntu为例:
bash复制# 下载仓库配置
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
# 安装
sudo apt update
sudo apt install mysql-server
这种方式可以方便地选择具体版本(如5.7/8.0),还能自动处理依赖关系。我在部署HA集群时,用这种方法统一了10台服务器的MySQL版本。
3.3 手动编译安装(适合特定需求)
当需要自定义编译参数(如特定字符集)时,可以手动编译。以MySQL 8.0.33为例:
bash复制wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33.tar.gz
tar xvf mysql-8.0.33.tar.gz
cd mysql-8.0.33
# 安装依赖
sudo apt install build-essential cmake libssl-dev libncurses5-dev
# 编译配置
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/var/lib/mysql \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
make -j$(nproc)
sudo make install
编译安装虽然灵活,但容易踩坑。有一次我忘记安装libaio-dev,导致编译通过但运行时崩溃,排查了3小时才发现问题。
4. 安装后的关键配置
4.1 安全初始化
无论哪种安装方式,都必须执行:
bash复制sudo mysql_secure_installation
这个脚本会:
- 设置root密码(8.0后默认可能没有密码)
- 移除匿名用户
- 禁止root远程登录
- 移除test数据库
- 重载权限表
血泪教训:曾经有台测试服务器没运行这个脚本,结果被黑客扫描到并植入挖矿程序。
4.2 调整基础配置
编辑/etc/mysql/my.cnf(或/etc/my.cnf),添加:
ini复制[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default_authentication_plugin=mysql_native_password
# 内存配置(按实际调整)
innodb_buffer_pool_size=2G
innodb_log_file_size=256M
# 连接配置
max_connections=200
wait_timeout=300
改完配置后需要重启:
bash复制sudo systemctl restart mysql
5. 常见问题排查指南
5.1 无法启动:端口冲突
错误日志显示:
code复制Can't start server: Bind on TCP/IP port: Address already in use
解决方法:
bash复制sudo netstat -tulnp | grep 3306 # 查看谁占用了端口
# 如果是旧MySQL进程:
sudo kill -9 <PID>
# 如果是其他程序,修改my.cnf中的端口号
5.2 忘记root密码
- 停止MySQL服务
- 启动免认证模式:
bash复制sudo mysqld_safe --skip-grant-tables &
- 连接并修改密码:
sql复制FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
- 重启正常模式
5.3 性能调优建议
- 使用mysqlslap进行基准测试:
bash复制mysqlslap --user=root --password --concurrency=100 --iterations=10 --auto-generate-sql
- 监控工具推荐:
- mytop(类似top的MySQL监控)
- pt-query-digest(分析慢查询)
6. 开发环境便捷配置
6.1 创建开发用户
避免直接使用root:
sql复制CREATE USER 'dev'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
6.2 常用管理命令
bash复制# 查看运行状态
sudo systemctl status mysql
# 启停服务
sudo systemctl start|stop|restart mysql
# 查看错误日志
sudo tail -f /var/log/mysql/error.log
# 命令行连接
mysql -u root -p
7. 进阶:容器化部署方案
对于现代开发环境,可以考虑Docker部署:
bash复制docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-p 3306:3306 \
-v /path/to/data:/var/lib/mysql \
-d mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
容器化的优势在于环境隔离和快速部署,但要注意数据持久化(-v参数)和性能开销。我在CI/CD流水线中大量使用这种方案,比传统安装快10倍以上。
8. 个人实战经验总结
-
版本选择:新项目直接用MySQL 8.0,老项目升级前用
mysql_upgrade工具检查兼容性 -
备份策略:安装后立即设置cron定时任务:
bash复制# 每天凌晨全量备份
0 3 * * * /usr/bin/mysqldump -u root -p密码 --all-databases | gzip > /backups/mysql_$(date +\%Y\%m\%d).sql.gz
-
监控报警:建议安装Prometheus + mysqld_exporter,监控关键指标:
- QPS/TPS
- 连接数
- 缓冲池命中率
-
学习资源推荐:
- 官方文档:https://dev.mysql.com/doc/
- 高性能MySQL(第4版)
- Percona博客
