奇奇怪怪小知识 - 2

1. MySQL 常用查询

1.1 创建用户

创建可本地登录的用户
CREATE USER ‘用户名‘@’localhost’ IDENTIFIED BY ‘密码’;

创建可远程登录的用户(将所有主机写成 ‘%’)
CREATE USER ‘用户名‘@’%’ IDENTIFIED BY ‘密码’;

1.2 授予权限

授予对某个数据库的全部权限
GRANT ALL PRIVILEGES ON 数据库名.* TO ‘用户名‘@’主机’;

授予只读权限(仅查询)
GRANT SELECT ON 数据库名.* TO ‘用户名‘@’主机’;

授予特定操作(查询、插入、修改)
GRANT SELECT, INSERT, UPDATE ON 数据库名.* TO ‘用户名‘@’主机’;

授予全部库表权限(超级管理员,谨慎)
GRANT ALL PRIVILEGES ON . TO ‘用户名‘@’%’ WITH GRANT OPTION;

让权限修改立即生效
FLUSH PRIVILEGES;

1.3 查看用户权限

查看当前登录用户的权限
SHOW GRANTS;

查看指定用户的权限
SHOW GRANTS FOR ‘用户名‘@’主机’;

1.4 撤销权限

撤销某个权限
REVOKE SELECT ON 数据库名.* FROM ‘用户名‘@’主机’;

撤销所有权限
REVOKE ALL PRIVILEGES ON 数据库名.* FROM ‘用户名‘@’主机’;
FLUSH PRIVILEGES;

1.5 修改用户密码

修改自己的密码(MySQL 8.0+)
ALTER USER USER() IDENTIFIED BY ‘新密码’;

管理员修改其他用户密码
ALTER USER ‘用户名‘@’主机’ IDENTIFIED BY ‘新密码’;

1.6 删除用户

DROP USER ‘用户名‘@’主机’;

1.7 查看已有用户(管理员常用)

直接查 mysql.user 表(MySQL 8.0+)
SELECT user, host FROM mysql.user;

1.8 建库与建表

创建数据库并切换到该库下。
CREATE DATABASE 数据库名称;
USE 数据库名称;

建表示例(带详细字段说明)

CREATE TABLE 表名称 (
字段1 INT PRIMARY KEY AUTO_INCREMENT,
字段2 VARCHAR(20) NOT NULL,
字段3 INT,
字段4 CHAR(1) DEFAULT ‘默认值’);

  • INT:整数类型
  • PRIMARY KEY:主键,唯一且非空,用于唯一标识一行
  • AUTO_INCREMENT:自动递增,插入时无需手动指定
  • VARCHAR(20):变长字符串,最大 20 字符
  • NOT NULL:非空约束,必须填值
  • INT:整数,未加约束,可为空
  • CHAR(1):定长字符,刚好 1 个字符
  • DEFAULT ‘默认值’:不填时自动使用该默认值

1.9 插入数据(INSERT)

插入一条记录
INSERT INTO 表名 (字段1, 字段2, 字段3) VALUES (值1, 值2, 值3);

插入多条记录
INSERT INTO 表名 (字段1, 字段2, 字段3) VALUES
(值1, 值2, 值3),
(值4, 值5, 值6);

1.10 查询数据(SELECT)

查询全部字段
SELECT * FROM 表名;

查询指定字段
SELECT 字段1, 字段2 FROM 表名;

条件查询
SELECT * FROM 表名 WHERE 条件;

多条件查询
SELECT * FROM 表名 WHERE 条件1 AND 条件2;

精确匹配(字符串)
SELECT * FROM 表名 WHERE 字段 = ‘数据’;

模糊查询
SELECT * FROM 表名 WHERE 字段 LIKE ‘%关键字%’;

排序(ASC 升序,DESC 降序)
SELECT * FROM 表名 ORDER BY 字段 DESC;

限制返回行数
SELECT * FROM 表名 LIMIT 行数;

1.11 更新数据(UPDATE)

更新单字段
UPDATE 表名 SET 字段 = 新值 WHERE 条件;

更新多个字段
UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2 WHERE 条件;

在原有值基础上累加
UPDATE 表名 SET 字段 = 字段 + 增量 WHERE 条件;

务必带上 WHERE 条件! 否则会修改整张表的所有记录。
执行前强烈建议先用 SELECT 相同的条件确认影响行数。

1.12 删除数据(DELETE)

删除符合条件的记录
DELETE FROM 表名 WHERE 条件;

必须带上 WHERE 条件! 不带条件的 DELETE 会 清空整张表的所有数据,且不可回滚(除非开启事务)。

