【工具】 脚本入门 -- Windows 使用 shell 脚本修改 MySQL 数据库名

24 篇文章 1 订阅
20 篇文章 0 订阅

问题描述

想修改数据库名,发现不能使用 rename 操作。
1. 官方不支持 rename database 的操作。
2. 可以使用 shell 脚本实现安全高效得改名
3. windows 平台通过安装 git for windows 可以解析 shell 脚本
4. Innodb 比 MyISAM 的改名步骤更为复杂

尝试解决

  • 直接修改磁盘文件命名
    将data目录中的db_name目录重命名为new_db_name :MyISAM 成功, Innodb 失败
    具体原因【推测】为 Innodb 和 MyISAM 的数据存储结构不同,Innodb将索引和数据问题全都放入ibd文件,只修改ibd文件名,其内部的索引和数据的组织依赖还未能修改。而MyISAM将索引和数据拆分,修改文件名后能同时修改索引和数据的依赖。
    在这里插入图片描述

  • 使用脚本
    2.1 必备知识点:

    把【INFORMATION_SCHEMA】 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
    在 【INFORMATION_SCHEMA 】中,有数个 只读 表。它们实际上是 视图 ,而不是基本表,因此,你将无法看到与之相关的任何文件。脚本中使用 information_schema.TABLES 用于检索带指定数据库前缀的表名

    【TABLE_SCHEMA】可理解为数据库名, MySQL 中 database 和 schema 几乎可以等价

    修改表的前缀名,相当于调整该表文件的目录

    cmd : mysql -? 可以查看运行参数的含义

    在这里插入图片描述
    在这里插入图片描述

    git : sh xx.sh 可以在 windows 上执行shell脚本

    #!/bin/sh
    old_db="practice1"
    new_db="practice"
    mysql -uroot -proot -e "create database if not exists ${new_db}"
    list_table=$(mysql -uroot -proot -Nse "select table_name from information_schema.TABLES where 			TABLE_SCHEMA = '${old_db}'")
    for table in $list_table
    do
    	mysql -uroot -proot -e "use $old_db;rename table $table to $new_db.$table";
    done
     	mysql -uroot -proot -e "drop database $old_db;"
    

参考博文:
https://www.cnblogs.com/allenhua/p/5393189.html
https://blog.csdn.net/weixin_38972910/article/details/86012110

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值