如何修改MySQL数据库名称
需求
比如数据库名称old_db
想改名为new_db
MySQL修改数据库名称比较麻烦,不支持直接修改,需要通过其它方式间接达到修改数据库名称的目的。
在 MySQL 5.1.23 之前的旧版本中,我们可以使用 RENAME DATABASE
来重命名数据库,但此后版本,因为安全考虑,删掉了这一命令。
先导出数据,再导入数据
当数据库体积比较小时,最快的方法是使用 mysqldump
命令来创建整个数据库的转存副本,然后新建数据库,再把副本导入到新数据库中。
先创建新库
复制create database new_db;
使用mysqldump导出数据
复制mysqldump -uroot -p123456 --set-gtid-purged=OFF old_db > /tmp/old_db.sql
仅是做普通的本机备份恢复时,可以添加
--set-gtid-purged=OFF
作用是在备份时候不出现GTID信息
导入数据到新库
复制mysql -uroot -p123456 new_db < /tmp/old_db.sql
通过修改表名称,间接实现修改数据库名称
使用此方法实际上将所有表从一个数据库移动到另一个数据库,这实际上重命名了该数据库(MySQL没有单个语句的操作),移动后原始数据库继续存在,但是里面没有表。
先创建新库
复制create database new_db;
使用RENAME TABLE 命令修改表名,将表移动到新的库里
复制rename table old_db.tb to new_db.tb;
完成后删除旧库
复制drop database old_db;
使用shell脚本来批量修改表名
复制#!/bin/bash
# 例如将 payment-mobile 数据库名改为 payment_mobile
mysql_path="/usr/local/mysql/bin/mysql"
username="root"
password="123456"
source_db="\`test-db\`"
source_db_where="test-db"
target_db="\`test_db\`"
${mysql_path} -u${username} -p${password} -e "create database if not exists ${target_db}"
list_table=$(${mysql_path} -u${username} -p${password} -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='${source_db_where}'")
for table in ${list_table}
do
rename_command="rename table ${source_db}.\`${table}\` to ${target_db}.\`${table}\`"
${mysql_path} -u${username} -p${password} -e "${rename_command}"
done
注意,数据库名和表名最好使用``包裹,避免包含特殊字符如-
,where语句中的值不能包裹。
- -e, --execute=name # 执行mysql的sql语句
- -N, --skip-column-names # 不显示列信息
- -s, --silent # 一行一行输出,中间有tab分隔
总结
导出数据再导入的方式在数据量很大的情况下会很慢,但很安全。
修改表名的方式很安全和快速,但修改之后原有的数据库立刻就不能使用了,不能平滑的过渡。
参考
如何修改MySQL数据库名称
三种方式修改 MySQL 数据库名
mysqldump关于--set-gtid-purged=OFF的使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-09-17 IDEA对jsr305的Nonnull注解和Guava的Beta注解的支持