1.13 其他常用操作

查看表结构
DESC 表名;

清空表(保留结构,速度快,不可回滚)
TRUNCATE TABLE 表名;

删除表
DROP TABLE 表名;

删除数据库
DROP DATABASE 数据库名称;

1.14 备份与恢复

常用备份与恢复命令速查表。

操作场景 命令 说明
备份单个数据库 mysqldump -u 用户名 -p 数据库名 > backup.sql 导出指定数据库
备份所有数据库 mysqldump -u 用户名 -p –all-databases > all.sql 导出全部数据(含系统库)
恢复 / 导入数据库 mysql -u 用户名 -p 数据库名 < backup.sql 将 SQL 文件导入指定数据库
查看导入进度 pv backup.sql mysql -u 用户名 -p 数据库名

1.14.1 导入 SQL 备份文件详细说明

将 SQL 备份文件导入指定数据库:
mysql -u 用户名 -p 数据库名 < 备份文件路径

示例:
mysql -uroot -p my_database < /backup/my_database_20260422.sql

若目标数据库不存在,需先创建:CREATE DATABASE my_database;

1.14.2 使用 pv 查看实时导入进度

安装 pv(Pipe Viewer):
sudo yum install epel-release -y
sudo yum install pv -y

使用 pv 导入并显示进度:
pv 备份文件路径 | mysql -u 用户名 -p 数据库名

示例:
pv /data/mysql_20260421_120001.sql | mysql -uroot -p mysql

输出示例:
450MiB 0:00:15 [30.1MiB/s] [====================> ] 65% ETA 0:00:08

2. Linux 基础命令

2.1 查看系统资源

内存使用情况

查看内存总量与使用量(人类可读单位):
free -h

输出示例:

total used free shared buff/cache available
Mem: 15Gi 3.2Gi 8.1Gi 1.2Gi 4.3Gi 11Gi
Swap: 2.0Gi 0.0Ki 2.0Gi

进程排序

按 CPU 使用率排序(前10名)
ps aux –sort=-%cpu | head -10

按内存使用率排序(前10名)
ps aux –sort=-%mem | head -10

其他进程查找命令

命令 说明
pidstat -p 进程号 -r -u 1 动态监控指定进程的 CPU 和内存
pgrep 进程名 直接返回 PID,如 pgrep vsftpd → 2121
ps aux | grep 进程名 查看进程详细信息,第二列为 PID
pidof 进程名 精确匹配进程名,如 pidof java

2.2 服务管理

命令 说明
systemctl status 服务名称 检查服务运行状态
systemctl restart 服务名称 重启服务

2.3 文件权限查看与修改

查看文件详细信息

查看文件权限、所有者等信息:

ls -l 文件路径

输出示例:

ls -l /data/ftp_data/contract/016XS25080048/1755739665463.jpg
-rw-r–r– 1 root root 504975 Apr 21 15:01 1755739665463.jpg

权限字段解读:

  • 第1字符:**-** 表示普通文件,d 表示目录。
  • 后续每3个字符一组:****rw-(所有者权限)、r–(所属组权限)、r–**(其他用户权限)。
  • 第3列 root:文件所有者。
  • 第4列 root:文件所属组。

递归修改目录所有者

递归修改目录及其下所有文件的所有者和所属组:

chown -R 所有者:所属组 目录路径

输出示例:

chown -R ftpuser:ftpuser /data/ftp_data/contract/016XS25080048

2.4 SELinux 临时关闭(快速测试)

临时关闭 SELinux(重启后失效):

setenforce 0

如需永久关闭,需修改 /etc/selinux/config 文件。

2.5 远程拷贝(scp)

拷贝整个目录

递归拷贝远程目录至本地:

scp -r 用户名@服务器IP:远程目录路径 本地目录路径

输出示例:

scp -r root@192.168.1.100:/data/ftp/contract/ /data/backup_ftp/contract/

拷贝单个文件

拷贝远程文件至本地:

scp 用户名@服务器IP:远程文件路径 本地目录路径

输出示例:

scp root@192.168.124.197:/data/mysql_backup/mysql_20260415_000620.sql-bak /data/ftp_data/

2.6 数据库备份与还原

导入 SQL 备份文件

将 SQL 备份文件导入指定数据库:

mysql -u 用户名 -p 数据库名 < 备份文件路径

输出示例:

mysql -uroot -p my_database < /backup/my_database_20260422.sql

若目标数据库不存在,需先创建:
CREATE DATABASE my_database;