Linux MySQL 完整教程
本教程将引导您在 Linux 系统上完成 MySQL 的安装、配置、使用和管理,我们将以目前最流行的 Ubuntu/Debian 和 CentOS/RHEL 两大发行版为例进行讲解。
第一部分:安装 MySQL
1 在 Ubuntu/Debian 系统上安装
Ubuntu 和 Debian 使用 apt 包管理器。
步骤 1:更新软件包列表
sudo apt update
步骤 2:安装 MySQL 服务器
sudo apt install mysql-server
安装过程中,系统会自动启动 MySQL 服务。
步骤 3:安全配置(非常重要!) 安装完成后,运行安全脚本会帮助你:
- 设置 root 密码
- 移除匿名用户
- 禁止 root 远程登录
- 移除测试数据库
- 重新加载权限表,使更改生效
sudo mysql_secure_installation
按照屏幕提示一步步操作即可,对于新安装,建议对 VALIDATE PASSWORD COMPONENT 选择 Y (是) 并设置一个强密码策略。
2 在 CentOS/RHEL 系统上安装
CentOS 和 RHEL 使用 yum 或 dnf 包管理器(较新版本使用 dnf)。
步骤 1:下载并添加 MySQL 官方 Yum 仓库 MySQL 官方提供了 Yum 仓库,可以确保安装到最新最稳定的版本。
# 下载并添加 MySQL 官方仓库的 RPM 包 sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el8-7.noarch.rpm -y # 验证仓库是否已成功添加 sudo yum repolist enabled | grep ".*" | grep ".*.*"
步骤 2:安装 MySQL 服务器
sudo yum install mysql-community-server -y
步骤 3:启动并启用 MySQL 服务
# 启动 MySQL sudo systemctl start mysqld # 设置开机自启 sudo systemctl enable mysqld
步骤 4:安全配置 与 Ubuntu 类似,CentOS/RHEL 也提供安全配置脚本。 首次启动后,会在日志文件中生成一个临时 root 密码。
# 查看临时密码 sudo grep 'temporary password' /var/log/mysqld.log
然后运行安全配置脚本:
sudo mysql_secure_installation
输入你刚刚查到的临时密码,然后按照提示设置新密码、移除匿名用户等。
第二部分:连接与基本操作
1 连接到 MySQL 服务器
使用 mysql 客户端(推荐)
在终端中输入以下命令,如果安装在本机且用户是 root,可以直接登录。
# 本机登录,-p 表示需要密码 mysql -u root -p
然后输入你设置的 root 密码。
使用 MySQL Shell(更现代) MySQL Shell 是一个功能更强大的交互式客户端。
# 安装 MySQL Shell (Ubuntu/Debian) sudo apt install mysql-shell # 安装 MySQL Shell (CentOS/RHEL) sudo yum install mysql-shell # 连接 mysqlsh -u root -p
2 基本 SQL 命令
连接成功后,你会看到 mysql> 或 JS> 提示符。
显示所有数据库
SHOW DATABASES;
创建一个新数据库
CREATE DATABASE myapp_db;
选择要操作的数据库
USE myapp_db;
创建一个新表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
向表中插入数据
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com');
查询数据
SELECT * FROM users;
+----+----------+------------------+---------------------+
| id | username | email | created_at |
+----+----------+------------------+---------------------+
| 1 | alice | alice@example.com | 2025-10-27 10:30:00 |
| 2 | bob | bob@example.com | 2025-10-27 10:31:00 |
+----+----------+------------------+---------------------+
更新数据
UPDATE users SET email = 'alice.new@example.com' WHERE username = 'alice';
删除数据
DELETE FROM users WHERE username = 'bob';
退出 MySQL
EXIT;
第三部分:用户与权限管理
安全的关键在于为不同的应用分配不同的用户和权限。
1 创建新用户
在 MySQL 中,最好为每个应用创建一个独立的用户,而不是直接使用 root。
-- 连接到 MySQL mysql -u root -p -- 创建一个用户 'app_user',密码是 'StrongPassword123!',该用户只能从本机连接 CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
2 授予权限
权限授予遵循“最小权限原则”。
-- 授予 'app_user' 对 'myapp_db' 数据库的所有权限 GRANT ALL PRIVILEGES ON myapp_db.* TO 'app_user'@'localhost'; -- 授予 'app_user' 对所有数据库的特定权限(例如只读) GRANT SELECT ON *.* TO 'app_user'@'localhost'; -- 使权限更改立即生效 FLUSH PRIVILEGES;
常用权限说明:
ALL PRIVILEGES: 所有权限。SELECT: 只读权限。INSERT: 插入权限。UPDATE: 更新权限。DELETE: 删除权限。CREATE: 创建数据库、表、索引的权限。DROP: 删除数据库、表的权限。
3 撤销权限
REVOKE ALL PRIVILEGES ON myapp_db.* FROM 'app_user'@'localhost'; FLUSH PRIVILEGES;
第四部分:配置与优化
MySQL 的主要配置文件是 my.cnf(或 my.ini)。
1 找到配置文件
- Ubuntu/Debian:
/etc/mysql/mysql.conf.d/mysqld.cnf - CentOS/RHEL:
/etc/my.cnf或/etc/my.cnf.d/mysql-server.cnf
重要: 修改配置文件前,务必先备份!
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.bak
2 常用配置项
编辑配置文件(使用 sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf),找到 [mysqld] 部分。
-
修改字符集(防止中文乱码)
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci [client] default-character-set = utf8mb4
-
调整内存缓冲区大小(根据服务器内存调整)
[mysqld] # InnoDB 缓冲池大小,建议设置为系统内存的 50%-70% innodb_buffer_pool_size = 1G # 查询缓存(MySQL 8.0 已移除,旧版本可用) query_cache_size = 64M
3 应用配置更改
修改配置文件后,需要重启 MySQL 服务使更改生效。
# Ubuntu/Debian sudo systemctl restart mysql # CentOS/RHEL sudo systemctl restart mysqld
第五部分:备份与恢复
1 使用 mysqldump 备份数据库
mysqldump 是最常用的逻辑备份工具。
备份数据库
# 备份单个数据库 mysqldump -u root -p myapp_db > myapp_db_backup.sql # 备份所有数据库 mysqldump -u root -p --all-databases > all_databases_backup.sql # 备份并压缩(推荐) mysqldump -u root -p myapp_db | gzip > myapp_db_backup.sql.gz
恢复数据库
# 首先创建一个空数据库(如果不存在) mysql -u root -p -e "CREATE DATABASE myapp_db_restore;" # 从备份文件恢复 mysql -u root -p myapp_db_restore < myapp_db_backup.sql
2 使用二进制日志进行时间点恢复
这是更高级的恢复方式,需要先在配置文件中启用二进制日志。
[mysqld] log-bin=mysql-bin binlog_format=ROW
启用后,mysqldump 备份会包含二进制日志的位置信息,结合 mysqlbinlog 工具可以实现精确到秒的恢复。
第六部分:常见问题排查
1 如何查看 MySQL 是否正在运行?
# Ubuntu/Debian sudo systemctl status mysql # CentOS/RHEL sudo systemctl status mysqld
2 如何查看 MySQL 错误日志?
错误日志是排查问题的关键。
- Ubuntu/Debian:
/var/log/mysql/error.log - CentOS/RHEL:
/var/log/mysqld.log
# 实时查看错误日志 sudo tail -f /var/log/mysql/error.log
3 如何远程连接 MySQL 被拒绝?
-
检查防火墙:确保 3306 端口已开放。
# Ubuntu/Debian (使用 UFW) sudo ufw allow 3306/tcp # CentOS/RHEL (使用 firewalld) sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
-
检查用户权限:确认用户有从远程主机连接的权限。
-- 允许 'app_user' 从任何 IP 连接 CREATE USER 'app_user'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON myapp_db.* TO 'app_user'@'%'; FLUSH PRIVILEGES;
注意: 代表任何主机,在生产环境中存在安全风险,应指定具体的 IP 地址。
总结与进阶
本教程涵盖了 Linux 下 MySQL 的核心操作,要成为一名 MySQL 高手,建议您进一步学习:
- 索引优化:学习如何创建和使用索引来提升查询速度。
- 事务与锁:理解 ACID 特性、事务隔离级别和锁机制。
- 主从复制:实现 MySQL 的高可用和读写分离。
- 性能分析:使用
EXPLAIN命令分析查询计划,找出性能瓶颈。 - 分库分表:当单库数据量过大时,考虑进行水平或垂直拆分。
希望这份教程对您有帮助!祝您使用愉快!
