workbench修改数据库名称 - mysql重新命名




如何快速重命名MySQL数据库(更改模式名称)? (20)

简单的方法

切换到数据库目录:

cd /var/lib/mysql/

关闭MySQL ...这很重要!

/etc/init.d/mysql stop

好的,这种方式不适用于InnoDB或BDB数据库。

重命名数据库:

mv old-name new-name

...或桌子...

cd database/

mv old-name.frm new-name.frm

mv old-name.MYD new-name.MYD

mv old-name.MYI new-name.MYI

重新启动MySQL

/etc/init.d/mysql start

完成...

好的,这种方式不适用于InnoDB或BDB数据库。 在这种情况下,您必须转储数据库并重新导入它。

MySQL的MySQL手册涵盖了这一点。

通常我只是转储数据库并用一个新名称重新导入它。 对于非常大的数据库,这不是一个选项。 显然RENAME {DATABASE | SCHEMA} db_name TO new_db_name; RENAME {DATABASE | SCHEMA} db_name TO new_db_name; MySQL

这需要与InnoDB协同工作, InnoDB存储的内容与MyISAM非常不同。


MySQL目前不支持通过其命令接口重命名数据库,但如果您有权访问MySQL存储其数据库的目录,则可以重命名数据库。 对于默认的MySQL安装,这通常位于MySQL安装目录下的Data目录中。 找到要在Data目录下重命名的数据库的名称并重命名它。 重命名目录可能会导致一些权限问题。 意识到。

注意:您必须先停止MySQL,然后才能重命名数据库

我建议创建一个新的数据库(使用你想要的名称)并将你需要的数据从旧数据导出/导入到新数据库中。 很简单。


For mac users, you can use Sequel Pro (free), which just provide the option to rename Databases. Though it doesn't delete the old DB.

once open the relevant DB just click: Database --> Rename database...


Here is a quick way to generate renaming sql script, if you have many tables to move.

SELECT DISTINCT CONCAT('RENAME TABLE ', t.table_schema,'.', t.table_name, ' TO ',     
t.table_schema, "_archive", '.', t.table_name, ';' ) as Rename_SQL 
FROM information_schema.tables t
WHERE table_schema='your_db_name' ;

If you are using phpMyAdmin you can go to the "operations" tab once you have selected the database you want to rename. Then go to the last section "copy database to" (or something like that), give a name, and select the options below. In this case, I guess you must select "structure and data" and "create database before copying" checkboxes and, finally, press the "go" button in that section.

By the way, I'm using phpMyAdmin in Spanish so I'm not sure what the names of the sections are in English.


In MySQL Administrator do the following:

  1. Under Catalogs, create a new database schema.
  2. Go to Backup and create a backup of the old schema.
  3. Execute backup.
  4. Go to Restore and open the file created in step 3.
  5. Select 'Another Schema' under Target Schema and select the new database schema.
  6. Start Restore.
  7. Verify new schema and, if it looks good, delete the old one.

This works for all databases and works by renaming each table with maatkit mysql toolkit

Use mk-find to print and rename each table. The man page has many more options and examples

mk-find --dblike OLD_DATABASE --print --exec "RENAME TABLE %D.%N TO NEW_DATABASE.%N"

If you have maatkit installed ( which is very easy ), then this is the simplest way to do it.


in phpmyadmin you can easily rename the database

select database 

  goto operations tab

  in that rename Database to :

  type your new database name and click go

ask to drop old table and reload table data click OK in both

Your database is renamed


为了您的方便,下面是一个小的shell脚本,必须用两个参数执行:db-name和新的db-name。

如果您不在主目录中使用.my.cnf文件,则可能需要将登录参数添加到mysql-lines。 请在执行此脚本之前进行备份。

#!/usr/bin/env bash

mysql -e "CREATE DATABASE $2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
for i in $(mysql -Ns $1 -e "show tables");do
    echo "$1.$i -> $2.$i"
    mysql -e "rename TABLE $1.$i to $2.$i"
done
mysql -e "DROP DATABASE $1"

你可以使用这个shell脚本:

参考: 如何重命名MySQL数据库?

#!/bin/bash
set -e # terminate execution on command failure

mysqlconn="mysql -u root -proot"
olddb=$1
newdb=$2
$mysqlconn -e "CREATE DATABASE $newdb"
params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES \
                           WHERE table_schema='$olddb'")
for name in $params; do
      $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
done;
$mysqlconn -e "DROP DATABASE $olddb"

它的工作:

$ sh rename_database.sh oldname newname

可以将数据库中的所有表重命名为在另一个数据库下,而无需执行完全转储和恢复。

DROP PROCEDURE IF EXISTS mysql.rename_db;
DELIMITER ||
CREATE PROCEDURE mysql.rename_db(IN old_db VARCHAR(100), IN new_db VARCHAR(100))
BEGIN
SELECT CONCAT('CREATE DATABASE ', new_db, ';') `# create new database`;
SELECT CONCAT('RENAME TABLE `', old_db, '`.`', table_name, '` TO `', new_db, '`.`', table_name, '`;') `# alter table` FROM information_schema.tables WHERE table_schema = old_db;
SELECT CONCAT('DROP DATABASE `', old_db, '`;') `# drop old database`;
END||
DELIMITER ;

$ time mysql -uroot -e "call mysql.rename_db('db1', 'db2');" | mysql -uroot

但是目标数据库中的任何触发器都不会很快乐。 您需要先删除它们,然后在重命名后重新创建它们。

mysql -uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot
ERROR 1435 (HY000) at line 4: Trigger in wrong schema

