一、Ubuntu / Debian(apt)
# 更新源
sudo apt update
# 安装(默认是系统自带版本,通常是 8.x)
sudo apt install mysql-server -y
# 安装后初始化(生产环境必须跑)
sudo mysql_secure_installation
启动 & 开机自启:
sudo systemctl start mysql
sudo systemctl enable mysql
sudo systemctl status mysql
验证:
mysql --version
⚠️ Ubuntu/Debian 默认装的 MySQL 版本取决于仓库新旧。如果想要最新版 8.0 或 9.x,用下面”官方 APT 源”方式。
二、CentOS / RHEL / Rocky / AlmaLinux(yum/dnf)
# CentOS 8 / Rocky / AlmaLinux / RHEL 8+(用 dnf,yum 是别名)
sudo dnf install mysql-server -y
# CentOS 7(用 yum)
sudo yum install mysql-server -y
# 安装后初始化
sudo mysql_secure_installation
启动 & 开机自启:
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld
验证:
mysql --version
三、官方 APT/YUM 源安装指定版本(推荐)
系统自带仓库版本通常偏低,用官方源可以装最新稳定版或指定 8.0/9.x。
3.1 Ubuntu(APT)
# 下载官方 APT 配置文件(选一个版本)
# MySQL 9.x(最新)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
# MySQL 8.0
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
# 安装配置包(会弹出交互界面选版本,选完确认)
sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb
# 更新源并安装
sudo apt update
sudo apt install mysql-server -y
# 初始化
sudo mysql_secure_installation
安装时如果遇到交互界面,用方向键选 MySQL 版本,回车确认。
3.2 CentOS/RHEL(YUM)
# 下载官方 RPM 包
sudo yum install https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
# 安装(会自动安装最新版 8.4 LTS 或 9.x)
sudo yum install mysql-community-server -y
# 如果想装指定版本,先禁用所有,再启用目标版本:
sudo dnf module disable mysql # 禁用系统默认
sudo dnf install mysql-community-server -y
# 启动 & 初始化
sudo systemctl start mysqld
sudo mysql_secure_installation
注意: 首次启动时 MySQL 会生成临时 root 密码,查看方式:
sudo grep 'temporary password' /var/log/mysqld.log
四、压缩包二进制安装(Linux)
适用于:不想用包管理器、需要在同一台机器装多个实例、或者 root 权限受限时。
4.1 下载
去 https://dev.mysql.com/downloads/mysql/ 选择:
- Linux - Generic → 选择操作系统版本(多数选 “Linux - Generic” x86_64)
- 下载 glibc 2.17 或对应系统的 tar.gz 包(不要下 rpm)
4.2 安装依赖
# Ubuntu / Debian
sudo apt install libaio1 libncurses5 -y
# CentOS / RHEL
sudo yum install libaio numactl-libs -y
4.3 解压到目标目录
tar -zxvf mysql-9.1.0-linux-glibc2.17-x86_64.tar.gz
sudo mv mysql-9.1.0-linux-glibc2.17-x86_64 /usr/local/mysql
4.4 创建用户和数据目录
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /usr/local/mysql/data /usr/local/mysql/log
sudo chown -R mysql:mysql /usr/local/mysql
4.5 初始化
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
初始化后会输出临时 root 密码,记录下来。
4.6 配置 my.cnf
sudo tee /etc/my.cnf << 'EOF'
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/log/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid
EOF
4.7 注册 systemd 服务
sudo tee /etc/systemd/system/mysqld.service << 'EOF'
[Unit]
Description=MySQL Server
Documentation=https://dev.mysql.com/doc/refman/en/
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
Restart=on-failure
RestartSec=10s
User=mysql
Group=mysql
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
软链接方便调用:
sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
五、Docker 方式(最干净)
# 下载最新版镜像
docker pull mysql:latest
# 启动(首次会自动初始化)
docker run -d --name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_strong_password \
-e MYSQL_DATABASE=app \
mysql:latest
# 查看日志获取临时密码
docker logs mysql 2>&1 | grep "temporary password"
# 进入容器连接
docker exec -it mysql mysql -u root -p
持久化数据(必须):
docker run -d --name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_strong_password \
-v /path/to/mysql-data:/var/lib/mysql \
mysql:latest
六、Windows(开发/测试用)
6.1 安装包方式(MSI)
- 下载:https://dev.mysql.com/downloads/installer/
- 运行安装包,选择 “Full” 或 “Server only”
- 按向导一路 Next,设好 root 密码
- 安装完成后打开 MySQL Workbench 或命令行客户端
6.2 压缩包方式(zip)
- 下载:https://dev.mysql.com/downloads/mysql/ → 选 Windows (x86, 64-bit), ZIP Archive
- 解压到
C:\mysql - 创建配置文件
C:\mysql\my.ini:[mysqld] basedir=C:\\mysql datadir=C:\\mysql\\data port=3306 - 命令行初始化(首次必须):
cd C:\mysql\bin mysqld --initialize --console - 注册服务:
mysqld --install MySQL --defaults-file=C:\mysql\my.ini - 启动服务:
net start MySQL - 登录(用初始化时生成的临时密码):
mysql -u root -p
⚠️ Windows 版仅建议开发测试,生产环境用 Linux。
七、初始化后的安全配置
首次装完必须跑(不管哪种安装方式):
sudo mysql_secure_installation
交互式完成以下设置:
√ 设置 root 密码(或确认现有密码)
√ 移除匿名用户
√ 禁止 root 远程登录
√ 删除 test 数据库
√ 刷新权限
八、常用命令速查
8.1 连接 MySQL
# 本地连接(socket 或 127.0.0.1)
mysql -u root -p
# 指定 host 和端口
mysql -h 192.168.1.100 -P 3306 -u root -p
# Docker 容器内连接
docker exec -it mysql mysql -u root -p
8.2 数据库操作
-- 查看所有数据库
SHOW DATABASES;
-- 创建数据库
CREATE DATABASE app_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 切换数据库
USE app_db;
-- 删除数据库(危险!)
DROP DATABASE app_db;
8.3 用户 & 权限
-- 创建用户
CREATE USER 'app'@'localhost' IDENTIFIED BY 'StrongPass123!';
-- 创建可远程访问的用户
CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPass123!';
-- 授权
GRANT ALL PRIVILEGES ON app_db.* TO 'app'@'localhost';
GRANT SELECT, INSERT ON app_db.* TO 'readonly_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 查看用户权限
SHOW GRANTS FOR 'app'@'localhost';
8.4 服务管理
# apt/yum 安装
sudo systemctl start mysql # 启动
sudo systemctl stop mysql # 停止
sudo systemctl restart mysql # 重启
sudo systemctl status mysql # 状态
# 二进制安装
sudo /usr/local/mysql/support-files/mysql.server start
sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server restart
# 查看版本
mysql --version
mysqld --version
8.5 日志 & 状态
# 查看 MySQL 状态(连接数、QPS、缓存命中率等)
mysqladmin -u root -p status
# 查看所有变量
SHOW VARIABLES;
SHOW VARIABLES LIKE 'max_connections';
# 查看运行线程
SHOW PROCESSLIST;
# 查看慢查询日志配置
SHOW VARIABLES LIKE 'slow_query%';
# 二进制安装的日志位置(默认)
# /var/log/mysqld.log (yum 安装)
# /usr/local/mysql/log/ (编译安装)
8.6 备份 & 恢复
# 备份(所有数据库)
mysqldump -u root -p --all-databases > backup_all.sql
# 备份单个数据库
mysqldump -u root -p app_db > backup_app_db.sql
# 备份指定表
mysqldump -u root -p app_db users orders > backup_tables.sql
# 恢复
mysql -u root -p < backup_all.sql
mysql -u root -p app_db < backup_app_db.sql
九、常见问题 & 解决方案
| # | 问题 | 原因 | 解决 |
|---|---|---|---|
| 1 | 登录报错 Access denied for user 'root'@'localhost' | 密码错误或认证插件问题 | sudo mysql(Debian 系免密)直接进;或查 /var/log/mysqld.log 临时密码;或重置密码 |
| 2 | 忘记 root 密码 | — | 停服务 → --skip-grant-tables 启动 → 无密码登录 → ALTER USER 重置密码 → 重启 |
| 3 | 端口 3306 被占用 | 其他 MySQL 实例或 MariaDB 占用了 3306 | sudo lsof -i :3306 查进程;MariaDB 默认也用 3306,可停掉或改 MySQL 端口 |
| 4 | 初始化报错 FATAL ERROR: cannot find libaio | 缺少 libaio 依赖 | 见上文”安装依赖”章节 |
| 5 | mysqld: ready for connections 但连不上 | 防火墙拦了 3306 或绑定了 127.0.0.1 | sudo firewall-cmd --add-port=3306/tcp --permanent && firewall-cmd --reload;检查 bind-address=0.0.0.0 |
| 6 | Docker 容器启动后立刻 exit | 数据目录权限或配置文件问题 | docker logs mysql 看错误日志;多数是宿主机目录权限不够 |
| 7 | 中文乱码 | 字符集配置不对 | my.cnf 的 [mysqld] 下加 character-set-server=utf8mb4 + [mysql] 下加 default-character-set=utf8mb4 |
| 8 | max_connections 不够用 | 连接数超限 | 临时:SET GLOBAL max_connections=500;永久:my.cnf 里加 max_connections=500 |
| 9 | 升级 MySQL 后启动失败 | 数据字典不兼容 | 升级前先备份;MySQL 9.x 不支持从太老的版本直接升级,先升到 8.0 再升 9.x |
| 10 | Windows zip 版 mysqld 不是内部命令 | 没有 cd 到 bin 目录或没有管理员权限 | 用完整路径 C:\mysql\bin\mysqld.exe;右键用”管理员身份运行”CMD |
| 11 | mysql_secure_installation 报错 can't connect to local MySQL server | MySQL 服务没启动 | sudo systemctl start mysql 先把服务跑起来 |
| 12 | Too many connections | 并发连接超过 max_connections | 紧急:mysqladmin -u root -p processlist 查谁占着连接;调大 max_connections |
| 13 | Table is marked as crashed | 意外关闭导致表损坏 | REPAIR TABLE table_name;;或 myisamchk -r /path/to/table.MYI(MyISAM 引擎) |
十、配置参考(生产环境关键参数)
在 my.cnf 的 [mysqld] 下添加:
[mysqld]
# 基础
bind-address = 0.0.0.0
port = 3306
max_connections = 500
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# InnoDB(缓冲池大小,生产环境设为本机内存的 60-70%)
innodb_buffer_pool_size = 2G
# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# 二进制日志(主从复制/数据恢复必备)
log_bin = /var/log/mysql/mysql-bin
expire_logs_days = 7
# 允许大小写不敏感(Windows 必须设为 1)
lower_case_table_names = 1
十一、快速验证清单
# 1. 服务状态
sudo systemctl status mysql # 或 docker ps
# 2. 版本确认
mysql --version
# 3. 连接测试
mysql -u root -p -e "SELECT VERSION();"
# 4. 安全初始化
mysql_secure_installation
# 5. 查看默认数据库
mysql -u root -p -e "SHOW DATABASES;"
全部通过即可投入使用。