如何将数据库中文名字从?修改为改写为?
- 内容介绍
- 相关推荐
你在更改数据库中文名称时最怕遇到的痛点
- 误删或误改导致业务中断,数据无法恢复。
- 更名过程需要停机,影响线上业务的可用性。
- 操作复杂、命令记不住特别是涉及多个表的迁移。不过,
- 缺少完整的备份方案。一旦出错只能靠手工恢复,
MySQL 中安全更改数据库中文名称的三大方案
从方案一来看,使用 RENAME DATABASE
MyISAM 引擎下可以直接在文件程序中移动数据库目录:
# 假设原库 old_db 改为 new_db
mv /var/lib/mysql/old_db /var/lib/mysql/new_db
# 更新权限表
mysql -uroot -p -e "FLUSH PRIVILEGES;"
注意:InnoDB 不支持此方式,直接搬目录会导致表“找不到”。
方案二的观点是,通过 CREATE + mysqldump + DROP 实现全量迁移
-
备份原库:
mysqldump -u root -p old_db> old_db.sql -
创建新库:
mysql -u root -p -e "CREATE DATABASE new_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" -
导入数据:
mysql -u root -p new_db -
验证无误后删除旧库:
mysql -u root -p -e "DROP DATABASE old_db;"
再看方案三,使用 RENAME TABLE 搬迁所有表
如果不想走全量导入。可以逐表搬迁:
# 列出旧库所有表
list=$
# 循环重命名
for t in $list;do
mysql -uroot -p123456 -e "RENAME TABLE old_db.\`$t\` TO new_db.\`$t\`;",不过,done
# 最终删除旧库
mysql -uroot -p123456 -e "DROP DATABASE old_db;",说起来,
至于一步步实战。从 “old_database” 改为 “new_database”
1️⃣ 前置准备——完整备份是唯一底线
使用以下命令生成物理备份和逻辑备份双保险:
# 物理快照
rsync -a /var/lib/mysql/old_database /backup/mysql_old_database_$
# 逻辑备份
mysqldump -u root -p --routines --triggers --events old_database> /backup/old_database.sql
2️⃣ 创建目标库并设置字符集、排序规则
mysql -u root -p -e "
CREATE DATABASE new_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;"
3️⃣ 导入数据并校验完整性
# 导入
mysql -u root -p new_database
4️⃣ 切换业务连接 & 删除旧库
在确认新库无误后更新应用配置中的数据库名称,接下来执行:
mysql -u root -p123456 -e "DROP DATABASE old_database;"
批量重命名表名的 Shell 脚本实用模板
#!/bin/bash
OLD_DB="old_db"
NEW_DB="new_db"
MYSQL_USER="root"
MYSQL_PWD="123456"
tables=$(mysql -u${MYSQL_USER} -p${MYSQL_PWD} \
-Nse "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${OLD_DB}';")
for tbl in $tables;do
echo "Renaming ${OLD_DB}.${tbl} -> ${NEW_DB}.${tbl}"
mysql -u${MYSQL_USER} "-p${MYSQL_PWD}" \
-e "RENAME TABLE \`${OLD_DB}\`.\`${tbl}\` TO \`${NEW_DB}\`.\`${tbl}\`;"
done
echo "All tables have been moved to ${NEW_DB}."
# 可选:删除旧库
# mysql -u${MYSQL_USER} "-p${MYSQL_PWD}" \
# -e "DROP DATABASE ${OLD_DB};"
关键注意事项——避免踩坑的检查清单
- 务必先做两份以上备份:a) 数据库 dump;b) 文件程序快照,
- 确认字符集一致:Mysql5.7+ 推荐使用 utf8mb4,防止中文乱码。
- AUTO_INCREMENT 冲突:b) 导入前检查自增值是否被覆盖。
- CUSTOM USER 权限迁移:b) 原库使用者、视图、触发器需要重新授权。
- PITR: b) 若有 binlog。记录下最终一次 binlog 位点,以便回滚。
- SERVICE 停机窗口:b) 在业务低峰期执行 rename 或 dump/import 操作。
- TEMPORARY 表和 SESSION 变量:b) 确认没有活跃事务,否则会导致锁死。
SQL Server 中修改数据库实例名称的快捷方式
If you are using Microsoft SQL Server,built‑in stored procedure makes it painless:
SYSTEM>
USE master;GO
EXEC sp_renamedb @dbname = N'OldDB',@newname = N'NewDB';GO
-- 验证:
SELECT name FROM sys.databases WHERE name = 'NewDB';
至于小结。把“痛点”转化为“流程”,让数据库更名不再恐慌!
- **先备份**:任何一步骤之前都要做好完整备份。按理说,- **选合适方案**:小库可用 RENAME;说起来,大库推荐 dump+import;同实例搬迁可用 RENAME TABLE。- **脚本自动化**:避免手工敲错,多表场景建议使用上面的 Bash 示例。- **验证&切换**:导入后对比行数、索引、约束,再统一切换连接字符串。- **清理**:确认新库稳定后安全 drop 老库,释放硬盘空间。
只要遵循以上步骤。你就能轻松把「old_db」改成「new_db」,不必担心数据丢失或业务中断。按理说,
你在更改数据库中文名称时最怕遇到的痛点
- 误删或误改导致业务中断,数据无法恢复。
- 更名过程需要停机,影响线上业务的可用性。
- 操作复杂、命令记不住特别是涉及多个表的迁移。不过,
- 缺少完整的备份方案。一旦出错只能靠手工恢复,
MySQL 中安全更改数据库中文名称的三大方案
从方案一来看,使用 RENAME DATABASE
MyISAM 引擎下可以直接在文件程序中移动数据库目录:
# 假设原库 old_db 改为 new_db
mv /var/lib/mysql/old_db /var/lib/mysql/new_db
# 更新权限表
mysql -uroot -p -e "FLUSH PRIVILEGES;"
注意:InnoDB 不支持此方式,直接搬目录会导致表“找不到”。
方案二的观点是,通过 CREATE + mysqldump + DROP 实现全量迁移
-
备份原库:
mysqldump -u root -p old_db> old_db.sql -
创建新库:
mysql -u root -p -e "CREATE DATABASE new_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" -
导入数据:
mysql -u root -p new_db -
验证无误后删除旧库:
mysql -u root -p -e "DROP DATABASE old_db;"
再看方案三,使用 RENAME TABLE 搬迁所有表
如果不想走全量导入。可以逐表搬迁:
# 列出旧库所有表
list=$
# 循环重命名
for t in $list;do
mysql -uroot -p123456 -e "RENAME TABLE old_db.\`$t\` TO new_db.\`$t\`;",不过,done
# 最终删除旧库
mysql -uroot -p123456 -e "DROP DATABASE old_db;",说起来,
至于一步步实战。从 “old_database” 改为 “new_database”
1️⃣ 前置准备——完整备份是唯一底线
使用以下命令生成物理备份和逻辑备份双保险:
# 物理快照
rsync -a /var/lib/mysql/old_database /backup/mysql_old_database_$
# 逻辑备份
mysqldump -u root -p --routines --triggers --events old_database> /backup/old_database.sql
2️⃣ 创建目标库并设置字符集、排序规则
mysql -u root -p -e "
CREATE DATABASE new_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;"
3️⃣ 导入数据并校验完整性
# 导入
mysql -u root -p new_database
4️⃣ 切换业务连接 & 删除旧库
在确认新库无误后更新应用配置中的数据库名称,接下来执行:
mysql -u root -p123456 -e "DROP DATABASE old_database;"
批量重命名表名的 Shell 脚本实用模板
#!/bin/bash
OLD_DB="old_db"
NEW_DB="new_db"
MYSQL_USER="root"
MYSQL_PWD="123456"
tables=$(mysql -u${MYSQL_USER} -p${MYSQL_PWD} \
-Nse "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${OLD_DB}';")
for tbl in $tables;do
echo "Renaming ${OLD_DB}.${tbl} -> ${NEW_DB}.${tbl}"
mysql -u${MYSQL_USER} "-p${MYSQL_PWD}" \
-e "RENAME TABLE \`${OLD_DB}\`.\`${tbl}\` TO \`${NEW_DB}\`.\`${tbl}\`;"
done
echo "All tables have been moved to ${NEW_DB}."
# 可选:删除旧库
# mysql -u${MYSQL_USER} "-p${MYSQL_PWD}" \
# -e "DROP DATABASE ${OLD_DB};"
关键注意事项——避免踩坑的检查清单
- 务必先做两份以上备份:a) 数据库 dump;b) 文件程序快照,
- 确认字符集一致:Mysql5.7+ 推荐使用 utf8mb4,防止中文乱码。
- AUTO_INCREMENT 冲突:b) 导入前检查自增值是否被覆盖。
- CUSTOM USER 权限迁移:b) 原库使用者、视图、触发器需要重新授权。
- PITR: b) 若有 binlog。记录下最终一次 binlog 位点,以便回滚。
- SERVICE 停机窗口:b) 在业务低峰期执行 rename 或 dump/import 操作。
- TEMPORARY 表和 SESSION 变量:b) 确认没有活跃事务,否则会导致锁死。
SQL Server 中修改数据库实例名称的快捷方式
If you are using Microsoft SQL Server,built‑in stored procedure makes it painless:
SYSTEM>
USE master;GO
EXEC sp_renamedb @dbname = N'OldDB',@newname = N'NewDB';GO
-- 验证:
SELECT name FROM sys.databases WHERE name = 'NewDB';
至于小结。把“痛点”转化为“流程”,让数据库更名不再恐慌!
- **先备份**:任何一步骤之前都要做好完整备份。按理说,- **选合适方案**:小库可用 RENAME;说起来,大库推荐 dump+import;同实例搬迁可用 RENAME TABLE。- **脚本自动化**:避免手工敲错,多表场景建议使用上面的 Bash 示例。- **验证&切换**:导入后对比行数、索引、约束,再统一切换连接字符串。- **清理**:确认新库稳定后安全 drop 老库,释放硬盘空间。
只要遵循以上步骤。你就能轻松把「old_db」改成「new_db」,不必担心数据丢失或业务中断。按理说,

