Я создал базу данных с именем hrms
. Теперь мне нужно изменить имя базы данных на sunhrm
. Но он отключен в workbench MySQL. Могу ли я сделать это на самом сервере Linux?
Переименовать базу данных MySQL
Ответ 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 для базы данных. Переименуйте схему там.
после этого перейдите в меню файлов и перейдите к экспорту и перепрограммированию базы данных.
Затем вы можете импортировать базу данных.