Как быстро переименовать базу данных MySQL (изменить имя схемы)?

842

Руководство по MySQL в MySQL описывает это.

Обычно я просто сбрасываю базу данных и reimport с новым именем. Это не вариант для очень больших баз данных. По-видимому, RENAME {DATABASE | SCHEMA} db_name TO new_db_name; делает плохие вещи, существует только в нескольких версиях, и это плохая идея в целом.

Это должно работать с InnoDB, который хранит вещи совсем по-другому, чем MyISAM.

  • 2
    Также на serverfault: serverfault.com/questions/195221/how-to-rename-a-mysql-database
  • 5
    Это утверждение RENAME DATABASE Syntax было добавлено в MySQL 5.1.7, но было признано опасным и было удалено в MySQL 5.1.23.
Показать ещё 2 комментария
Теги:
database
rename
innodb

47 ответов

724
Лучший ответ

Для InnoDB, похоже, работает следующее: создайте новую пустую базу данных, а затем переименуйте каждую таблицу в свою очередь в новую базу данных:

RENAME TABLE old_db.table TO new_db.table;

После этого вам нужно будет настроить разрешения.

Для сценариев в оболочке вы можете использовать одно из следующих действий:

mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \ 
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done

или

for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;

Примечания: между опцией -p и паролем нет пробела. Если ваша база данных не имеет пароля, удалите часть -u username -ppassword.

Кроме того, если у вас есть хранимые процедуры, вы можете их скопировать позже:

mysqldump -R old_db | mysql new_db
  • 2
    Это хороший вариант и способ пойти, если ваша база данных большая, но у вас не так много таблиц (или вы готовы написать скрипт для зацикливания всех таблиц). Кроме того, в innodb это только логическое переименование, а в MyISAM, в зависимости от вашей файловой системы, это будет логическое переименование или реальное копирование данных на диск.
  • 20
    Я только что сделал это с базой данных InnoDB с более чем 30 таблицами, используя настройку file_per_table, и хотя в некоторых таблицах было более 3 миллионов строк, это завершилось за <1 секунду. Просто кажется, что файлы перемещаются в хранилище, а не что-то более сложное ... +2, если это возможно :)
Показать ещё 13 комментариев
414

Используйте эти несколько простых команд:

mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql

Или для уменьшения ввода-вывода используйте следующее, предложенное @Pablo Marin-Garcia:

mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase
  • 78
    Как сказал ОП, «это не вариант для очень больших баз данных».
  • 3
    Не забудьте удалить оригинальную базу данных
Показать ещё 5 комментариев
189

Я думаю, что решение проще и было предложено некоторыми разработчиками. Для этого у phpMyAdmin есть операция.

Из phpMyAdmin выберите базу данных, которую вы хотите выбрать. На вкладках там называется "Операции", перейдите в раздел переименования. Это все.

Он, как и многие другие, создает новую базу данных с новым именем, удаляет все таблицы старой базы данных в новую базу данных и удаляет старую базу данных.

Изображение 813

  • 69
    Предполагая, что у вас даже есть php в вашей среде или вы используете phpmyadmin.
  • 25
    Довольно опасно, даже если у вас есть phpMyAdmin - сервер может потерпеть неудачу в середине процесса, оставив две базы данных в неизвестном состоянии, или это может занять очень много времени, что приведет к зависанию интерфейса или тайм-ауту PHP.
Показать ещё 11 комментариев
89

Вы можете использовать SQL для генерации сценария SQL для переноса каждой таблицы в исходной базе данных в целевую базу данных.

Перед запуском сценария, созданного в команде, необходимо создать базу данных назначения.

Вы можете использовать любой из этих двух сценариев (я изначально предложил, чтобы кто-то "улучшил" мой ответ, чтобы использовать GROUP_CONCAT. Возьмите свой выбор, но я предпочитаю оригинал):

SELECT CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name, '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

или

SELECT GROUP_CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name SEPARATOR '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

($ 1 и $ 2 - источник и целевой показатель соответственно)

Это создаст команду SQL, которую вам нужно будет запустить.

Обратите внимание, что GROUP_CONCAT имеет ограничение по умолчанию, которое может быть превышено для баз данных с большим количеством таблиц. Вы можете изменить этот предел, выполнив SET SESSION group_concat_max_len = 100000000; (или какое-то другое большое количество).

  • 0
    @BlakeFrederick Он не использует базу данных RENAME, так в чем же проблема?
  • 0
    Это именно то, что я ищу, спасибо.
25

Три варианта:

  • Создайте новую базу данных, снизьте сервер, переместите файлы из одной папки базы данных в другую и перезапустите сервер. Обратите внимание, что это будет работать, только если ВСЕ ваши таблицы являются MyISAM.

  • Создайте новую базу данных, используйте инструкции CREATE TABLE... LIKE, а затем используйте инструкции INSERT... SELECT * FROM.

  • Используйте mysqldump и перезагружайтесь с этим файлом.

  • 0
    + для справки myisam. Я не мог понять, почему это не сработало для меня.
  • 5
    В вопросе говорится, что это должно работать для InnoDB, а не MyISAM
24

Простой способ

Перейдите в каталог базы данных:

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. В этом случае вам нужно сбросить базу данных и повторно импортировать ее.

  • 14
    это не будет работать с InnoDB
  • 5
    Это будет работать с InnoDB, если он установлен в один файл на таблицу
