Skip to content

数据库管理系统完全指南

1. 数据库基础概念

1.1 数据库类型

  • 关系型数据库 (RDBMS)
    • 表格结构存储数据
    • 主流系统:MySQL、PostgreSQL、Oracle、SQL Server
  • 非关系型数据库 (NoSQL)
    • 分布式存储架构
    • 主流系统:MongoDB、Redis

1.2 关系型数据库核心特性

  • 基于SQL语言管理数据
  • 数据存储结构:行(记录) + 列(字段)
  • 典型系统对比:
数据库特点说明
MySQL开源免费,Web开发首选
PostgreSQL高级功能支持,开源企业级选择
SQLite轻量级嵌入式,适合移动/桌面应用

1.3 MySQL安装指南

bash
sudo apt update
sudo apt install mysql-server

2. 数据库安全管理

2.1 密码管理

2.1.1 修改密码

shell
mysqladmin -uroot -p旧密码 password '新密码'

# SQL方式
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

2.1.2 密码重置流程

  1. 停止MySQL服务
  2. 安全模式启动:mysqld --skip-grant-tables --skip-networking &
  3. 免密登录后执行:
sql
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
  1. 重启正常服务

2.2 用户管理

2.2.1 用户创建

sql
-- 本地用户
CREATE USER 'oldboy'@'localhost' IDENTIFIED BY '密码';
 
-- 远程用户(支持IP白名单)
CREATE USER 'xiaoA'@'10.0.0.52' IDENTIFIED BY '密码';
CREATE USER 'admin'@'%' IDENTIFIED BY '密码';  -- 允许任意IP

2.2.2 用户维护

sql
-- 删除用户
DROP USER '用户名'@'主机';
DELETE FROM mysql.user WHERE user='用户名' AND host='主机';
 
-- 用户查询
SELECT host,user FROM mysql.user;
SHOW PROCESSLIST;  -- 查看当前连接

2.3 权限管理

2.3.1 核心权限说明

权限作用范围功能说明
SELECT表级数据查询
INSERT表级数据插入
UPDATE表级数据更新
DELETE表级数据删除
CREATE库/表级创建数据库/表
DROP库/表级删除数据库/表
ALL全局超级管理员权限

2.3.2 权限操作

sql
-- 授权示例
GRANT SELECT,INSERT ON dbname.* TO 'user'@'host';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
 
-- 权限查看
SHOW GRANTS FOR 'user'@'host';
 
-- 权限回收
REVOKE UPDATE,DELETE ON dbname.* FROM 'user'@'host';

3. 数据库连接配置

3.1 远程连接配置

plain
# 修改my.cnf配置
bind-address = 0.0.0.0  # 允许所有IP连接

3.1.1 Navicat连接问题解决

sql
-- 创建远程管理账号
CREATE USER 'remote_root'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'remote_root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3.2 连接参数说明

参数说明示例
-u用户名-uroot
-p密码(直接跟值)-p123456
-h目标主机IP-h192.168.1.100
-P端口号(默认3306)-P3307
-S套接字文件路径-S/tmp/mysql.sock

4. 多实例配置

4.1 配置文件

bash
[root@10.0.0.51 /app/data]# ll
总用量 4
drwxr-xr-x 9 mysql mysql 4096  4月 21 20:51 3306
drwxr-xr-x 2 mysql mysql    6  4月 21 23:19 3307
drwxr-xr-x 2 mysql mysql    6  4月 21 23:19 3308
drwxr-xr-x 2 root  root     6  4月 21 23:23 3309
 
 # 授权数据库多实例所需权限
[root@10.0.0.51 /app]# chown -R mysql.mysql ./*
 
 # 多实例初始化配置前调整操作

[root@10.0.0.51 /app/data]# mv /etc/my.cnf /tmp
 # 多实例初始化操作过程

