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



этот вопрос уже есть ответ здесь:



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

862   12  

12 ответов:

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

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

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

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

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\`;"

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

  1. mysql -u root -p -e "create database my_new_database"
  2. mysqldump -u root -p original_database | mysql -u root -p my_new_database
  3. mysql -u root -p -e "drop database original_database"

вы можете создать новую базу данных точно так же, как существовала предыдущая база данных, а затем удалить старую базу данных, когда вы закончите. Используйте утилиту 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. Затем вы можете удалить исходную базу данных, поскольку теперь она существует в новой базе данных с нужным именем базы данных.

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

  1. mysqldump -u root -p original_database > original_database.sql
  2. mysql -u root -p -e "create database my_new_database"
  3. mysql -u root -p my_new_database < original_database.sql
  4. mysql -u root -p -e drop database originl_database

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

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

RENAME TABLE current_db.tbl_name TO other_db.tbl_name

источник Переименовать Таблицу Синтаксис

Ну есть 2 способа:

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

С Shell

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

хотя выше метод прост, он требует много времени и пространства. Что делать, если схема больше, чем 100GB? есть методы, где вы можете трубить выше команды вместе экономят на пространстве, однако это не сэкономит время.

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

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

  1. создать новую схему базы данных с нужным именем.
  2. переименуйте таблицы из старой схемы в новую схему, используя MySQL Команда "переименовать таблицу".
  3. удалить старую схему базы данных.

если есть views, triggers, functions, stored procedures в схеме они также должны быть воссозданы. MySQL" переименовать таблицу " не удается если есть триггеры, существует на столах. Чтобы исправить это, мы можем сделать следующие вещи :

1)Dump the triggers, events and stored routines in a separate file. это делается с помощью флагов-E,- R (в дополнение к-t-d, который сбрасывает триггеры) к команде mysqldump. Как только триггеры dumped, нам нужно будет удалить их из схемы, для переименования таблицы команда на работу.

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

2) создать список только "базовых" таблиц. Они могут быть найдены с помощью запрос на информационная схема.Таблицы таблицы.

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

3) дамп представления в файле out. Вид можно найти с помощью запроса те же базы данных information_schema.Таблицы таблицы.

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 для пользователей, которые соответствуют правильному имени schema_name. Они могут быть исправлены с помощью простого UPDATE on mysql.columns_priv,mysql.procs_priv,mysql.tables_priv, mysql.обновление таблиц БД old_schema name до new_schema и вызов " Flush привилегии;". Хотя"method 2 " кажется немного сложнее, чем "method 1", это полностью сценарий. Простой скрипт bash для выполнения вышеуказанных шагов в правильной последовательности, может помочь вам сэкономить место и время при переименовании базы данных схемы в следующий раз.

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

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

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

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 " менее чем за секунду. Наконец, это скрипт из Перконы, который используется выше для "method 2".

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

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

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

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

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

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

  2. открыть резервную копию (например, backupfile.sql) файл в каком-то текстовом редакторе.

  3. поиск и замена имени базы данных и сохранить файл.

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

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

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

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

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

другой способ переименования базы данных или получения образа базы данных-это использование опции обратного проектирования на вкладке база данных. Он создаст диаграмму ошибок для базы данных. Переименуйте схему там.

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

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

Comments

    Ничего не найдено.