Как мы можем восстановить базу данных mysql с другим именем из файла mysqldump. Я не хочу открывать файл дампа и редактировать его. Любые другие лучшие методы?
Как мы можем восстановить базу данных mysql с другим именем из файла mysqldump. Я не хочу открывать файл дампа и редактировать его. Любые другие лучшие методы?
Ответы:
Вы можете позволить 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
Попробуйте!
ALTER DATABASE ... CHARACTER SET ...
что нарушает мой импорт. Изменить: Oracle в основном игнорирует ошибку .
Я большой поклонник дампа, редактирования и вставки. но вам не нужно открывать текстовый файл (файл дампа), чтобы изменить его (это особенно полезно, когда его длина составляет несколько миллионов строк). если вы хотите сбросить базу данных MYDATABASE
.
mysqldump MYDATABASE > mydump.sql
затем используйте sed для замены старого имени базы данных новым
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
затем вы можете просто создать новую базу данных и импортировать ее снова, и она создаст все таблицы в новых базах данных MYNEWDATABASE '
mysqladmin create MYNEWDATABASE
mysql MYNEWDATABASE < mydump.sql
Редактировать: Как отметили некоторые приятные люди в разделе комментариев, это может быть опасно, если некоторые из данных также изменены этим выше, поэтому, чтобы найти конкретные способы избежать этого.
1) Grep для этого в дампе, прежде чем его менять, вот так.
cat mydump.sql | grep "MYDATABASE"
а также
2) мы можем добавить `, чтобы сделать его более безопасным, например:
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
если у кого-то есть конкретные предложения, я с удовольствием отредактирую свой ответ еще через 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). Это НЕ заменяет имя базы данных в комментариях, но они не влияют на результирующую базу данных. Это хорошо сработало для меня.
Если файл , что вы имеете в руке , и вы манипулируете его из оболочки / консоли, я хотел бы использовать , sed
чтобы сделать строку замены на линии , начиная с CREATE DABATASE
, CREATE TABLE
, USE
и optionnally --
(MySQLDump комментариев)
Замена имени БД в строках, которые соответствуют комментариям Create Database, Create Table, Use и mysqldump
dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile
Конечно, как и во многих ответах, упомянутых здесь, проще, если резервная копия mysqldump не содержит CREATE DATABASE и строку USE. Значение параметров --all-databases
, --databases
или их короткие версии -A
или -B
не были использованы.
--no-create-db
без --database
или --databases
.
Если вы делаете дамп, используя следующие два правила:
--databases
, --database
а просто поместите имя базы данных в конце команды без этих параметров.--no-create-db
Если вы сделаете следующее, то mysqldump создаст SQL без ссылки на базу данных, тогда вы можете использовать новое имя базы данных в конце вашей команды mysql во время импорта!
mysqldump --no-create-db old_db_name --single-transaction --compress --order-by-primary --host old_db_host -u old_db_user -pOld_db_password | mysql --host new_host -u new_user -pnewpassword new_db_name
--no-create-db
без --database
или --databases
.
Вот сценарий оболочки, который позволит вам добавить суффикс / аффикс ко всем именам схем на лету.
-Ddb2
перед ним не должно быть дефиса. По крайней мере, я получил синтаксическую ошибку MySQL, когда включил ее.