重要说明:MySQL 不支持直接重命名数据库。RENAME DATABASE 命令在 MySQL 5.1.23 之后被移除,因为存在数据丢失风险。
使用项目提供的脚本进行数据库重命名:
# 1. 赋予执行权限
chmod +x 部署脚本/rename-mysql-database.sh
# 2. 执行重命名(旧数据库名 -> 新数据库名)
./部署脚本/rename-mysql-database.sh hzdyjs_xg hzdyjs_xg_new
# 或者指定root密码
ROOT_PASSWORD="your_password" ./部署脚本/rename-mysql-database.sh hzdyjs_xg hzdyjs_xg_new
脚本功能:
# 导出数据库(包含CREATE DATABASE语句)
mysqldump -u root -p \
--single-transaction \
--routines \
--triggers \
--events \
--add-drop-database \
--databases hzdyjs_xg > /tmp/hzdyjs_xg_backup.sql
参数说明:
--single-transaction:使用事务保证数据一致性--routines:导出存储过程和函数--triggers:导出触发器--events:导出事件--add-drop-database:包含DROP DATABASE语句--databases:导出整个数据库# 方法A:使用sed命令(推荐)
sed -i.bak "s/CREATE DATABASE.*\`hzdyjs_xg\`/CREATE DATABASE \`hzdyjs_xg_new\`/g" /tmp/hzdyjs_xg_backup.sql
sed -i.bak "s/USE \`hzdyjs_xg\`/USE \`hzdyjs_xg_new\`/g" /tmp/hzdyjs_xg_backup.sql
# 方法B:使用文本编辑器手动修改
# 查找并替换:
# CREATE DATABASE `hzdyjs_xg` -> CREATE DATABASE `hzdyjs_xg_new`
# USE `hzdyjs_xg` -> USE `hzdyjs_xg_new`
CREATE DATABASE hzdyjs_xg_new CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
mysql -u root -p < /tmp/hzdyjs_xg_backup.sql
-- 检查表数量
USE hzdyjs_xg_new;
SHOW TABLES;
-- 检查数据量
SELECT COUNT(*) FROM sys_user; -- 示例:检查用户表
-- 对比旧数据库
USE hzdyjs_xg;
SELECT COUNT(*) FROM sys_user;
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/hzdyjs_xg_new?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
-- ⚠️ 危险操作,请确认数据无误后再执行
DROP DATABASE IF EXISTS hzdyjs_xg;
如果数据库表数量较少,可以使用RENAME TABLE方式:
-- 1. 创建新数据库
CREATE DATABASE hzdyjs_xg_new CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 2. 重命名每个表(需要手动列出所有表)
RENAME TABLE hzdyjs_xg.sys_user TO hzdyjs_xg_new.sys_user;
RENAME TABLE hzdyjs_xg.sys_role TO hzdyjs_xg_new.sys_role;
-- ... 继续重命名所有表
-- 3. 删除旧数据库
DROP DATABASE hzdyjs_xg;
缺点:
如果数据库配置了主从复制,重命名数据库需要特殊处理:
# 1. 停止从库复制
mysql -u root -p -e "STOP SLAVE;"
# 2. 在主库执行重命名操作
# 3. 在从库执行相同的重命名操作
# 4. 更新主从复制配置
# 主库 my.cnf
binlog-do-db = hzdyjs_xg_new
# 从库 my.cnf
replicate-do-db = hzdyjs_xg_new
# 5. 重启MySQL并启动复制
mysql -u root -p -e "START SLAVE;"
重命名数据库后,需要更新所有应用程序的数据库连接配置:
application.yml)如果数据库有专门的用户,需要更新用户权限:
-- 撤销旧数据库权限
REVOKE ALL PRIVILEGES ON hzdyjs_xg.* FROM 'app_user'@'%';
-- 授予新数据库权限
GRANT ALL PRIVILEGES ON hzdyjs_xg_new.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
重要:重命名前必须备份!
# 完整备份
mysqldump -u root -p --all-databases > /backup/all_databases_$(date +%Y%m%d).sql
# 业务数据库备份
mysqldump -u root -p hzdyjs_xg > /backup/hzdyjs_xg_$(date +%Y%m%d).sql
重命名完成后,请验证以下项目:
| 数据库大小 | 导出时间 | 导入时间 | 总时间 |
|---|---|---|---|
| < 1GB | 1-5分钟 | 2-10分钟 | 3-15分钟 |
| 1-10GB | 5-30分钟 | 10-60分钟 | 15-90分钟 |
| 10-50GB | 30-120分钟 | 60-240分钟 | 90-360分钟 |
| > 50GB | 2-6小时 | 4-12小时 | 6-18小时 |
优化建议:
--single-transaction 减少锁表时间max_allowed_packet 参数# 危险操作,不推荐!
# 可能导致数据损坏
mv /var/lib/mysql/hzdyjs_xg /var/lib/mysql/hzdyjs_xg_new
风险:
最后更新:2025-01-03
维护者:项目技术团队