Показать ещё 4 комментария
21

Я только недавно наткнулся на очень хороший способ сделать это, работает с MyISAM и InnoDB и очень быстро:

RENAME TABLE old_db.table TO new_db.table;

Я не помню, где я его читал, но кредит принадлежит другому, а не мне.

  • 0
    @ArkadijKuzhel так не думаю. Я думаю, что вы говорите о RENAME DATABASE.
  • 0
    Это действительно помогло, я создал новую пустую базу данных, а затем использовал код, все таблицы были импортированы с нужными именами.
Показать ещё 1 комментарий
18

Эмуляция отсутствующей команды RENAME DATABASE в MySQL:

  • Создать новую базу данных
  • Создайте запросы переименования с помощью:

    SELECT CONCAT('RENAME TABLE ',table_schema,'.',table_name,
        ' TO ','new_schema.',table_name,';')
    FROM information_schema.TABLES
    WHERE table_schema LIKE 'old_schema';
    
  • Запустите этот вывод

  • Удалить старую базу данных

Это было взято из Эмулировать недостающую команду RENAME DATABASE в MySQL.

  • 0
    Отлично! Я проверил это с помощью таблиц InnoDB и MyISAM. Самое быстрое решение, которое я тестировал (переименование таблицы происходит практически мгновенно, без задержек)!
16

Это то, что я использую:

$ 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;
  • 13
    Не выполнимо для огромных баз данных.
14

MySQL не поддерживает переименование базы данных через свой командный интерфейс на данный момент, но вы можете переименовать базу данных, если у вас есть доступ к каталогу, в котором MySQL хранит свои базы данных. Для установок MySQL по умолчанию это обычно находится в каталоге данных в каталоге, где был установлен MySQL. Найдите имя базы данных, которую вы хотите переименовать в каталоге данных, и переименуйте ее. Однако переименование каталога может вызвать некоторые проблемы с разрешениями. Имейте в виду.

Примечание. Вы должны остановить MySQL, прежде чем сможете переименовать базу данных

Я бы рекомендовал создать новую базу данных (используя нужное имя) и экспортировать/импортировать нужные данные из старого в новое. Довольно просто.

  • 12
    Это не будет работать, если у вас есть таблицы InnoDB
13

Простейший пуленепробиваемый способ выполнения полного переименования (включая удаление старой базы данных в конце, чтобы переименование, а не копия):

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

Шаги:

  • Скопируйте строки в Блокнот.
  • Замените все ссылки на "olddbname", "newdbname", "mypassword" (+ опционально "root" ) с вашими эквивалентами.
  • Выполняйте один за другим в командной строке (ввод "y" при появлении запроса).
  • 0
    Может быть, это решение может вызвать проблемы с разрешениями пользователей ..
  • 0
    Не добавляйте свой пароль в консоль, так как он небезопасен. Если вы уже сделали это, используйте для удаления историю -cw. Вместо этого оставьте пароль пустым и введите его после приглашения.
Показать ещё 1 комментарий
13

Когда вы переименовываете базу данных в PHPMyAdmin, она создает дамп, затем сбрасывает и воссоздает базу данных с новым именем.

  • 4
    Обратите внимание, что эта функция немного скрыта на вкладке «Операции», когда вы нажимаете на базу данных.
12

Для пользователей Mac, Sequel Pro имеет параметр "Переименовать базу данных" в меню "База данных". http://www.sequelpro.com/

  • 5
    Остерегайтесь этой опции, если у вас есть какие-либо представления или триггеры в вашей базе данных. За этой опцией меню находится скрипт, который создаст новую базу данных и переместит все таблицы. Это не будет работать для представлений или триггеров, поэтому они останутся в вашей старой базе данных. В результате две поврежденные базы данных нуждаются в исправлении.
11

Ну есть 2 метода:

Метод 1: Известный метод переименования схемы базы данных - это сброс схемы с помощью Mysqldump и восстановление ее в другой схеме, а затем удаление старой схемы (при необходимости).

Из оболочки

 mysqldump emp > emp.out
 mysql -e "CREATE DATABASE employees;"
 mysql employees < emp.out 
 mysql -e "DROP DATABASE emp;"

Несмотря на то, что вышеупомянутый метод прост, это время и пространство. Что делать, если схема больше, чем 100 ГБ?. Существуют методы, с помощью которых вы можете объединить приведенные выше команды, чтобы сохранить их в пространстве, однако это не сэкономит время.

Чтобы исправить такие ситуации, существует еще один быстрый способ переименования схем, однако при этом необходимо соблюдать осторожность.

Метод 2: У MySQL есть очень хорошая функция для переименования таблиц, которые даже работают в разных схемах. Эта операция переименования является атомарной, и никто другой не может получить доступ к таблице при ее переименовании. Это займет короткое время, так как изменение имени таблицы или ее схемы - это только изменение метаданных. При выполнении переименования существует процедурный подход:

Создайте новую схему базы данных с нужным именем. Переименуйте таблицы из старой схемы в новую схему, используя команду "RENAME TABLE" MySQL. Отбросьте старую схему базы данных. If there are views, triggers, functions, stored procedures in the schema, those will need to be recreated too. MySQLs "RENAME TABLE" терпит неудачу, если в таблицах существуют триггеры. Чтобы исправить это, мы можем сделать следующее:

