内容简介:本文主要介绍MySQL存储过程参数与返回值的相关知识,包括参数类型、使用方法和最佳实践等内容。风哥教程参考MySQL官方文档MySQL Change Management、MySQL Server Administration。 01 更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 变更管理的重要性
数据库变更管理是确保数据库稳定性和数据安全的关键流程。通过规范化的变更管理,可以降低变更风险,减少故障发生,提高系统可用性。 02 学习交流加群风哥微信: itpux-com
1.2 变更类型
数据库变更主要分为以下类型: 03 学习交流加群风哥QQ113257174
1. 标准变更
– 定期维护任务
– 计划内的版本升级
– 例行的配置调整
– 特点:低风险,可预见,有标准流程
2. 紧急变更
– 生产故障修复
– 安全漏洞修补
– 性能问题处理
– 特点:高风险,时间紧迫,需要快速响应
3. 常规变更
– 应用发布相关的数据库变更
– 新业务需求的数据库调整
– 性能优化变更
– 特点:需要评估和审批
4. 重大变更
– 架构改造
– 数据库迁移
– 存储引擎更换
– 特点:高风险,需要详细计划和充分测试
Part02-生产环境规划与建议
2.1 变更请求
提交和管理变更请求: 04 风哥提示:
1. 创建变更请求表
CREATE TABLE change_requests (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘主键ID’,
change_id VARCHAR(64) NOT NULL COMMENT ‘变更编号’,
change_title VARCHAR(200) NOT NULL COMMENT ‘变更标题’,
change_type ENUM(‘standard’, ‘normal’, ’emergency’, ‘major’) NOT NULL COMMENT ‘变更类型’,
change_category ENUM(‘schema’, ‘data’, ‘config’, ‘permission’, ‘architecture’) NOT NULL COMMENT ‘变更类别’,
priority ENUM(‘low’, ‘medium’, ‘high’, ‘critical’) NOT NULL DEFAULT ‘medium’ COMMENT ‘优先级’,
status ENUM(‘draft’, ‘pending’, ‘approved’, ‘rejected’, ‘in_progress’, ‘completed’, ‘failed’, ‘rolled_back’) NOT NULL DEFAULT ‘draft’ COMMENT ‘状态’,
description TEXT NOT NULL COMMENT ‘变更描述’,
business_justification TEXT COMMENT ‘业务理由’,
impact_analysis TEXT COMMENT ‘影响分析’,
rollback_plan TEXT COMMENT ‘回滚方案’,
test_plan TEXT COMMENT ‘测试计划’,
implementation_plan TEXT COMMENT ‘实施方案’,
requester VARCHAR(64) NOT NULL COMMENT ‘申请人’,
request_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘申请时间’,
approver VARCHAR(64) COMMENT ‘审批人’,
approve_time DATETIME COMMENT ‘审批时间’,
implementer VARCHAR(64) COMMENT ‘实施人’,
scheduled_time DATETIME COMMENT ‘计划执行时间’,
start_time DATETIME COMMENT ‘开始时间’,
end_time DATETIME COMMENT ‘结束时间’,
result TEXT COMMENT ‘执行结果’,
PRIMARY KEY (id),
UNIQUE KEY uk_change_id (change_id),
KEY idx_status (status),
KEY idx_requester (requester),
KEY idx_request_time (request_time),
KEY idx_scheduled_time (scheduled_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’变更请求表’;
2. 提交变更请求
INSERT INTO change_requests (
change_id, change_title, change_type, change_category, priority,
description, business_justification, impact_analysis, rollback_plan,
test_plan, implementation_plan, requester, scheduled_time
) VALUES (
‘CHG202604040001’,
‘用户表增加手机号字段’,
‘normal’,
‘schema’,
‘medium’,
‘在用户表(user_info)中增加手机号字段,用于短信通知功能’,
‘业务需要发送短信验证码和通知,需要存储用户手机号’,
‘影响范围:用户表,预计影响100万用户数据。执行时间约5分钟,期间会有短暂锁表’,
‘回滚方案:ALTER TABLE user_info DROP COLUMN phone_number;’,
‘1. 在测试环境执行变更\n2. 验证应用功能正常\n3. 验证数据完整性’,
‘1. 备份用户表\n2. 执行ALTER TABLE添加字段\n3. 验证变更结果\n4. 更新应用配置’,
‘developer001’,
‘2026-04-04 02:00:00’
);
输出示例:
Query OK, 1 row affected (0.01 sec)
3. 查看变更请求
SELECT change_id, change_title, change_type, priority, status, requester, request_time
FROM change_requests
WHERE status = ‘draft’
ORDER BY request_time DESC;
输出示例:
+—————+————————+————-+———-+——–+————-+———————+
| change_id | change_title | change_type | priority | status | requester | request_time |
+—————+————————+————-+———-+——–+————-+———————+
| CHG202604040001 | 用户表增加手机号字段 | normal | medium | draft | developer001| 2026-04-04 10:00:00 |
+—————+————————+————-+———-+——–+————-+———————+
2.2 变更审批
变更审批流程:
1. 审批流程设计
– 标准变更:自动审批
– 常规变更:DBA审批
– 紧急变更:值班经理审批
– 重大变更:变更委员会审批
2. 审批操作
— DBA审批变更
UPDATE change_requests
SET status = ‘approved’,
approver = ‘dba001’,
approve_time = NOW()
WHERE change_id = ‘CHG202604040001’;
输出示例:
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
3. 审批记录表
CREATE TABLE change_approvals (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
change_id VARCHAR(64) NOT NULL,
approver VARCHAR(64) NOT NULL,
approval_level TINYINT NOT NULL DEFAULT 1,
approval_result ENUM(‘approved’, ‘rejected’) NOT NULL,
approval_comment TEXT,
approval_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_change_id (change_id),
KEY idx_approver (approver)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’变更审批记录表’;
4. 记录审批意见
INSERT INTO change_approvals (change_id, approver, approval_level, approval_result, approval_comment)
VALUES (‘CHG202604040001’, ‘dba001’, 1, ‘approved’, ‘变更方案合理,测试充分,同意执行’);
输出示例:
Query OK, 1 row affected (0.01 sec)
5. 查看审批历史
SELECT a.change_id, a.approver, a.approval_result, a.approval_comment, a.approval_time
FROM change_approvals a
JOIN change_requests r ON a.change_id = r.change_id
WHERE r.change_id = ‘CHG202604040001’
ORDER BY a.approval_time;
输出示例:
+—————+———-+—————-+——————————–+———————+
| change_id | approver | approval_result| approval_comment | approval_time |
+—————+———-+—————-+——————————–+———————+
| CHG202604040001 | dba001 | approved | 变更方案合理,测试充分,同意执行 | 2026-04-04 10:30:00 |
+—————+———-+—————-+——————————–+———————+
Part03-生产环境项目实施方案
3.1 实施前准备
变更实施前的准备工作:
1. 环境检查
— 检查数据库状态
mysql> SHOW GLOBAL STATUS LIKE ‘Uptime’;
输出示例:
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Uptime | 86400 |
+—————+——-+
— 检查当前连接数
mysql> SHOW GLOBAL STATUS LIKE ‘Threads_connected’;
输出示例:
+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| Threads_connected | 45 |
+——————-+——-+
— 检查复制状态
mysql> SHOW SLAVE STATUS\G
输出示例:
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.100
Master_User: repl
Master_Port: 3306
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
2. 数据备份
— 备份相关表
mysqldump -u root -p production_db user_info > /backup/user_info_$(date +%Y%m%d_%H%M%S).sql
输出示例:
— MySQL dump 10.13 Distrib 8.0.36, for Linux (x86_64)
—
— Host: localhost Database: production_db
— ——————————————————
— Server version 8.0.36
3. 通知相关人员
— 发送变更通知
#!/bin/bash
CHANGE_ID=”CHG202604040001″
CHANGE_TITLE=”用户表增加手机号字段”
SCHEDULED_TIME=”2026-04-04 02:00:00″
mail -s “数据库变更通知 – $CHANGE_ID” dba@fgedu.net.cn << EOF
变更编号: $CHANGE_ID
变更标题: $CHANGE_TITLE
计划执行时间: $SCHEDULED_TIME
影响范围: 用户表
预计持续时间: 5分钟
请相关人员做好准备。
EOF
4. 更新变更状态
UPDATE change_requests
SET status = ‘in_progress’,
start_time = NOW(),
implementer = ‘dba001’
WHERE change_id = ‘CHG202604040001’;
输出示例:
Query OK, 1 row affected (0.01 sec)
3.2 变更执行
执行数据库变更: 05更多学习教程公众号风哥教程itpux_com
1. 执行DDL变更
— 添加字段
mysql> ALTER TABLE production_db.user_info
-> ADD COLUMN phone_number VARCHAR(20) NOT NULL DEFAULT ” COMMENT ‘手机号’
-> AFTER email;
输出示例:
Query OK, 0 rows affected (4.56 sec)
Records: 0 Duplicates: 0 Warnings: 0
2. 验证变更结果
— 查看表结构
mysql> SHOW CREATE TABLE production_db.user_info\G
输出示例:
*************************** 1. row ***************************
Table: user_info
Create Table: CREATE TABLE `user_info` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT ‘主键ID’,
`user_name` varchar(64) NOT NULL DEFAULT ” COMMENT ‘用户名’,
`email` varchar(128) NOT NULL DEFAULT ” COMMENT ‘邮箱’,
`phone_number` varchar(20) NOT NULL DEFAULT ” COMMENT ‘手机号’,
`status` tinyint NOT NULL DEFAULT ‘1’ COMMENT ‘状态’,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_name` (`user_name`),
UNIQUE KEY `uk_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’用户信息表’
3. 验证数据完整性
— 检查数据行数
mysql> SELECT COUNT(*) FROM production_db.user_info;
输出示例:
+———-+
| COUNT(*) |
+———-+
| 1000000 |
+———-+
— 抽样检查数据
mysql> SELECT id, user_name, email, phone_number FROM production_db.user_info LIMIT 5;
输出示例:
+—-+———–+——————+————–+
| id | user_name | email | phone_number |
+—-+———–+——————+————–+
| 1 | user001 | user001@test.com | |
| 2 | user002 | user002@test.com | |
| 3 | user003 | user003@test.com | |
+—-+———–+——————+————–+
4. 更新变更状态
UPDATE change_requests
SET status = ‘completed’,
end_time = NOW(),
result = ‘变更执行成功,用户表增加phone_number字段,数据完整性验证通过’
WHERE change_id = ‘CHG202604040001’;
输出示例:
Query OK, 1 row affected (0.01 sec)
5. 发送完成通知
#!/bin/bash
CHANGE_ID=”CHG202604040001″
START_TIME=”2026-04-04 02:00:00″
END_TIME=”2026-04-04 02:04:56″
mail -s “数据库变更完成 – $CHANGE_ID” dba@fgedu.net.cn << EOF
变更编号: $CHANGE_ID
变更标题: 用户表增加手机号字段
开始时间: $START_TIME
结束时间: $END_TIME
执行结果: 成功
持续时间: 4分56秒
变更已完成,系统运行正常。
EOF
Part04-生产案例与实战讲解
4.1 回滚流程
变更失败时的回滚流程: 06 from mysql视频:www.itpux.com
1. 判断回滚条件
— 变更执行失败
— 变更后系统异常
— 业务功能受影响
— 数据完整性问题
2. 执行回滚操作
— 回滚DDL变更(删除字段)
mysql> ALTER TABLE production_db.user_info DROP COLUMN phone_number;
输出示例:
Query OK, 0 rows affected (3.21 sec)
Records: 0 Duplicates: 0 Warnings: 0
3. 数据恢复(如需要)
— 从备份恢复数据
mysql -u root -p production_db < /backup/user_info_20260404_020000.sql
输出示例:
— 恢复数据
— 验证数据完整性
4. 验证回滚结果
— 检查表结构
mysql> SHOW CREATE TABLE production_db.user_info\G
输出示例:
*************************** 1. row ***************************
Table: user_info
Create Table: CREATE TABLE `user_info` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT ‘主键ID’,
`user_name` varchar(64) NOT NULL DEFAULT ” COMMENT ‘用户名’,
`email` varchar(128) NOT NULL DEFAULT ” COMMENT ‘邮箱’,
`status` tinyint NOT NULL DEFAULT ‘1’ COMMENT ‘状态’,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_name` (`user_name`),
UNIQUE KEY `uk_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’用户信息表’
5. 更新变更状态
UPDATE change_requests
SET status = ‘rolled_back’,
end_time = NOW(),
result = ‘变更执行失败,已回滚到变更前状态。失败原因:添加字段时锁表时间过长,影响业务’
WHERE change_id = ‘CHG202604040001’;
输出示例:
Query OK, 1 row affected (0.01 sec)
6. 发送回滚通知
#!/bin/bash
CHANGE_ID=”CHG202604040001″
mail -s “数据库变更已回滚 – $CHANGE_ID” dba@fgedu.net.cn << EOF
变更编号: $CHANGE_ID
变更标题: 用户表增加手机号字段
状态: 已回滚
回滚原因: 添加字段时锁表时间过长,影响业务
系统已恢复到变更前状态,请重新评估变更方案。
EOF
Part05-风哥经验总结与分享
5.1 变更管理最佳实践
数据库变更管理的最佳实践:
1. 变更窗口
– 选择业务低峰期执行
– 避开重要业务时段
– 预留充足的回滚时间
– 提前通知相关人员
2. 变更测试
– 在测试环境充分测试
– 进行性能影响评估
– 验证回滚方案可行性
– 准备应急预案
3. 变更监控
– 监控数据库性能指标
– 监控应用响应时间
– 监控错误日志
– 实时监控变更进度
4. 变更文档
– 记录变更详细信息
– 保存变更脚本
– 记录变更结果
– 更新架构文档
5. 变更回顾
– 定期进行变更回顾
– 分析变更成功率
– 总结变更经验
– 持续改进流程
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