[root@10.0.0.51 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/app/data/3307/data
[root@10.0.0.51 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/app/data/3308/data
[root@10.0.0.51 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/app/data/3309/data

#多实例配置⽂件编写

[root@10.0.0.51 ~]# cat  /app/data/3307/data/my.cnf
[mysql]
socket=/tmp/mysql3307.sock
[mysqld]
user=mysql
port=3307
basedir=/usr/local/mysql
datadir=/app/data/3307/data
socket=/tmp/mysql3307.sock
[root@10.0.0.51 ~]# cat  /app/data/3308/data/my.cnf
[mysqld]
user=mysql
port=3308
basedir=/usr/local/mysql
datadir=/app/data/3308/data
socket=/tmp/mysql3308.sock
[root@10.0.0.51 ~]# cat /app/data/3309/data/my.cnf
[mysqld]
user=mysql
port=3309
basedir=/usr/local/mysql
datadir=/app/data/3309/data
socket=/tmp/mysql3309.sock

[root@10.0.0.51 ~]# mysqld_safe --defaults-file=/app/data/3307/data/my.cnf &[1] 4095

[root@10.0.0.51 ~]# mysqld_safe --defaults-file=/app/data/3308/data/my.cnf &[2] 4277

[root@10.0.0.51 ~]# mysqld_safe --defaults-file=/app/data/3309/data/my.cnf &[3] 4459

[root@10.0.0.51 ~]# ss -lntup|grep mysqld
tcp     LISTEN   0        128                    *:3309                 *:*      users:(("mysqld",pid=4598,fd=33))                                              
tcp     LISTEN   0        70                     *:33060                *:*      users:(("mysqld",pid=2004,fd=24))                                              
tcp     LISTEN   0        128                    *:3306                 *:*      users:(("mysqld",pid=2004,fd=26))                                              
tcp     LISTEN   0        128                    *:3307                 *:*      users:(("mysqld",pid=4234,fd=34))                                              
tcp     LISTEN   0        128                    *:3308                 *:*      users:(("mysqld",pid=4416,fd=24))

4.2 多实例部署方案

4.2.1 架构优势

  • 资源隔离:CPU/内存独立分配
  • 高可用性:故障实例不影响其他服务
  • 灵活管理:支持批量运维操作

4.2.2 部署效果

bash
[root@10.0.0.51 ~]# mysql -uroot -S /tmp/mysql3307.sock 
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> ^DBye
[root@10.0.0.51 ~]# mysql -uroot -S /tmp/mysql3308.sock 
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> ^DBye
[root@10.0.0.51 ~]# mysql -uroot -S /tmp/mysql3309.sock 
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> ^DBye
实例编号端口号数据目录配置文件路径套接字文件
mysql-013307/app/data/3307/data/app/data/3307/data/my.cnf/tmp/mysql3307.sock
mysql-023308/app/data/3308/data/app/data/3307/data/my.cnf/tmp/mysql3308.sock
mysql-033309/app/data/3309/data/app/data/3307/data/my.cnf/tmp/mysql3309.sock

5. 数据操作基础(CRUD)

5.1 基础操作

5.1.1 创建数据(CREATE)

sql
-- 单条插入
INSERT INTO users (name,email) VALUES ('Alice','alice@test.com');
 
-- 批量插入
INSERT INTO users (name,email) 
VALUES 
  ('Bob','bob@test.com'),
  ('Charlie','charlie@test.com');

5.1.2 查询数据(READ)

sql

-- 基础查询
SELECT * FROM users WHERE age > 25;
 
-- 高级查询
SELECT u.name, o.product 
FROM users u
INNER JOIN orders o ON u.id = o.user_id
WHERE o.amount > 100;

5.1.3 更新数据(UPDATE)

sql
-- 条件更新
UPDATE products 
SET price = price * 1.1 
WHERE category = 'Electronics';

5.1.4 删除数据(DELETE)

sql
-- 安全删除
DELETE FROM logs 
WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);

5.2 多表关联查询

连接类型特点说明适用场景
INNER JOIN返回交集数据核心业务数据关联
LEFT JOIN保留左表全部记录用户-订单关系查询
RIGHT JOIN保留右表全部记录订单-物流信息关联
SELF JOIN表自连接查询员工-上级关系查询
sql
-- 自连接示例
SELECT e.name AS 员工, m.name AS 经理
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

感谢阅读,欢迎交流!