Import single database from --all-databases dump

前端 未结 3 593
谎友^
谎友^ 2020-12-22 15:54

Is it possible to import a single database from an --all-databases mysqldump? I guess I can modify the file manually but wondering if there are any command line options to d

相关标签:
3条回答
  • 2020-12-22 16:24

    You can use the following command:

    mysql -u root -p --one-database destdbname < alldatabases.sql
    

    Where destdbname is your desired database which you want to restore.

    Another option which is IMHO much safer, is to extract the DB from an --all-databases dump. Example:

    sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' alldatabases.sql > output.sql
    

    Replace dbname with the desired database name. alldatabases.sql is the name of your sql-dump file. That way you'll have the seperated DB on file, and then you can restore using a simple mysql command.

    (Credits goes to: Darren Mothersele - see his page)

    0 讨论(0)
  • 2020-12-22 16:32

    mysqldump output is just a set of SQL statements.

    You can provide the desired database in the command line and skip the commands against the other databases using:

    mysql -D mydatabase -o mydatabase < dump.sql
    

    This will only execute the commands when mydatabase is in use

    0 讨论(0)
  • 2020-12-22 16:37

    When using the sed-approach suggested by Hetzbh, be sure to manually copy the initial and final lines from the original dump, such as e.g.

    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    

    and

    /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
    
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
    

    to the start and end respectively of the stripped file produced by sed. Otherwise import may fail due to foreign constraints not respected by the alphabetic order of the tables in the dump (i.e. errno: 150 "Foreign key constraint is incorrectly formed").

    0 讨论(0)
提交回复
热议问题