Linux环境下,MySQL命令是数据库管理、操作的核心工具,涵盖从服务管理到数据查询、用户权限配置等全流程操作,以下从基础到进阶,详细梳理常用命令及使用场景,并结合表格归纳关键操作。

MySQL服务管理
在Linux中,MySQL服务通常通过systemctl或service命令管理,前提是已安装MySQL服务器(如mysql-server包)。
- 启动服务
systemctl start mysqld # CentOS/RHEL系统 service mysql start # Debian/Ubuntu系统(需安装mysql-server)
- 停止服务
systemctl stop mysqld service mysql stop
- 重启服务
systemctl restart mysqld service mysql restart
- 设置开机自启
systemctl enable mysqld
- 查看服务状态
systemctl status mysqld
登录与退出MySQL
- 登录MySQL(需输入密码,root用户初始密码可能通过
sudo grep 'temporary password' /var/log/mysqld.log查看)mysql -u root -p
- 登录后指定数据库
mysql -u root -p test_db
- 退出MySQL
exit; quit; \q
数据库操作
创建数据库
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CHARACTER SET指定字符集,utf8mb4支持emoji和特殊字符;COLLATE指定排序规则。
查看数据库列表
SHOW DATABASES;
选择数据库
USE db_name;
删除数据库
DROP DATABASE db_name;
数据库操作命令速查
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 创建数据库 | CREATE DATABASE db_name; | 默认字符集latin1 |
| 查看当前数据库 | SELECT DATABASE(); | 返回当前使用的数据库名 |
| 修改数据库字符集 | ALTER DATABASE db_name CHARSET utf8mb4; | 修改已存在数据库的字符集 |
数据表操作
创建数据表
CREATE TABLE table_name (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT DEFAULT 18,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);AUTO_INCREMENT:自增主键;NOT NULL:字段非空;DEFAULT:默认值;TIMESTAMP:自动记录时间。
查看数据表列表
SHOW TABLES;
查看表结构
DESC table_name; SHOW COLUMNS FROM table_name;
修改表结构
- 添加字段:
ALTER TABLE table_name ADD COLUMN email VARCHAR(100); - 修改字段类型:
ALTER TABLE table_name MODIFY COLUMN age SMALLINT; - 删除字段:
ALTER TABLE table_name DROP COLUMN email; - 重命名字段:
ALTER TABLE table_name CHANGE COLUMN old_name new_name VARCHAR(50);
删除数据表
DROP TABLE table_name;
数据表操作命令速查
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 创建带索引的表 | CREATE TABLE table_name (id INT, INDEX idx_id (id)); | 为id字段创建普通索引 |
| 查看表创建语句 | SHOW CREATE TABLE table_name; | 返回建表SQL语句 |
| 清空表数据(保留结构) | TRUNCATE TABLE table_name; | 比DELETE更快,不可回滚 |
数据操作(CRUD)
插入数据(INSERT)
INSERT INTO table_name (name, age) VALUES ('Alice', 25), ('Bob', 30);查询数据(SELECT)
- 基础查询:
SELECT * FROM table_name; - 条件查询:
SELECT * FROM table_name WHERE age > 20; - 模糊查询:
SELECT * FROM table_name WHERE name LIKE 'A%'; - 排序:
SELECT * FROM table_name ORDER BY age DESC; - 聚合函数:
SELECT COUNT(*) FROM table_name;
更新数据(UPDATE)
UPDATE table_name SET age = 26 WHERE name = 'Alice';
删除数据(DELETE)
DELETE FROM table_name WHERE age < 18;
数据操作命令速查
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 插入查询结果 | INSERT INTO table1 SELECT * FROM table2; | 将table2数据插入table1 |
| 分页查询 | SELECT * FROM table_name LIMIT 10 OFFSET 20; | 跳过前20条,返回10条 |
| 分组统计 | SELECT age, COUNT(*) FROM table_name GROUP BY age; | 按年龄分组统计人数 |
用户与权限管理
创建用户
CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'password';
'localhost'限制仅本地登录,允许任意主机登录。
授权
GRANT SELECT, INSERT ON db_name.* TO 'user_name'@'localhost';
- 权限类型:
SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)、ALL(所有权限)。
刷新权限
FLUSH PRIVILEGES;
撤销权限
REVOKE INSERT ON db_name.* FROM 'user_name'@'localhost';
删除用户
DROP USER 'user_name'@'localhost';
用户权限管理命令速查
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 查看用户权限 | SHOW GRANTS FOR ‘user_name’@’localhost’; | 返回用户权限列表 |
| 授权所有数据库 | GRANT ALL ON TO ‘user_name’@’%’; | 赋予全局超级权限(谨慎) |
数据备份与恢复
备份数据库(mysqldump)
mysqldump -u root -p db_name > backup.sql
- 备份所有数据库:
mysqldump -u root -p --all-databases > all_backup.sql
恢复数据库
mysql -u root -p db_name < backup.sql
数据备份命令速查
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 备份表结构(不含数据) | mysqldump -u root -p db_name table_name –no-data > structure.sql | 仅导出表结构 |
| 压缩备份 | mysqldump -u root -p db_name | gzip > backup.sql.gz |
其他常用命令
- 查看MySQL版本
SELECT VERSION();
- 查看当前用户
SELECT USER();
- 执行SQL脚本文件
SOURCE /path/to/script.sql;
- 查询正在执行的线程
SHOW PROCESSLIST;
相关问答FAQs
Q1:忘记MySQL root密码如何重置?
A1:
- 停止MySQL服务:
systemctl stop mysqld - 跳过权限表启动:
mysqld_safe --skip-grant-tables & - 无密码登录MySQL:
mysql -u root - 更新密码(MySQL 5.7+):
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root'; FLUSH PRIVILEGES; - 重启MySQL服务:
systemctl restart mysqld
Q2:如何优化慢查询SQL?
A2:
- 开启慢查询日志:在
my.cnf中配置slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 # 记录执行超过2秒的SQL
- 使用
EXPLAIN分析查询计划:EXPLAIN SELECT * FROM table_name WHERE condition; - 添加索引:
CREATE INDEX idx_name ON table_name(name); - 避免SELECT *,只查询必要字段;减少子查询,使用JOIN优化。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/455914.html<
