MySQL手册中有介绍。

通常我只是转储数据库并用一个新名称重新导入它。这不是非常大的数据库的一个选项。重命名数据库| SCHEMA} db_name TO new_db_name做坏事,只存在于少数版本中,总的来说是个坏主意。

这需要与InnoDB一起工作,InnoDB存储的东西与MyISAM非常不同。


当前回答

这里已经有很多非常好的答案,但我没有看到PHP版本。这将在大约一秒钟内复制一个800M DB。

$oldDbName = "oldDBName";
$newDbName = "newDBName";
$oldDB     = new mysqli("localhost", "user", "pass", $oldDbName);
if($oldDB->connect_errno){
    echo "Failed to connect to MySQL: (" . $oldDB->connect_errno . ") " . $oldDB->connect_error;
    exit;
}
$newDBQuery = "CREATE DATABASE IF NOT EXISTS {$newDbName}";
$oldDB->query($newDBQuery);
$newDB = new mysqli("localhost", "user", "pass");
if($newDB->connect_errno){
    echo "Failed to connect to MySQL: (" . $newDB->connect_errno . ") " . $newDB->connect_error;
    exit;
}

$tableQuery  = "SHOW TABLES";
$tableResult = $oldDB->query($tableQuery);
$renameQuery = "RENAME TABLE\n";
while($table = $tableResult->fetch_array()){
    $tableName = $table["Tables_in_{$oldDbName}"];
    $renameQuery .= "{$oldDbName}.{$tableName} TO {$newDbName}.{$tableName},";
}
$renameQuery = substr($renameQuery, 0, strlen($renameQuery) - 1);
$newDB->query($renameQuery);

其他回答

ALTER DATABASE是MySQL建议的解决方法,RENAME DATABASE被删除。

从13.1.32 RENAME数据库语法:

RENAME {DATABASE | SCHEMA} db_name TO new_db_name;

此语句是在MySQL 5.1.7中添加的,但被发现是危险的,在MySQL 5.1.23中被删除。

三个选项:

创建新数据库,关闭服务器,将文件从一个数据库文件夹移动到另一个数据库文件夹,然后重新启动服务器。注意,这只在所有表都是MyISAM的情况下才有效。 创建新的数据库,使用Create TABLE…LIKE语句,然后使用INSERT…从语句中选择*。 使用mysqldump并重新加载该文件。

对于mac用户,你可以使用Sequel Pro(免费),它只提供重命名数据库的选项。虽然它不会删除旧的DB。

一旦打开相关的数据库,只需点击:数据库——>重命名数据库…

执行完整重命名的最简单且万无一失的方法(包括在最后删除旧数据库,因此它是重命名而不是复制):

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

步骤:

复制行到记事本。 替换所有对"olddbname", "newdbname", "mypassword"(+可选的"root")的引用。 在命令行上逐一执行(在提示时输入“y”)。

你不能这么做是有原因的。(尽管有很多尝试的答案)

基本的答案在许多情况下都有效,但在其他情况下会导致数据损坏。 需要根据对数据库的启发式分析来选择策略。 这就是实现这个特性,然后又删除它的原因。(医生)

您需要转储该数据库中的所有对象类型,创建新命名的对象类型,然后导入转储。如果这是一个正常的系统,你得把它关掉。如果不能,则需要设置从此数据库到新数据库的复制。

如果您想查看可以执行此操作的命令,@satishD提供了详细信息,其中传达了一些挑战,您需要围绕这些挑战构建与目标数据库匹配的策略。