Appearance
数据库管理系统完全指南
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 密码重置流程
- 停止MySQL服务
- 安全模式启动:
mysqld --skip-grant-tables --skip-networking &
- 免密登录后执行:
sql
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
- 重启正常服务
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-01 | 3307 | /app/data/3307/data | /app/data/3307/data/my.cnf | /tmp/mysql3307.sock |
mysql-02 | 3308 | /app/data/3308/data | /app/data/3307/data/my.cnf | /tmp/mysql3308.sock |
mysql-03 | 3309 | /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;