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 |
其他常用命令
相关问答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优化。