如何修改MySQL数据库名称

news/发布时间2024/5/18 16:39:12

需求

比如数据库名称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_mobilemysql_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}
dorename_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的使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/67340681.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Unix/Linux系统编程学习笔记二

学习笔记二 一、教材知识点总结 1. I/O库函数程序(1)fopen()使用字符串表示模式,其中"r"表示READ"w"表示WRITE。它返回一个指向FILE结构体的指针。fopen()首先发出open()系统调用来打开文件,以获取文件描述符编号fd。如果open0系统调用失败,则fopen()会…

应用层-常见协议

应用层概述:TCP/IP模型的最高层 直接为应用程序提供网络服务 常用的应用层协议:DNS HTTP SMPT与POP3/IMAP Telnet FTP与TFTP DNS协议: DNS(Domain Name System 域名解析系统)建立IP地址与域名之间的映射关系 将域名解析为IP地址 将IP地址解析为域名DSN解析过程:主机A向D…

C++实现论文查重

软件工程 https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014作业要求 根据给出的样例进行查重,并把结果记录在PSP表格中作业目的 对查重有一定的初步了解GitHub链接 https://github.com/xingch123456789/3119000414PSP表格PSP2.1 Personal Software Process S…

查找范围动态变化

问题:查找范围在不同列,如何使用一个公式下拉完成 函数公式解决:=VLOOKUP(E3,OFFSET(AM$1:AN$17,,MATCH("高"&LEFT(B3)&"赋分",AN$1:AQ$1,)),2,)使用Offset函数,以AM1:AN17为起点,向下不偏移,向右偏移由B列最左的汉字决定。 使用Match函数,…

软件设计模式系列之七——原型模式

原型模式(Prototype Pattern)是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象,而不是使用构造函数。原型模式将对象的创建委托给原型对象,通过克隆(复制)来生成新对象,这种方式可以避免对象的重复初始化,提高性能,并使对象的创建更加灵活和动态。1 模…