MySQL 安装配置
本章将介绍 MySQL 在不同操作系统上的安装方法和基本配置。
Windows 安装
方式一:安装包安装
- 下载 MySQL 安装包
访问 MySQL 官方下载页面,选择 Windows 版本下载。
- 运行安装程序
双击下载的 .msi 文件
选择安装类型:
- Developer Default(开发者默认):包含 MySQL Server、Workbench、Shell 等
- Server only:只安装 MySQL Server
- Custom:自定义安装组件
- 配置 MySQL Server
- 选择配置类型:Development Computer(开发机)
- 设置 root 密码
- 配置 Windows 服务(建议设置为自动启动)
- 完成安装
方式二:解压版安装
- 下载解压版
从官网下载 ZIP Archive 版本。
- 解压到目标目录
解压到:D:\mysql-8.0\
- 创建配置文件
在 MySQL 目录下创建 my.ini:
[mysqld]
# 设置端口
port=3306
# 设置安装目录
basedir=D:/mysql-8.0
# 设置数据目录
datadir=D:/mysql-8.0/data
# 最大连接数
max_connections=200
# 字符集
character-set-server=utf8mb4
# 存储引擎
default-storage-engine=INNODB
[client]
port=3306
default-character-set=utf8mb4
- 初始化数据库
# 以管理员身份运行 PowerShell
cd D:\mysql-8.0\bin
# 初始化(生成临时密码)
.\mysqld --initialize --console
# 记录输出的临时密码,例如:
# A temporary password is generated for root@localhost: Ab3#xYz9Kp
- 安装服务
# 安装 MySQL 服务
.\mysqld --install MySQL
# 启动服务
net start MySQL
- 修改密码
# 登录 MySQL
.\mysql -u root -p
# 输入临时密码后,修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
Linux 安装
Ubuntu/Debian
# 更新软件包列表
sudo apt update
# 安装 MySQL Server
sudo apt install mysql-server
# 启动 MySQL 服务
sudo systemctl start mysql
sudo systemctl enable mysql
# 运行安全配置脚本
sudo mysql_secure_installation
安全配置说明:
- 设置 root 密码强度策略
- 移除匿名用户
- 禁止 root 远程登录
- 删除测试数据库
- 重新加载权限表
CentOS/RHEL
# 添加 MySQL 仓库
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装 MySQL Server
sudo yum install mysql-server
# 启动 MySQL 服务
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 获取临时密码
sudo grep 'temporary password' /var/log/mysqld.log
# 登录并修改密码
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
Docker 安装
# 拉取 MySQL 镜像
docker pull mysql:8.0
# 运行 MySQL 容器
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_password \
-v mysql_data:/var/lib/mysql \
mysql:8.0
# 进入 MySQL 容器
docker exec -it mysql mysql -u root -p
Docker Compose 配置:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_password
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./my.cnf:/etc/mysql/conf.d/my.cnf
command: --default-authentication-plugin=mysql_native_password
volumes:
mysql_data:
macOS 安装
Homebrew 安装
# 安装 MySQL
brew install mysql
# 启动服务
brew services start mysql
# 安全配置
mysql_secure_installation
DMG 安装包
- 从官网下载 DMG 安装包
- 双击安装,按照向导完成安装
- 在系统偏好设置中配置 MySQL
配置文件详解
MySQL 配置文件通常位于:
- Windows:
my.ini或C:\ProgramData\MySQL\MySQL Server 8.0\my.ini - Linux:
/etc/mysql/my.cnf或/etc/my.cnf
常用配置项
[mysqld]
# 服务器 ID(用于复制)
server-id=1
# 端口
port=3306
# 绑定地址(0.0.0.0 表示所有网卡)
bind-address=0.0.0.0
# 数据目录
datadir=/var/lib/mysql
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 默认存储引擎
default-storage-engine=INNODB
# 最大连接数
max_connections=500
# 连接超时
wait_timeout=28800
interactive_timeout=28800
# 缓冲池大小(建议为物理内存的 70-80%)
innodb_buffer_pool_size=1G
# 日志配置
log-error=/var/log/mysql/error.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
# 二进制日志(用于复制和恢复)
log-bin=mysql-bin
binlog_format=ROW
expire_logs_days=7
# InnoDB 配置
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=50
[client]
port=3306
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
关键参数说明
| 参数 | 说明 | 建议值 |
|---|---|---|
max_connections | 最大连接数 | 500-2000 |
innodb_buffer_pool_size | InnoDB 缓冲池 | 物理内存的 70-80% |
innodb_log_file_size | 日志文件大小 | 256M-1G |
innodb_flush_log_at_trx_commit | 日志刷新策略 | 1(安全)或 2(性能) |
long_query_time | 慢查询阈值(秒) | 1-3 |
启动和停止服务
Windows
# 启动服务
net start MySQL
# 停止服务
net stop MySQL
# 重启服务
net stop MySQL; net start MySQL
# 或使用服务管理器
services.msc
Linux
# 启动服务
sudo systemctl start mysqld
# 停止服务
sudo systemctl stop mysqld
# 重启服务
sudo systemctl restart mysqld
# 查看状态
sudo systemctl status mysqld
# 设置开机自启
sudo systemctl enable mysqld
# 取消开机自启
sudo systemctl disable mysqld
连接 MySQL
命令行连接
# 本地连接
mysql -u root -p
# 指定主机和端口
mysql -h 192.168.1.100 -P 3306 -u root -p
# 指定数据库
mysql -u root -p mydb
# 使用配置文件连接
mysql --defaults-file=/path/to/my.cnf
命令行参数
| 参数 | 说明 |
|---|---|
-h | 主机地址 |
-P | 端口号 |
-u | 用户名 |
-p | 密码(交互式输入) |
-D | 数据库名 |
-e | 执行 SQL 语句 |
--defaults-file | 指定配置文件 |
示例
# 执行 SQL 语句后退出
mysql -u root -p -e "SELECT VERSION();"
# 导入 SQL 文件
mysql -u root -p mydb < backup.sql
# 导出数据库
mysqldump -u root -p mydb > backup.sql
常见问题解决
1. 忘记 root 密码
# 停止 MySQL 服务
sudo systemctl stop mysqld
# 以跳过权限表的方式启动
sudo mysqld_safe --skip-grant-tables &
# 无密码登录
mysql -u root
# 修改密码
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 重启服务
sudo systemctl restart mysqld
2. 无法远程连接
-- 检查用户权限
SELECT host, user FROM mysql.user;
-- 创建允许远程访问的用户
CREATE USER 'root'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
-- 或修改现有用户
UPDATE mysql.user SET host='%' WHERE user='root' AND host='localhost';
FLUSH PRIVILEGES;
检查防火墙:
# 开放 3306 端口
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
3. 字符集问题
-- 查看字符集设置
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
-- 修改数据库字符集
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改表字符集
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4. 连接数过多
-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';
SHOW PROCESSLIST;
-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';
-- 临时修改最大连接数
SET GLOBAL max_connections=1000;
-- 永久修改需要在配置文件中设置
小结
本章我们学习了:
- Windows、Linux、macOS 上安装 MySQL
- Docker 方式安装 MySQL
- 配置文件详解和常用参数
- 服务的启动和停止
- 连接 MySQL 的方法
- 常见问题的解决
练习
- 在本地环境安装 MySQL
- 修改 root 密码并创建新用户
- 配置 MySQL 允许远程连接
- 查看并理解各项配置参数的含义