菜鸟科技网

Linux常用MySQL命令有哪些?

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

Linux常用MySQL命令有哪些?-图1
(图片来源网络,侵删)

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

  1. 停止MySQL服务:systemctl stop mysqld
  2. 跳过权限表启动:mysqld_safe --skip-grant-tables &
  3. 无密码登录MySQL:mysql -u root
  4. 更新密码(MySQL 5.7+):
    UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root';
    FLUSH PRIVILEGES;
  5. 重启MySQL服务:systemctl restart mysqld

Q2:如何优化慢查询SQL?
A2

  1. 开启慢查询日志:在my.cnf中配置
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow.log
    long_query_time = 2  # 记录执行超过2秒的SQL
  2. 使用EXPLAIN分析查询计划:EXPLAIN SELECT * FROM table_name WHERE condition;
  3. 添加索引:CREATE INDEX idx_name ON table_name(name);
  4. 避免SELECT *,只查询必要字段;减少子查询,使用JOIN优化。
Linux常用MySQL命令有哪些?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