1) Dump the triggers, events and stored routines in a separate file. Это выполняется с использованием флагов -E, -R (в дополнение к -t -d, который сбрасывает триггеры) команде mysqldump. После того, как триггеры будут сброшены, нам нужно будет удалить их из схемы, чтобы команда RENAME TABLE работала.

 $ mysqldump <old_schema_name> -d -t -R -E > stored_routines_triggers_events.out

2) Создайте список только таблиц "BASE". Их можно найти, используя запрос в таблице information_schema.TABLES.

 mysql> select TABLE_NAME from information_schema.tables where 
    table_schema='<old_schema_name>' and TABLE_TYPE='BASE TABLE';

3) Дамп представлений в выходном файле. Представления можно найти, используя запрос в той же таблице information_schema.TABLES.

mysql> select TABLE_NAME from information_schema.tables where 
   table_schema='<old_schema_name>' and TABLE_TYPE='VIEW';
 $ mysqldump <database> <view1> <view2> … > views.out

4) Отбросьте триггеры в текущих таблицах в old_schema.

mysql> DROP TRIGGER <trigger_name>;
...

5) Восстановите вышеуказанные файлы дампа, как только все базовые таблицы, найденные на шаге 2, будут переименованы.

mysql> RENAME TABLE <old_schema>.table_name TO <new_schema>.table_name;
...
$ mysql <new_schema> < views.out
$ mysql <new_schema> < stored_routines_triggers_events.out

Трудности с помощью вышеописанных методов. Возможно, нам потребуется обновить GRANTS для пользователей, чтобы они соответствовали правильному имени схемы. Они могут быть исправлены с помощью простых UPDATE таблиц mysql.columns_priv, mysql.procs_priv, mysql.tables_priv, mysql.db, обновляющих имя old_schema до new_schema и вызывающих "привилегии Flush". Хотя "метод 2" кажется немного более сложным, чем "метод 1", это вполне возможно для сценариев. Простой bash script для выполнения вышеуказанных шагов в правильной последовательности может помочь вам сэкономить место и время при переименовании схем баз данных в следующий раз.

Команда Percona Remote DBA написала script под названием "rename_db", который работает следующим образом:

[root@dba~]# /tmp/rename_db
rename_db <server> <database> <new_database>

Чтобы продемонстрировать использование этого script, использовали примерную схему "emp", создали тестовые триггеры, сохраненные подпрограммы на этой схеме. Попробует переименовать схему базы данных с помощью script, для завершения которой требуется несколько секунд, а не времени, использующего метод дампа/восстановления.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| emp                |
| mysql              |
| performance_schema |
| test               |
+--------------------+


[root@dba ~]# time /tmp/rename_db localhost emp emp_test
create database emp_test DEFAULT CHARACTER SET latin1
drop trigger salary_trigger
rename table emp.__emp_new to emp_test.__emp_new
rename table emp._emp_new to emp_test._emp_new
rename table emp.departments to emp_test.departments
rename table emp.dept to emp_test.dept
rename table emp.dept_emp to emp_test.dept_emp
rename table emp.dept_manager to emp_test.dept_manager
rename table emp.emp to emp_test.emp
rename table emp.employees to emp_test.employees
rename table emp.salaries_temp to emp_test.salaries_temp
rename table emp.titles to emp_test.titles
loading views
loading triggers, routines and events
Dropping database emp

real    0m0.643s
user    0m0.053s
sys     0m0.131s


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| emp_test           |
| mysql              |
| performance_schema |
| test               |
+--------------------+

Как видно из вышесказанного, схема базы данных "emp" была переименована в "emp_test" менее чем за секунду. Наконец, это script из Percona, который используется выше для "метода 2".

#!/bin/bash
# Copyright 2013 Percona LLC and/or its affiliates
set -e
if [ -z "$3" ]; then
    echo "rename_db <server> <database> <new_database>"
    exit 1
fi
db_exists=`mysql -h $1 -e "show databases like '$3'" -sss`
if [ -n "$db_exists" ]; then
    echo "ERROR: New database already exists $3"
    exit 1
fi
TIMESTAMP=`date +%s`
character_set=`mysql -h $1 -e "show create database $2\G" -sss | grep ^Create | awk -F'CHARACTER SET ' '{print $2}' | awk '{print $1}'`
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
STATUS=$?
if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then
    echo "Error retrieving tables from $2"
    exit 1
fi
echo "create database $3 DEFAULT CHARACTER SET $character_set"
mysql -h $1 -e "create database $3 DEFAULT CHARACTER SET $character_set"
TRIGGERS=`mysql -h $1 $2 -e "show triggers\G" | grep Trigger: | awk '{print $2}'`
VIEWS=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='VIEW'" -sss`
if [ -n "$VIEWS" ]; then
    mysqldump -h $1 $2 $VIEWS > /tmp/${2}_views${TIMESTAMP}.dump
fi
mysqldump -h $1 $2 -d -t -R -E > /tmp/${2}_triggers${TIMESTAMP}.dump
for TRIGGER in $TRIGGERS; do
    echo "drop trigger $TRIGGER"
    mysql -h $1 $2 -e "drop trigger $TRIGGER"
done
for TABLE in $TABLES; do
    echo "rename table $2.$TABLE to $3.$TABLE"
    mysql -h $1 $2 -e "SET FOREIGN_KEY_CHECKS=0; rename table $2.$TABLE to $3.$TABLE"
