Переименовать базу данных MySQL

Я создал базу данных с именем hrms. Теперь мне нужно изменить имя базы данных на sunhrm. Но он отключен в workbench MySQL. Могу ли я сделать это на самом сервере Linux?

Ответ 1

Я не думаю, что вы можете это сделать. Я думаю, вам нужно сбросить эту базу данных, создать вновь названный, а затем импортировать дамп.

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

Если вы хотите увидеть команды для этого, @jan содержит данные.

Ответ 2

Если вам нужно сделать это из командной строки, просто скопируйте, адаптируйте и вставьте этот фрагмент:

mysql -e "CREATE DATABASE \`new_database\`;"
for table in `mysql -B -N -e "SHOW TABLES;" old_database`
do 
  mysql -e "RENAME TABLE \`old_database\`.\`$table\` to \`new_database\`.\`$table\`"
done
mysql -e "DROP DATABASE \`old_database\`;"

Ответ 3

Вы можете создать новую базу данных точно так же, как существовала предыдущая база данных, а затем удалить старую базу данных по завершении. Используйте средство mysqldump для создания резервной копии базы данных .sql через mysqldump orig_db > orig_db.sql или если вам нужно использовать имя пользователя и пароль, запустите mysqldump -u root -p orig_db > orig_db.sql. orig_db - это имя базы данных, которую вы хотите переименовать, root будет пользователем, который вы входите в систему, а orig_db.sql - это файл, содержащий резервную копию. Теперь создайте новую, пустую базу данных с именем, которое вы хотите для базы данных. Например, mysql -u root -p -e "create database new_db". После этого запустите mysql -u root -p new_db < orig_db.sql. new_db теперь существует как идеальная копия orig_db. Затем вы можете отбросить исходную базу данных, поскольку теперь она существует в новой базе данных с нужным именем базы данных.

Короткими быстрыми шагами без всего приведенного выше объяснения являются:

  • mysqldump -u root -p originl_database > original_database.sql
  • mysql -u root -p -e "create database my_new_database"
  • mysql -u root -p my_new_database < original_database.sql
  • mysql -u root -p -e drop database originl_database

Надеемся, что это поможет, и это надежное средство для его достижения, не используя какой-либо ad-hoc-метод, который повредит ваши данные и создаст несогласованности.

Ответ 4

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

  • mysql -u root -p -e "create database my_new_database"
  • mysqldump -u root -p original_database | mysql -u root -p my_new_database
  • mysql -u root -p -e "drop database original_database"

Ответ 5

Вы можете сделать это с помощью инструкции RENAME для каждой таблицы в вашем "current_db" после создания новой схемы "other_db"

RENAME TABLE current_db.tbl_name TO other_db.tbl_name

Источник Переименовать синтаксис таблицы

Ответ 6

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

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

От Shell

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

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

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

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

  • Создайте новую схему базы данных с нужным именем.
  • Переименуйте таблицы из старой схемы в новую схему, используя MySQL Команда "RENAME TABLE".
  • Отбросить старую схему базы данных.

Если в схеме есть views, triggers, functions, stored procedures, они также должны быть воссозданы. 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 name до new_schema и вызывающих "привилегии Flush;". Хотя "method 2" выглядит немного сложнее, чем "method 1", это вполне возможно для сценариев. Простой bash script для выполнения вышеуказанных шагов в правильной последовательности может помочь вам сэкономить место и время при переименовании схем баз данных в следующий раз.

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

[[email protected]~]# /tmp/rename_db
rename_db <server> <database> <new_database>

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

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


[[email protected] ~]# 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, который используется выше для "method 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

Ответ 7

Короче нет. Считается, что это слишком опасно для переименования базы данных. У MySQL была эта функция немного, но она была удалена. Вам лучше было бы использовать рабочую среду для экспорта как схемы, так и данных в SQL, а затем изменить имя CREATE DATABASE там, где вы будете запускать/импортировать его.

Ответ 8

Для нетерпеливых пользователей mysql (например, я) решение:

/etc/init.d/mysql stop
mv /var/lib/mysql/old_database /var/lib/mysql/new_database 
/etc/init.d/mysql start

Ответ 9

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

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

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

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

  • Восстановить отредактированный файл SQL

Ответ 10

Если ваша БД содержит только таблицы MyISAM (используйте не, используйте этот метод, если у вас есть таблицы InnoDB):

  • выключить сервер MySQL
  • перейдите в каталог mysql data и переименуйте каталог базы данных (Примечание: не альфа-символы должны быть закодированы особым образом).
  • перезапустить сервер
  • при необходимости настроить привилегии (предоставить доступ к новому имени базы данных)

Вы можете script все в одной команде, чтобы простои были всего лишь секундой или двумя.

Ответ 11

Сначала создайте резервную копию старой базы данных под названием HRMS и отредактируйте файл script, заменив слово HRMS на SUNHRM. После этого шага импортируйте файл базы данных в mysql

Ответ 12

Другим способом переименования базы данных или получения изображения базы данных является использование опции "Реверсивная инженерия" на вкладке "База данных". Он создаст диаграмму ERR для базы данных. Переименуйте схему там.

после этого перейдите в меню файлов и перейдите к экспорту и перепрограммированию базы данных.

Затем вы можете импортировать базу данных.