Как мы можем восстановить базу данных mysql с другим именем из файла mysqldump. Я не хочу открывать файл дампа и редактировать его. Любые другие лучшие методы?
41
Вы можете позволить mysqldump создать дамп таким образом, чтобы он не создавал и не выбирал базу данных.
ПРИМЕР: вы выгружаете базу данных db1 и загружаете ее в базу данных db2.
Это добавит команды CREATE DATABASE и USE в дамп
mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql
Это не поместит команды CREATE DATABASE и USE в дамп ( это то, что вы хотите )
mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
Вы можете загрузить его в другую базу данных (например, db2) одним из четырех (4) способов:
ОПЦИЯ 1
$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2
ВАРИАНТ 2
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql
ВАРИАНТ 3
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql
ВАРИАНТ 4
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql
Попробуйте!
-Ddb2
перед ним не должно быть дефиса. По крайней мере, я получил синтаксическую ошибку MySQL, когда включил ее.ALTER DATABASE ... CHARACTER SET ...
что нарушает мой импорт. Изменить: Oracle в основном игнорирует ошибку .Я большой поклонник дампа, редактирования и вставки. но вам не нужно открывать текстовый файл (файл дампа), чтобы изменить его (это особенно полезно, когда его длина составляет несколько миллионов строк). если вы хотите сбросить базу данных
MYDATABASE
.затем используйте sed для замены старого имени базы данных новым
затем вы можете просто создать новую базу данных и импортировать ее снова, и она создаст все таблицы в новых базах данных MYNEWDATABASE '
Редактировать: Как отметили некоторые приятные люди в разделе комментариев, это может быть опасно, если некоторые из данных также изменены этим выше, поэтому, чтобы найти конкретные способы избежать этого.
1) Grep для этого в дампе, прежде чем его менять, вот так.
а также
2) мы можем добавить `, чтобы сделать его более безопасным, например:
если у кого-то есть конкретные предложения, я с удовольствием отредактирую свой ответ еще через 4 года.
источник
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
) проверьте все вхождения MYDATABASE,cat mydump.sql | grep "MYDATABASE"
чтобы убедиться, что изменяется только имя базы данных, остальные данные остаются нетронутыми.sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# потенциально безопаснее редактировать Steam. мой дамп базы данных не содержит никаких операторов USE или CREATE DATABASE, но имя базы данных находится в комментариях, представлениях и триггерах sql (MySQL 5.7). Это НЕ заменяет имя базы данных в комментариях, но они не влияют на результирующую базу данных. Это хорошо сработало для меня.Я сделал это однажды, давным-давно.
Когда вы экспортируете все свои данные, есть возможность установить имя базы данных в начале файла, что-то вроде: «использовать базу данных x»
Таким образом, вы можете изменить эту декларацию.
источник
Если файл , что вы имеете в руке , и вы манипулируете его из оболочки / консоли, я хотел бы использовать ,
sed
чтобы сделать строку замены на линии , начиная сCREATE DABATASE
,CREATE TABLE
,USE
и optionnally--
(MySQLDump комментариев)Замена имени БД в строках, которые соответствуют комментариям Create Database, Create Table, Use и mysqldump
Конечно, как и во многих ответах, упомянутых здесь, проще, если резервная копия mysqldump не содержит CREATE DATABASE и строку USE. Значение параметров
--all-databases
,--databases
или их короткие версии-A
или-B
не были использованы.источник
--no-create-db
без--database
или--databases
.Если вы делаете дамп, используя следующие два правила:
--databases
,--database
а просто поместите имя базы данных в конце команды без этих параметров.--no-create-db
Если вы сделаете следующее, то mysqldump создаст SQL без ссылки на базу данных, тогда вы можете использовать новое имя базы данных в конце вашей команды mysql во время импорта!
источник
--no-create-db
без--database
или--databases
.Вот сценарий оболочки, который позволит вам добавить суффикс / аффикс ко всем именам схем на лету.
http://snippets.dzone.com/posts/show/13749
источник