done
if [ -n "$VIEWS" ]; then
    echo "loading views"
    mysql -h $1 $3 < /tmp/${2}_views${TIMESTAMP}.dump
fi
echo "loading triggers, routines and events"
mysql -h $1 $3 < /tmp/${2}_triggers${TIMESTAMP}.dump
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
if [ -z "$TABLES" ]; then
    echo "Dropping database $2"
    mysql -h $1 $2 -e "drop database $2"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.columns_priv where db='$2'" -sss` -gt 0 ]; then
    COLUMNS_PRIV="    UPDATE mysql.columns_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.procs_priv where db='$2'" -sss` -gt 0 ]; then
    PROCS_PRIV="    UPDATE mysql.procs_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.tables_priv where db='$2'" -sss` -gt 0 ]; then
    TABLES_PRIV="    UPDATE mysql.tables_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.db where db='$2'" -sss` -gt 0 ]; then
    DB_PRIV="    UPDATE mysql.db set db='$3' WHERE db='$2';"
fi
if [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then
    echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:"
    if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi
    if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi
    if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi
    if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi
    echo "    flush privileges;"
fi
11

Вы можете использовать этот сценарий оболочки:

Справка: Как переименовать базу данных 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
  • 5
    Осторожнее с этим. Если вы не входите в систему как пользователь root, у вас может быть ограниченное разрешение. Причинение переименования не удастся, но удачное завершение приведет к удалению базы данных. Хороший сценарий в противном случае.
  • 2
    Я добавил set -e в начало скрипта, что приведет к прекращению выполнения при сбое и должно смягчить эту проблему.
9

Можно переименовать все таблицы в базе данных в другую базу данных без необходимости выполнять полный сброс и восстановление.

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

Однако любые триггеры в целевом db не будут счастливы. Сначала вам нужно отбросить их, а затем воссоздать их после переименования.

mysql -uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot
ERROR 1435 (HY000) at line 4: Trigger in wrong schema
  • 0
    небольшая настройка, которая делает эту работу w / mysql 5.x mysql --batch-uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot Обратите внимание, вы должны использовать --batch для изменения форматирования на необработанное форматирование, которое выводит результаты без форматирования.
7

Большинство ответов здесь неверны по одной из двух причин:

  1. Вы не можете использовать RENAME TABLE, потому что могут быть представления и триггеры. Если есть триггеры, RENAME TABLE не работает
  2. Вы не можете использовать mysqldump, если хотите "быстро" (по запросу в вопросе) переименовать большую базу данных

Percona имеет сообщение в блоге о том, как это сделать хорошо: https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/

и сценарий, опубликованный (сделанный?) Симоном Р Джонсом, который делает то, что предлагается в этом сообщении. Я исправил ошибку, которую я нашел в скрипте. Вы можете видеть это здесь:

https://gist.github.com/ryantm/76944318b0473ff25993ef2a7186213d

Вот его копия:

#!/bin/bash
# Copyright 2013 Percona LLC and/or its affiliates
# @see https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/
set -e
if [ -z "$3" ]; then
    echo "rename_db <server> <database> <new_database>"
    exit 1
fi
db_exists='mysql -h $1 -e "show databases like '$3'" -sss'
if [ -n "$db_exists" ]; then
    echo "ERROR: New database already exists $3"
    exit 1
fi
TIMESTAMP='date +%s'
character_set='mysql -h $1 -e "SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = '$2'" -sss'
TABLES='mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss'
STATUS=$?
if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then
    echo "Error retrieving tables from $2"
    exit 1
fi
echo "create database $3 DEFAULT CHARACTER SET $character_set"
mysql -h $1 -e "create database $3 DEFAULT CHARACTER SET $character_set"
TRIGGERS='mysql -h $1 $2 -e "show triggers\G" | grep Trigger: | awk '{print $2}''
VIEWS='mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='VIEW'" -sss'
if [ -n "$VIEWS" ]; then
    mysqldump -h $1 $2 $VIEWS > /tmp/${2}_views${TIMESTAMP}.dump
fi
mysqldump -h $1 $2 -d -t -R -E > /tmp/${2}_triggers${TIMESTAMP}.dump
for TRIGGER in $TRIGGERS; do
    echo "drop trigger $TRIGGER"
    mysql -h $1 $2 -e "drop trigger $TRIGGER"
done
for TABLE in $TABLES; do
    echo "rename table $2.$TABLE to $3.$TABLE"
    mysql -h $1 $2 -e "SET FOREIGN_KEY_CHECKS=0; rename table $2.$TABLE to $3.$TABLE"
done
if [ -n "$VIEWS" ]; then
    echo "loading views"
    mysql -h $1 $3 < /tmp/${2}_views${TIMESTAMP}.dump
fi
echo "loading triggers, routines and events"
mysql -h $1 $3 < /tmp/${2}_triggers${TIMESTAMP}.dump
TABLES='mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss'
if [ -z "$TABLES" ]; then
    echo "Dropping database $2"
    mysql -h $1 $2 -e "drop database $2"
fi
if [ 'mysql -h $1 -e "select count(*) from mysql.columns_priv where db='$2'" -sss' -gt 0 ]; then
    COLUMNS_PRIV="    UPDATE mysql.columns_priv set db='$3' WHERE db='$2';"
fi
if [ 'mysql -h $1 -e "select count(*) from mysql.procs_priv where db='$2'" -sss' -gt 0 ]; then
    PROCS_PRIV="    UPDATE mysql.procs_priv set db='$3' WHERE db='$2';"
fi
if [ 'mysql -h $1 -e "select count(*) from mysql.tables_priv where db='$2'" -sss' -gt 0 ]; then
    TABLES_PRIV="    UPDATE mysql.tables_priv set db='$3' WHERE db='$2';"
fi
if [ 'mysql -h $1 -e "select count(*) from mysql.db where db='$2'" -sss' -gt 0 ]; then
    DB_PRIV="    UPDATE mysql.db set db='$3' WHERE db='$2';"
fi
if [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then
    echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:"
    if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi
    if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi
    if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi
    if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi
    echo "    flush privileges;"
fi

Сохраните его в файле rename_db и сделайте скрипт исполняемым с помощью chmod +x rename_db затем используйте его как ./rename_db localhost old_db new_db

  • 0
    Мне нравится этот сценарий, он почти универсален. Однако он не смог обработать случай, когда есть несколько связанных видов, где определитель не является корневым.
7

Хранимая процедура TodoInTX для меня не работала. Здесь мой удар по нему:

-- stored procedure rename_db: Rename a database my means of table copying.
-- Caveats: 
-- Will clobber any existing database with the same name as the 'new' database name.
-- ONLY copies tables; stored procedures and other database objects are not copied.
-- Tomer Altman ([email protected])

delimiter //
DROP PROCEDURE IF EXISTS rename_db;
CREATE PROCEDURE rename_db(IN old_db VARCHAR(100), IN new_db VARCHAR(100))
BEGIN
    DECLARE current_table VARCHAR(100);
    DECLARE done INT DEFAULT 0;
    DECLARE old_tables CURSOR FOR select table_name from information_schema.tables where table_schema = old_db;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    SET @output = CONCAT('DROP SCHEMA IF EXISTS ', new_db, ';'); 
    PREPARE stmt FROM @output;
    EXECUTE stmt;

    SET @output = CONCAT('CREATE SCHEMA IF NOT EXISTS ', new_db, ';');
    PREPARE stmt FROM @output;
    EXECUTE stmt;

    OPEN old_tables;
    REPEAT
        FETCH old_tables INTO current_table;
        IF NOT done THEN
        SET @output = CONCAT('alter table ', old_db, '.', current_table, ' rename ', new_db, '.', current_table, ';');
        PREPARE stmt FROM @output;
        EXECUTE stmt;

        END IF;
    UNTIL done END REPEAT;

    CLOSE old_tables;

END//
delimiter ;
  • 0
    спасибо, работает!
  • 0
    Это будет работать только для таблиц, и только если в этих таблицах нет триггеров. Представления и триггеры не будут перемещены этим.
7

Вот командный файл, который я написал для его автоматизации из командной строки, но для Windows/MS-DOS.

Синтаксис - это rename_mysqldb database newdatabase -u [user] -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=
6

Для вашего удобства ниже представлен небольшой shellscript, который должен быть выполнен с двумя параметрами: db-name и new db-name.

Вам может потребоваться добавить параметры входа в mysql-строки, если вы не используете файл .my.cnf в своем домашнем каталоге. Перед выполнением этого script сделайте резервную копию.


#!/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"
  • 1
    Это также не будет работать для таблиц с прикрепленными триггерами или для представлений, которые нельзя переименовать в другие базы данных.
6

I задал вопрос о сбое сервера, пытаясь обойти время простоя при восстановлении очень больших баз данных с помощью MySQL Proxy. У меня не было никакого успеха, но в конце концов я понял, что я хотел использовать функциональность RENAME DATABASE, потому что dump/import не был вариантом из-за размера нашей базы данных.

Есть функция RENAME TABLE, встроенная в MySQL, поэтому я закончил писать простой Python script, чтобы выполнить эту работу для меня. Я разместил его на GitHub, если он может быть полезен другим.

5

Самый простой способ - использовать программное обеспечение HeidiSQL. Он бесплатный и с открытым исходным кодом. Он работает в Windows и на любом Linux с Wine (запускать приложения Windows на Linux, BSD, Solaris и Mac и X & X).

Чтобы загрузить HeidiSQL, перейдите http://www.heidisql.com/download.php.

Чтобы загрузить Wine, goto http://www.winehq.org/.

Чтобы переименовать базу данных в HeidiSQL, просто щелкните правой кнопкой мыши по имени базы данных и выберите "Изменить". Затем введите новое имя и нажмите "ОК".

Это так просто.

  • 0
    Если он имеет хранимые процедуры, он не может быть переименован.
4

Вот быстрый способ создания переименования sql script, если у вас много таблиц для перемещения.

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' ;
  • 0
    Выглядит хорошо, но это не перемещает хранимые процедуры или представления.
  • 0
    вам, вероятно, следует добавить хеш-метки, чтобы обернуть вокруг имени таблицы и схемы
3

Для пользователей Mac вы можете использовать Sequel Pro (бесплатно), которые просто предоставляют возможность переименовывать базы данных. Хотя он не удаляет старую БД.

как только открыть соответствующую БД, просто нажмите: DatabaseRename database...

  • 0
    в моем случае это было не переименование баз данных, а создание копий ...
  • 0
    Иногда старая БД остается живой, но она пуста. Тем не менее, если он делает копию, вы можете сделать копию и удалить старую, это еще 2 простых шага.
3

Кажется, никто не упомянул об этом, но вот еще один способ:

create database NewDatabaseName like OldDatabaseName;

то для каждой таблицы выполните:

create NewDatabaseName.tablename like OldDatabaseName.tablename;
insert into NewDataBaseName.tablename select * from OldDatabaseName.tablename;

тогда, если вы хотите,

drop database OldDatabaseName;

Этот подход имел бы преимущество в том, что он выполнял всю передачу на сервере с почти нулевым сетевым трафиком, поэтому он будет работать намного быстрее, чем сброс/восстановление.

Если у вас есть хранимые процедуры/представления/etc, вы также можете их перенести.

  • 0
    Насколько я знаю, 5.x не поддерживает ключевое слово "like" в операторе create database ? Откуда ты это взял?
  • 0
    Вот ссылка для create table like синтаксису: dev.mysql.com/doc/refman/5.7/en/create-table-like.html . Что касается создания базы данных, похоже, MySQL с тех пор отбросил это предложение.
3

Я сделал это так: Сделайте резервную копию существующей базы данных. Он предоставит вам db.zip.tmp, а затем в командной строке напишите

"C:\Program Files (x86)\MySQL\MySQL Server 5.6\bin\mysql.exe" -h localhost -u root -p [пароль] [новое имя db] < "C:\Подпорки\db.zip.tmp"

3

в phpmyadmin вы можете легко переименовать базу данных

select database 

  goto operations tab

  in that rename Database to :

  type your new database name and click go

попросите отказаться от старой таблицы и перезагрузить данные таблицы, нажмите "ОК" в обоих

Ваша база данных переименована

3

ALTER DATABASE - это предлагаемый способ для MySQL и RENAME DATABASE.

Из 13.1.32 Синтаксис DENABASE RENAME:

RENAME {DATABASE | SCHEMA} db_name TO new_db_name;

Этот оператор был добавлен в MySQL 5.1.7, но он оказался опасным и был удален в MySQL 5.1.23.

  • 6
    У вас есть пример синтаксиса? Я не знаю ни одного способа использовать alter database для переименования самой базы данных, и документация, на которую вы ссылались, не предполагает, что это возможно.
  • 0
    @ Джордан, мне тоже будет интересно. Я попробовал и попробовал и обнаружил, что это работает только с версией> 5.1, но я не могу обновить прямо сейчас.
Показать ещё 2 комментария
3

Вот однострочный фрагмент Bash для перемещения всех таблиц из одной схемы в другую:

history -d $((HISTCMD-1)) && mysql -udb_user -p'db_password' -Dold_schema -ABNnqre'SHOW TABLES;' | sed -e's/.*/RENAME TABLE old_schema.`&` TO new_schema.`&`;/' | mysql -udb_user -p'db_password' -Dnew_schema

Команда history в начале просто гарантирует, что команды MySQL, содержащие пароли, не сохраняются в истории оболочки.

Убедитесь, что db_user имеет права на чтение/запись/удаление старой схемы и права на чтение/запись/создание новой схемы.

3

Если вы используете phpMyAdmin, вы можете перейти на вкладку "операции", как только вы выбрали базу данных, которую хотите переименовать. Затем перейдите в последний раздел "Копировать базу данных в" (или что-то в этом роде), укажите имя и выберите параметры ниже. В этом случае, я думаю, вы должны выбрать флажки "структура и данные" и "создать базу данных перед копированием" и, наконец, нажать кнопку "идти" в этом разделе.

Кстати, я использую phpMyAdmin на испанском, поэтому я не уверен, что имена разделов на английском языке.

3

В MySQL Administrator выполните следующие действия:

  • В разделе "Каталоги" создайте новую схему базы данных.
  • Перейдите в Резервное копирование и создайте резервную копию старой схемы.
  • Выполнить резервное копирование.
  • Перейдите в раздел "Восстановить" и откройте файл созданный на шаге 3.
  • Выберите "Другая схема" в разделе "Цель" Схему и выберите новую базу данных схема.
  • Запустить восстановление.
  • Проверить новую схему и, если она выглядит хорошо, удалите старый.
  • 0
    MySQL Administrator не может обрабатывать большие базы данных, и в этом нет ничего быстрого
2

Шаги:

  1. Хит http://localhost/phpmyadmin/
  2. Выберите свою БД
  3. Нажмите вкладку "Операции"
  4. Будет вкладка "Переименовать базу данных в". Добавьте новое имя и установите флажок "Настроить привилегии".
  5. Нажмите "Перейти".

Изображение 814

  • 0
    Решение phpMyAdmin обычно является плохим решением, так как некоторые среды имеют ограниченную среду.
2

Вы можете сделать это двумя способами.

  • RENAME TABLE old_db.table_name TO new_db.table_name;
  • Откройте операции → там вы можете увидеть вкладку "Параметры таблицы". вы можете редактировать там имя таблицы.
2

Это пакет script, который я написал для переименования базы данных в Windows:

@echo off
set olddb=olddbname
set newdb=newdbname
SET count=1
SET act=mysql -uroot -e "select table_name from information_schema.tables where table_schema='%olddb%'"
mysql -uroot -e "create database %newdb%"
echo %act%
 FOR /f "tokens=*" %%G IN ('%act%') DO (
  REM echo %count%:%%G
  echo mysql -uroot -e "RENAME TABLE %olddb%.%%G to %newdb%.%%G"
  mysql -uroot -e "RENAME TABLE %olddb%.%%G to %newdb%.%%G"
  set /a count+=1
 )
mysql -uroot -e "drop database %olddb%"
2

Это работает для всех баз данных и работает, переименовывая каждую таблицу с помощью maatkit mysql toolkit

Используйте mk-find для печати и переименования каждой таблицы. справочная страница содержит больше возможностей и примеров

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

Если у вас установлен maatkit (что очень просто), то это самый простой способ сделать это.

1

В случае, когда вы начинаете с файла дампа с несколькими базами данных, вы можете выполнить команду sed на дампе:

sed -i -- "s|old_name_database1|new_name_database1|g" my_dump.sql
sed -i -- "s|old_name_database2|new_name_database2|g" my_dump.sql
...

Затем импортируйте свой свалку. Просто убедитесь, что конфликт имен не будет.

  • 0
    ... и если это старое имя базы данных присутствует в любом строковом значении данных, вы также уничтожите свои данные. Уч.
1

Если вы используете иерархические представления (представления, извлекающие данные из других представлений), импорт необработанного вывода из mysqldump может не работать, поскольку mysqldump не заботится о правильном порядке просмотра. Из-за этого я написал script, который переупорядочивает представления для правильного порядка на лету.

Он выглядит следующим образом:

#!/usr/bin/env perl

use List::MoreUtils 'first_index'; #apt package liblist-moreutils-perl
use strict;
use warnings;


my $views_sql;

while (<>) {
    $views_sql .= $_ if $views_sql or index($_, 'Final view structure') != -1;
    print $_ if !$views_sql;
}

my @views_regex_result = ($views_sql =~ /(\-\- Final view structure.+?\n\-\-\n\n.+?\n\n)/msg);
my @views = (join("", @views_regex_result) =~ /\-\- Final view structure for view `(.+?)`/g);
my $new_views_section = "";
while (@views) {
    foreach my $view (@views_regex_result) {
        my $view_body = ($view =~ /\/\*.+?VIEW .+ AS (select .+)\*\/;/g )[0];
        my $found = 0;
        foreach my $view (@views) {
            if ($view_body =~ /(from|join)[ \(]+`$view`/) {
                $found = $view;
                last;
            }
        }
        if (!$found) {
            print $view;
            my $name_of_view_which_was_not_found = ($view =~ /\-\- Final view structure for view `(.+?)`/g)[0];
            my $index = first_index { $_ eq $name_of_view_which_was_not_found } @views;
            if ($index != -1) {
                splice(@views, $index, 1);
                splice(@views_regex_result, $index, 1);
            }
        }
    }
}

Использование:
mysqldump -u username -v olddatabase -p | ./mysqldump_view_reorder.pl | mysql -u username -p -D newdatabase

1

Я использовал следующий метод для переименования базы данных

  • возьмите резервную копию файла с помощью mysqldump или любого инструмента DB, например, heidiSQL, администратор mysql и т.д.

  • Откройте резервный файл (например, файл backupfile.sql) в текстовом редакторе.

  • Найдите и замените имя базы данных и сохраните файл.

4. Восстановить отредактированный файл sql

1

Ни решение TodoInTx, ни адаптированное для пользователя757945 решение не работало для меня в MySQL 5.5.16, поэтому вот моя адаптированная версия:

DELIMITER //
DROP PROCEDURE IF EXISTS `rename_database`;
CREATE PROCEDURE `rename_database` (IN `old_name` VARCHAR(20), IN `new_name` VARCHAR(20))
BEGIN
  DECLARE `current_table_name` VARCHAR(20);
  DECLARE `done` INT DEFAULT 0;
  DECLARE `table_name_cursor` CURSOR FOR SELECT `table_name` FROM `information_schema`.`tables` WHERE (`table_schema` = `old_name`);
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET `done` = 1;

  SET @sql_string = CONCAT('CREATE DATABASE IF NOT EXISTS `', `new_name` , '`;');
  PREPARE `statement` FROM @sql_string;
  EXECUTE `statement`;
  DEALLOCATE PREPARE `statement`;

  OPEN `table_name_cursor`;
  REPEAT
    FETCH `table_name_cursor` INTO `current_table_name`;
    IF NOT `done` THEN

      SET @sql_string = CONCAT('RENAME TABLE `', `old_name`, '`.`', `current_table_name`, '` TO `', `new_name`, '`.`', `current_table_name`, '`;');
      PREPARE `statement` FROM @sql_string;
      EXECUTE `statement`;
      DEALLOCATE PREPARE `statement`;

    END IF;
  UNTIL `done` END REPEAT;
  CLOSE `table_name_cursor`;

  SET @sql_string =  CONCAT('DROP DATABASE `', `old_name`, '`;');
  PREPARE `statement` FROM @sql_string;
  EXECUTE `statement`;
  DEALLOCATE PREPARE `statement`;
END//
DELIMITER ;

Надеюсь, это поможет кому-то, кто в моей ситуации! Примечание: @sql_string будет задерживаться в сеансе позже. Я не смог написать эту функцию, не используя ее.

0

Простой способ

ALTER DATABASE 'oldName' MODIFY NAME = 'newName';

или вы можете использовать онлайн-генератор sql

  • 1
    в mysql нет MODIFY NAME
0

I). Нет прямого способа, с помощью которого u может изменить имя существующей БД Но вы можете достичь цели ur, выполнив следующие шаги: - 1). Создать newdb. 2). Используйте newdb. 3). create table table_name (выберите * из olddb.table_name);

Сделав это, скопируйте данные из таблицы olddb и вставив их в таблицу newdb. Дайте имя этой таблицы.

II). RENAME TABLE old_db.table_name TO new_db.table_name;

0

Я разместил это Как мне изменить имя базы данных с помощью MySQL? сегодня после нескольких дней царапин на голове и вытягивания волос. Решение довольно просто экспортировать схему в файл .sql и открыть файл и изменить имя базы данных/схемы в разделе sql CREAT TABLE вверху. Есть три экземпляра или больше и не может быть в верхней части страницы, если в файл сохранены многомерные схемы. Это возможно для редактирования всей базы данных таким образом, но я ожидаю, что в больших базах данных это может быть довольно болью после всех экземпляров свойства или индекса таблицы.

0

Вы, ребята, застрелите меня за это, и, скорее всего, это не сработает каждый раз, и конечно, это против всех логических бла-бла... Но то, что я только что пробовал, - это... ОСТАНОВИТЕ двигатель MySQL, войдите в систему под учетной записью root и просто переименуйте DB на уровне файловой системы....

Я на OSX, и только изменил случай, от bedbf до BEDBF. К моему удивлению, это сработало...

Я бы не рекомендовал его на производственной БД. Я просто попробовал это как эксперимент...

Удачи в любом случае: -)

  • 3
    Несколько причин, почему это ужасный ответ, уже обсуждались на этой странице.
-2

Здесь есть много действительно хороших ответов, но я не вижу 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);
-2

Проще всего, откройте MYSQL → SELECT DB, имя которого вы хотите изменить → Нажмите "операция" , затем поместите новое имя в "Переименовать" базы данных: "поле, затем нажмите кнопку " Перейти "

Simple!

  • 10
    Вы, очевидно, имеете в виду какой-то инструмент управления графическим интерфейсом. Было бы полезно, если бы вы сказали, что это было.
  • 0
    Я думаю, что это хорошее решение. Хотя мой вопрос, как добавить внешнюю базу данных в phpmyadmin. Я имею в виду, как управлять множеством экземпляров mysql на одном сайте phpmyadmin.
-2

Действительно, самый простой ответ - экспортировать свою старую базу данных, а затем импортировать ее в новую, созданную для замены старой. Конечно, вы должны использовать phpMyAdmin или командную строку для этого.

Переименование и настройка Джерри базы данных - это БАД-ИДЕЯ! НЕ ДЕЛАЙТЕ ЭТО. (Если вы не являетесь "хакерским типом", сидящим в подвале вашей матери в темноте и едящей пиццу в течение дня.)

У вас будет больше проблем и работы, чем вы хотите.

Итак,

  • Создайте новую_данные и назовите ее правильным способом.
  • Перейдите на ваш phpMyAdmin и откройте базу данных, которую хотите экспортировать.
  • Экспортируйте его (проверьте параметры, но вы должны быть в порядке со значениями по умолчанию.
  • Вы получите файл, похожий или похожий на этот.
  • Расширением в этом файле является .sql

    - phpMyAdmin SQL Dump - версия 3.2.4

    - http://www.phpmyadmin.net

    - Хост: localhost - Время генерации: 30 июня 2010 года в 12:17 - Версия сервера: 5.0.90 - Версия PHP: 5.2.6

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

    /*! 40101 SET @OLD_CHARACTER_SET_CLIENT = @@CHARACTER_SET_CLIENT/; /! 40101 SET @OLD_CHARACTER_SET_RESULTS = @@CHARACTER_SET_RESULTS/; /! 40101 SET @OLD_COLLATION_CONNECTION = @@COLLATION_CONNECTION/; /! 40101 SET NAMES utf8 */;

    -

    - База данных: mydatab_online


    -

    - Структура таблицы для таблицы user

    СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ user (timestamp int (15) NOT NULL по умолчанию '0', ip varchar (40) NOT NULL default '', file varchar (100) NOT NULL default '', ПЕРВИЧНЫЙ КЛЮЧ (timestamp), КЛЮЧ ip (ip), КЛЮЧ file (file) ) ENGINE = MyISAM DEFAULT CHARSET = latin1;

    -

    - данные сброса для таблицы user

    INSERT INTO user (timestamp, ip, file) ЦЕННОСТИ (1277911052, '999.236.177.116', ''), (1277911194, '999.236.177.116', '');

Это будет ваш .sql файл. Тот, который вы только что экспортировали.

Найдите его на жестком диске; обычно он находится в /temp. Выберите пустую базу данных с правильным именем (причина, по которой вы это читаете). SAY: Импорт - GO

Подключите свою программу к правильной базе данных, введя ее в файл, который обычно является конфигурационным .php. Обновите сервер (оба. Почему? Потому что я UNIX oldtimer, и я так сказал. Теперь вы должны быть в хорошей форме. Если у вас есть дополнительные вопросы, посетите меня в Интернете.

-5

Если вы используете phpMyAdmin, вы просто переходите в папку mysql в xamp, закрываете phpMyAdmin и просто переименовываете папку вы просто видите там свое имя базы данных и просто перезапустите phpMyAdmin. Вы можете видеть, что эта база данных переименована.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню