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

a[1][1] работает должным образом. Вы имеете в виду a11 как первый элемент первой строки? Потому что это будет [0] [0].

886
задан 11 revs, 9 users 30% 15 October 2018 в 12:53
поделиться

12 ответов

Этот обходной путь (просто перечислите все культуры, которые вы хотите использовать в строковом массиве):

private static class ArabicNumeralHelper
{
    public static string ConvertNumerals(this string input)
    {
        if (new string[] { "ar-lb", "ar-SA" }
              .Contains(Thread.CurrentThread.CurrentCulture.Name))
        {
            return input.Replace('0', '\u06f0')
                    .Replace('1', '\u06f1')
                    .Replace('2', '\u06f2')
                    .Replace('3', '\u06f3')
                    .Replace('4', '\u06f4')
                    .Replace('5', '\u06f5')
                    .Replace('6', '\u06f6')
                    .Replace('7', '\u06f7')
                    .Replace('8', '\u06f8')
                    .Replace('9', '\u06f9');
        }
        else return input;
    }
}

Затем используйте метод, для всех строк вы хотите иметь "центральные арабские цифры" в, как это:

DateTime.Now.ToString().ConvertNumerals();
-121--2907145-

Быстрый google нашел этот http://theopensourcery.com/sqlanysomeall.htm

Любой позволяет использовать оператор, отличный от =, в большинстве других случаев (особые случаи для нулей) он действует как IN. С помощью оператора = можно считать IN как ANY.

-121--1052118-

Для 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 .
  • Если в какой-либо таблице имеется триггер, ее нельзя переместить в другую базу данных с помощью указанного выше метода (это приведет к ошибке Trigger в неверной схеме ). Если это так, используйте традиционный способ клонирования базы данных, а затем удалите старую:

    mysqldump old_db | mysql, new_db

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

    mysqldump -R old_db | mysql new_db

796
ответ дан 22 November 2019 в 21:00
поделиться

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

13
ответ дан UnkwnTech 15 October 2018 в 12:53
поделиться

В MySQL Administrator делают следующее:

  1. В соответствии с Каталогами, создайте новую схему базы данных.
  2. Идут, чтобы Скопировать и создать резервное копирование старой схемы.
  3. Выполняют резервное копирование.
  4. Идут, чтобы Восстановить и открыть файл, созданный в Выборе шага 3.
  5. 'Другая Схема' в соответствии с Целевой Схемой и выбрать новую схему базы данных.
  6. Запускают Восстановление.
  7. Проверяют новую схему и, если это выглядит хорошим, удалите старый.
3
ответ дан Tom 15 October 2018 в 12:53
поделиться

Три опции:

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

  2. Создают новую базу данных, используют CREATE TABLE... КАК операторы, и затем используют, ВСТАВЛЯЮТ... ВЫБЕРИТЕ * операторы FROM.

  3. Использование mysqldump и перезагрузка с тем файлом.

24
ответ дан 2 revs, 2 users 71% 15 October 2018 в 12:53
поделиться

Простой путь

Изменение в каталоге базы данных:

cd /var/lib/mysql/

MySQL Закрытия... Это важно!

/etc/init.d/mysql stop

Хорошо, этот путь не работает на InnoDB или BDB-базы-данных.

база данных Rename:

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

Restart...

хорошо, этот путь не работает с базами данных InnoDB или BDB. В этом случае необходимо вывести базу данных и повторно импортировать ее.

24
ответ дан 4 revs, 3 users 71% 15 October 2018 в 12:53
поделиться

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

Синтаксис является rename_mysqldb базой данных newdatabase-u [пользователь]-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=
7
ответ дан Johnny 15 October 2018 в 12:53
поделиться

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

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

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

14
ответ дан bryanpearson 15 October 2018 в 12:53
поделиться

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

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
429
ответ дан 22 November 2019 в 21:00
поделиться

Я задал вопрос о сбое сервера , пытаясь избежать простоев при восстановлении очень больших баз данных с помощью MySQL Proxy. У меня ничего не получилось, но в конце концов я понял, что мне нужно было ПЕРЕИМЕНОВАТЬ БАЗУ ДАННЫХ, потому что дамп / импорт не подходили из-за размера нашей базы данных.

В MySQL встроена функция ПЕРЕИМЕНОВАТЬ ТАБЛИЦУ, поэтому я написал простой скрипт Python, который сделает эту работу за меня. Я разместил его на GitHub на случай, если он может быть полезен другим.

6
ответ дан 22 November 2019 в 21:00
поделиться

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

RENAME TABLE old_db.table TO new_db.table;

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

19
ответ дан 22 November 2019 в 21:00
поделиться

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

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

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

mysql -uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot
ERROR 1435 (HY000) at line 4: Trigger in wrong schema
9
ответ дан 22 November 2019 в 21:00
поделиться

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

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

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

Итак,

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

    - phpMyAdmin Дамп SQL - версия 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 НАБОР @OLD_CHARACTER_SET_RESULTS = @@ CHARACTER_SET_RESULTS /; / ! 40101 НАБОР @OLD_COLLATION_CONNECTION = @@ COLLATION_CONNECTION /; / ! 40101 SET NAMES utf8 * /;

    -

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


    -

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

    CREATE ТАБЛИЦА, ЕСЛИ НЕ СУЩЕСТВУЕТ пользователь ( отметка времени int (15) НЕ НУЛЬ по умолчанию '0', ip varchar (40) NOT NULL по умолчанию '', файл varchar (100) NOT NULL по умолчанию '', ПЕРВИЧНЫЙ КЛЮЧ ( отметка времени ), КЛЮЧ ip ( ip ), KEY файл ( файл ) ) ENGINE = MyISAM DEFAULT CHARSET = latin1;

    -

    - Выгрузка данных для таблицы пользователя

    INSERT INTO user ( отметка времени , ] ip , файл ) ЗНАЧЕНИЯ (1277911052, '999.236.177.116', ''), (1277911194, '999.236.177.116', '');

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

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

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

-3
ответ дан 22 November 2019 в 21:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: