#php #mysql #phpmyadmin
#php #mysql #phpmyadmin
Вопрос:
Я хочу скопировать кучу БД с server1 на server2, и я хочу удалить любые БД на server2, которые конфликтуют с импортированными БД, а затем импортировать БД.
Я использую это для импорта:
mysql -u root -p[password] < a_bunch_of_dbs.sql
Я использовал phpMyAdmin для выполнения нескольких экспортов, но они совершенно непригодны для использования.
Проблема в том, что phpMyAdmin либо поместит:
DROP DATABASE `database1`;
(это приводит к ошибке # 1008 — Невозможно удалить базу данных ‘database1’; база данных не существует)
или:
CREATE DATABASE `database1`;
(это приводит к ошибке # 1007 — Не удается создать базу данных ‘database1’; база данных существует)
Но НЕ:
DROP DATABASE IF EXISTS `database`;
CREATE DATABASE IF NOT EXISTS `database1`;
(очевидно, что «ЕСЛИ НЕ СУЩЕСТВУЕТ» является избыточным, но мне понравилось это для уверенности)
Итак, чтобы решить эту проблему, мне либо нужны некоторые параметры командной строки, либо мне нужно выяснить, где phpmyadmin создает строки запроса, и добавить «ЕСЛИ СУЩЕСТВУЕТ» в параметр DROP TABLE, и это решит все.
Есть идеи? Спасибо.
Ответ №1:
Воспользуйтесь преимуществами инструментов резервного копирования и восстановления MySQL в dbForge Studio для MySQL. Включите опцию «Включить, ЕСЛИ ОНА СУЩЕСТВУЕТ в операторе удаления», и вы получите сценарий, подобный этому:
--
-- Definition for database database1
--
DROP DATABASE IF EXISTS database1;
CREATE DATABASE database1
CHARACTER SET latin1
COLLATE latin1_swedish_ci;
--
-- Set default database
--
USE database1;
--
-- Definition for table dept
--
CREATE TABLE dept (
id INT(11) NOT NULL AUTO_INCREMENT,
dept_name VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 2
AVG_ROW_LENGTH = 16384
CHARACTER SET latin1
COLLATE latin1_swedish_ci;
Поддерживается командная строка.
Комментарии:
1. Спасибо. В итоге я использовал mysqldump для экспорта, а не phpMyAdmin.