在MySQL中模拟丢失的RENAME DATABASE命令:

  1. 创建一个新的数据库
  2. 创建重命名查询:

    SELECT CONCAT('RENAME TABLE ',table_schema,'.',table_name,
        ' TO ','new_schema.',table_name,';')
    FROM information_schema.TABLES
    WHERE table_schema LIKE 'old_schema';
    
  3. 运行该输出

  4. 删除旧数据库

它来自于仿真MySQL中丢失的RENAME DATABASE命令



当您在PHPMyAdmin中重命名数据库时,它会创建一个转储,然后使用新名称删除并重新创建数据库。


提出了一个关于服务器故障的问题,试图通过使用MySQL代理恢复非常大的数据库时避免停机。 我没有取得任何成功,但我最终意识到我想要的是RENAME DATABASE功能,因为由于数据库的大小,转储/导入不是一个选项。

MySQL内置了RENAME TABLE功能,因此我最终编写了一个简单的Python脚本来为我完成这项工作。 我已经将它发布到GitHub上 ,以防其他人使用它。


我最近才遇到了一个非常好的方法来实现它,与MyISAM和InnoDB一起工作,速度非常快:

RENAME TABLE old_db.table TO new_db.table;

我不记得我在哪里读过它,但是信用证发给别人而不是我。


最简单的完全重命名的bullet-and-fool-proof方式(包括在最后删除旧数据库,因此它是重命名而不是副本)

mysqladmin -uroot -pmypassword create newdbname
mysqldump -uroot -pmypassword --routines olddbname | mysql -uroot -pmypassword newdbname
mysqladmin -uroot -pmypassword drop olddbname

脚步:

  1. 将行复制到记事本中。
  2. 用您的等价物替换对“olddbname”,“newdbname”,“mypassword”(+可选“root”)的所有引用。
  3. 在命令行上逐个执行(出现提示时输入“y”)。

最简单的方法是使用HeidiSQL软件。 它是免费且开源的。 它运行在Windows和Wine上的任何Linux上(在Linux,BSD,Solaris和Mac OS X上运行Windows应用程序)。

要下载HeidiSQL,请转到http://www.heidisql.com/download.php

要下载Wine,请转到http://www.winehq.org/

要在HeidiSQL中重命名数据库,只需右键单击数据库名称并选择'编辑'。 然后输入一个新名称,然后按'确定'。

它非常简单。


这是我使用的:

$ mysqldump -u root -p olddb >~/olddb.sql
$ mysql -u root -p
mysql> create database newdb;
mysql> use newdb
mysql> source ~/olddb.sql
mysql> drop database olddb;

这里是我写的一个批处理文件,用于从命令行自动执行它,但是它用于Windows / MS-DOS。

语法是rename_mysqldb数据库newdatabase -u [用户] -p [密码]

:: ***************************************************************************
:: FILE: RENAME_MYSQLDB.BAT
:: ***************************************************************************
:: DESCRIPTION
:: This is a Windows /MS-DOS batch file that automates renaming a MySQL database 
:: by using MySQLDump, MySQLAdmin, and MySQL to perform the required tasks.
:: The MySQL\bin folder needs to be in your environment path or the working directory.
::
:: WARNING: The script will delete the original database, but only if it successfully
:: created the new copy. However, read the disclaimer below before using.
::
:: DISCLAIMER
:: This script is provided without any express or implied warranties whatsoever.
:: The user must assume the risk of using the script.
::
:: You are free to use, modify, and distribute this script without exception.
:: ***************************************************************************

:INITIALIZE
@ECHO OFF
IF [%2]==[] GOTO HELP
IF [%3]==[] (SET RDB_ARGS=--user=root) ELSE (SET RDB_ARGS=%3 %4 %5 %6 %7 %8 %9)
SET RDB_OLDDB=%1
SET RDB_NEWDB=%2
SET RDB_DUMPFILE=%RDB_OLDDB%_dump.sql
GOTO START

:START
SET RDB_STEP=1
ECHO Dumping "%RDB_OLDDB%"...
mysqldump %RDB_ARGS% %RDB_OLDDB% > %RDB_DUMPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=2
ECHO Creating database "%RDB_NEWDB%"...
mysqladmin %RDB_ARGS% create %RDB_NEWDB%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=3
ECHO Loading dump into "%RDB_NEWDB%"...
mysql %RDB_ARGS% %RDB_NEWDB% < %RDB_DUMPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=4
ECHO Dropping database "%RDB_OLDDB%"...
mysqladmin %RDB_ARGS% drop %RDB_OLDDB% --force
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=5
ECHO Deleting dump...
DEL %RDB_DUMPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
ECHO Renamed database "%RDB_OLDDB%" to "%RDB_NEWDB%".
GOTO END

:ERROR_ABORT
IF %RDB_STEP% GEQ 3 mysqladmin %RDB_ARGS% drop %NEWDB% --force
IF %RDB_STEP% GEQ 1 IF EXIST %RDB_DUMPFILE% DEL %RDB_DUMPFILE%
ECHO Unable to rename database "%RDB_OLDDB%" to "%RDB_NEWDB%".
GOTO END

:HELP
ECHO Renames a MySQL database.
ECHO Usage: %0 database new_database [OPTIONS]
ECHO Options: Any valid options shared by MySQL, MySQLAdmin and MySQLDump.
ECHO          --user=root is used if no options are specified.
GOTO END    

:END
SET RDB_OLDDB=
SET RDB_NEWDB=
SET RDB_ARGS=
SET RDB_DUMP=
SET RDB_STEP=




rename