Jestem w trakcie przenoszenia moich plików na inny komputer, a jedną rzeczą, którą chciałbym zrobić, jest przesłanie danych do mojej bazy danych MySQL. Chcę zrzucić bazy danych do plików .sql, ale także utworzyć bazę danych db_name, w tym w pliku, w ten sposób po prostu muszę zaimportować plik do mysql bez konieczności ręcznego tworzenia baz danych. Czy jest jakiś sposób na zrobienie tego?mysqldump z utworzeniem linii baz danych
Odpowiedz
Domyślnie
mysqldump
zawsze tworzy instrukcję
CREATE DATABASE IF NOT EXISTS db_name;
na początku pliku zrzutu.
[EDIT] Kilka rzeczy o pliku mysqldump
i to opcje:
--all-databases
, -A
Dump wszystkich tabel we wszystkich baz danych. Jest to to samo, co użycie opcji --databases
i nazwanie wszystkich baz danych w wierszu poleceń.
--add-drop-database
Dodaj DROP DATABASE
oświadczenia przed każdym rachunku CREATE DATABASE
. Ta opcja jest zwykle używana w połączeniu z opcją --all-databases
lub --databases
, ponieważ nie są zapisywane żadne instrukcje, chyba że podano jedną z tych opcji.
--databases
, -B
Dump kilka baz danych. Zwykle mysqldump
traktuje argument first name w linii komend jako nazwę bazy danych i następujące nazwy jako nazwy tabel. Dzięki tej opcji traktuje wszystkie argumenty nazw jako nazwy baz danych. Instrukcje CREATE DATABASE
i USE
są zawarte w danych wyjściowych przed każdą nową bazą danych.
--no-create-db
, -n
Ta opcja tłumi CREATE DATABASE
wypowiedzi, które są w inny sposób uwzględnione w danych wyjściowych, jeśli opcja --databases
lub --all-databases
podano.
Jakiś czas temu podobnym pytaniem było pytanie o brak takiego stwierdzenia na początku pliku (w przypadku pliku XML). Link do tego pytania: is here.
więc odpowiedzieć na pytanie:
- jeśli masz jedną bazę danych do zrzutu, trzeba mieć odpowiednią opcję w swoim oświadczeniu
mysqldump
--add-drop-database
. - jeśli masz kilka baz danych do zrzutu, należy użyć opcji
--databases
lub--all-databases
i składnięCREATE DATABASE
zostanie dodany automatycznie
Więcej informacji na MySQL Reference Manual
Najprostszym rozwiązaniem jest użycie opcji -B lub --databases. Następnie w pliku wyjściowym pojawia się polecenie CREATE database. Na przykład:
mysqldump -uuser -ppassword -d -B --events --routines --triggers database_example > database_example.sql
Oto nagłówku dumpfile za:
-- MySQL dump 10.13 Distrib 5.5.36-34.2, for Linux (x86_64)
--
-- Host: localhost Database: database_example
-- ------------------------------------------------------
-- Server version 5.5.36-34.2-log
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @[email protected]@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `database_example`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `database_example` /*!40100 DEFAULT CHARACTER SET utf8 */;
Oto jak to zrobić zrzut bazy danych (tylko z schematu):
mysqldump -u root -p"passwd" --no-data --add-drop-database --databases my_db_name | sed 's#/[*]!40000 DROP DATABASE IF EXISTS my_db_name;#' >my_db_name.sql
Jeśli też chcesz dane, usuń opcję --no-data
.
Tak się ze mną działo. Nie korzystałem z --databases lub --all-databases. Właśnie umieściłem nazwę bazy danych, która nie utworzyłaby bazy danych, jeśli istnieje i utworzyła linię baz danych. – Vince
Tak, to w przypadku jednej bazy danych dodaj opcję '--add-drop-database' i wszystko powinno być w porządku. Pamiętaj jednak, że zaimportowanie pliku zrzutu spowoduje usunięcie tej bazy danych i wszystkiego, co znajduje się w środku, jeśli taki jest na komputerze. – GregD
W jakiej wersji to było? mysqldump Ver 10.11 Distrib 5.0.51a, dla debian-linux-gnu (i486) test mysqldump --add-drop-database | grep DROP wyprowadza tylko linie DROP TABLE dla testowej bazy danych. Muszę dodać - bazy danych zanim dostanę komentarz DROP DATABASE IF EXISTS 'test' – jla