在 Linux 系统下使用 MySQL 是后端开发和运维的必备技能,这篇教程涵盖了从安装、基础操作到权限管理的全流程,适用于主流的 Linux 发行版(如 CentOS/RHEL 和 Ubuntu/Debian)。

第一部分:安装 MySQL
根据你的 Linux 发行版选择对应的命令。
Ubuntu / Debian 系统
# 1. 更新软件包列表 sudo apt update # 2. 安装 MySQL 服务器 sudo apt install mysql-server -y # 3. 启动服务并设置开机自启 sudo systemctl start mysql sudo systemctl enable mysql
CentOS / RHEL / Fedora 系统
CentOS 7/8 默认源可能是 MariaDB,如果需要安装官方 MySQL,建议按以下步骤:
# 1. 下载并安装 MySQL 官方 Yum Repository # (以 CentOS 7 为例,其他版本请去官网查看对应链接) wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm # 2. 安装 MySQL sudo yum install mysql-community-server -y # 3. 启动服务并设置开机自启 sudo systemctl start mysqld sudo systemctl enable mysqld
第二部分:安全配置 (初始化)
安装完成后,必须运行安全脚本来移除测试数据库、设置 root 密码等。
获取临时密码 (仅限 CentOS/RHEL)
CentOS 安装后会生成一个默认密码,必须先查看:

# 查看临时密码 sudo grep 'temporary password' /var/log/mysqld.log
如果是 Ubuntu,通常默认 root 用户通过 sudo 免密登录,可以跳过此步直接运行下面的安全配置。
运行安全配置脚本
sudo mysql_secure_installation
脚本交互流程:
- Enter password: 输入 root 密码(Ubuntu 可能直接回车,CentOS 输入上一步查到的密码)。
- Set root password? 输入
Y,设置你的新密码(务必记住)。 - Remove anonymous users? 输入
Y(移除匿名用户)。 - Disallow root login remotely? 输入
Y(禁止 root 远程登录,更安全)。 - Remove test database? 输入
Y(删除测试库)。 - Reload privilege tables now? 输入
Y(刷新权限)。
第三部分:基础操作命令
登录 MySQL
mysql -u root -p # 输入密码后回车
常用服务管理命令
# 查看状态 sudo systemctl status mysql # Ubuntu sudo systemctl status mysqld # CentOS # 重启 sudo systemctl restart mysql # 停止 sudo systemctl stop mysql
第四部分:SQL 基础语法 (DDL & DML)
登录进 MySQL 命令行(mysql>)后,使用以下命令。
数据库操作
-- 显示所有数据库 SHOW DATABASES; -- 创建数据库 (utf8mb4 支持表情符号) CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 切换/使用数据库 USE mydb; -- 删除数据库 DROP DATABASE mydb;
数据表操作
-- 创建表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 查看表结构
DESC users;
-- 查看所有表
SHOW TABLES;
-- 删除表
DROP TABLE users;
数据增删改查 (CRUD)
-- 插入数据
INSERT INTO users (username, email) VALUES ('zhangsan', 'zhang@example.com');
-- 查询数据
SELECT * FROM users;
SELECT * FROM users WHERE id = 1;
-- 更新数据
UPDATE users SET email = 'new_email@test.com' WHERE username = 'zhangsan';
-- 删除数据
DELETE FROM users WHERE id = 1;
第五部分:用户与权限管理 (关键)
在生产环境中,不要一直使用 root 账户,你需要创建特定用户并赋予权限。
创建新用户
-- 创建用户 'devuser' 允许从任何 IP 登录 (%),并设置密码 CREATE USER 'devuser'@'%' IDENTIFIED BY 'YourStrongPassword123!';
注意:'devuser'@'localhost' 表示只能本地登录;'devuser'@'%' 表示允许远程登录。
授予权限
-- 授予 devuser 在 mydb 数据库的所有权限 GRANT ALL PRIVILEGES ON mydb.* TO 'devuser'@'%'; -- 如果想授予所有数据库的权限(不推荐): -- GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'%'; -- 刷新权限 (使更改立即生效) FLUSH PRIVILEGES;
查看与撤销权限
-- 查看用户权限 SHOW GRANTS FOR 'devuser'@'%'; -- 撤销权限 REVOKE ALL PRIVILEGES ON mydb.* FROM 'devuser'@'%';
第六部分:配置与远程访问 (进阶)
默认情况下,MySQL 为了安全,只监听 0.0.1 (本地),如果你需要用 Navicat 或 DBeaver 从 Windows 电脑连接 Linux 上的 MySQL,需要修改配置。
修改绑定地址
找到配置文件:
- Ubuntu:
/etc/mysql/mysql.conf.d/mysqld.cnf - CentOS:
/etc/my.cnf
使用 sudo vim 编辑文件,找到:
bind-address = 127.0.0.1
改为:
bind-address = 0.0.0.0
保存并退出,然后重启 MySQL 服务。
防火墙设置
确保 Linux 防火墙开放了 3306 端口。
Ubuntu (UFW):
sudo ufw allow 3306/tcp sudo ufw reload
CentOS (Firewalld):
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
云服务器安全组
如果你用的是阿里云、腾讯云或 AWS,还需要去网页控制台的安全组规则里,放行 TCP 协议的 3306 端口。
第七部分:备份与还原
在 Linux Shell (终端) 下执行,不是在 mysql> 里面执行。
备份
# 备份单个数据库 mysqldump -u root -p mydb > mydb_backup.sql # 备份所有数据库 mysqldump -u root -p --all-databases > all_db_backup.sql
还原
# 还原数据库 (需先创建空数据库) mysql -u root -p mydb < mydb_backup.sql
常见问题排查
- 忘记 Root 密码怎么办?
- 需要修改
/etc/my.cnf添加skip-grant-tables跳过权限验证启动,进入后修改mysql库下的user表,然后刷新权限,修复后记得去掉该配置并重启。
- 需要修改
- 报错 "Access denied for user 'root'@'localhost'"
- 可能是密码输错,或者 root 的 plugin 是
auth_socket(Ubuntu 默认),需要将其改为mysql_native_password。
- 可能是密码输错,或者 root 的 plugin 是
- 中文乱码
- 确保数据库创建时指定了
utf8mb4,并且表的字符集也是utf8mb4,可以使用SHOW VARIABLES LIKE 'char%';查看当前字符集设置。
- 确保数据库创建时指定了
