zoukankan      html  css  js  c++  java
  • mysql数据库改名的三种方法

    前不久去面试,被问到Innodb引擎的表如何改数据库名,当时我也只回答了MyISAM改如何操作,被一些细节问题打败,真是操蛋。

    如果表示MyISAM那么可以直接去到数据库目录mv就可以。

    Innodb完全不行,自己测试过,会提示相关表不存在。

    第一种方法:

    1
    RENAME database olddbname TO newdbname

    这个是5.1.7到5.1.23版本可以用的,但是官方不推荐,会有丢失数据的危险

    第二种方法:

    1.创建需要改成新名的数据库。
    2.mysqldum 导出要改名的数据库
    3.删除原来的旧库(确定是否真的需要)
    当然这种方法虽然安全,但是如果数据量大,会比较耗时,哎,当时连这种方法都没有想到,真有想死的冲动。

    第三种方法:

    我这里就用一个脚本,很简单,相信大家都看的懂

    复制代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    # 假设将sakila数据库名改为new_sakila
    # MyISAM直接更改数据库目录下的文件即可
    mysql -uroot -p123456 -e 'create database if not exists new_sakila'
     
    list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='sakila'")
     
    for table in $list_table
    do
        mysql -uroot -p123456 -e "rename table sakila.$table to new_sakila.$table"
    done

    这里用到了rename table,改表名的命令,但是如果新表名后面加数据库名,就会将老数据库的表移动到新的数据库,所以,这种方法即安全,又快速。

    实例配置:

     cat weifeng_rename.sh 
    #!/bin/bash
    # 假设将weifeng数据库名改为weifeng_test
    
    mysql -uroot -p123456 -e 'create database if not exists weifeng_test'
     
    list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='weifeng'")
     
    for table in $list_table
    do
        mysql -uroot -p123456 -e "rename table weifeng.$table to weifeng_test.$table"
    done
  • 相关阅读:
    cookie实例---显示上一次访问的时间与java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
    No Mapping For GET "xxx.do"
    Mybatis 配置文件
    spring整合JUnit测试
    Spring 约束文件配置
    c3p0封装
    Linux下载:wget、yum与apt-get用法及区别
    docker安装各种坑
    动态管理upsteam---nginx_http_dyups_module
    安装nginx环境(含lua)时遇到报错ngx_http_lua_common.h:20:20: error: luajit.h: No such file or directory的解决
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/9272214.html
Copyright © 2011-2022 走看看