您的当前位置:首页>全部文章>文章详情

【MySql】mysql 将数据库中的所有表结构和数据 导入到另一个库(亲测有效)

CrazyPanda发表于:2024-01-30 20:35:15浏览:379次TAG:

一、问题描述

  • 在本地开发一个功能,需要结合具体数据测试代码是否正确,但服务器上的数据不可随便修改。此时则需要将服务器上某个数据库的表批量导入到本地、而后进行测试。

  • 将数据库db1中的所有表及数据(如table1、table2),批量导入到另一个数据库db2中。

二、解决方案

刚开始自己一直尝试用DataGrip、Navicat的sql/csv格式导入导出,总有错误或者遗漏,比如报错中止、50张表却只导入32张等,可能是操作方式有误或者数据格式有问题。也试过用sql语句,但仍失败。经查阅资料、尝试多次,终于成功,记录如下。

1.使用mysqldump命令备份数据库

首先使用mysqldump命令来备份源数据库。mysqldump是MySQL自带的命令行工具,可通过在cmd(windows)或 Linux终端(Linux)中执行如下命令来备份整个数据库:

mysqldump -u <username> -p <database_name> > backup.sql

其中,是数据库的用户名,<database_name>是要备份的数据库的名称,backup.sql是备份文件的名称。执行完该命令后,会在当前目录生成一个名为backup.sql的文件,该文件包含了源数据库的所有表结构和数据。其他的一些导出语句,可参考以下:

//导出完整数据库结构和数据
mysqldump -u 用户名 -p 数据库名 > 导出的文件名  
//导出数据库结构
mysqldump -u 用户名 -p -d 数据库名 > 导出的文件名 
//导出一个表,包括表结构和数据 
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名     
//导出一个表结构
mysqldump -u 用户名 -p -d数据库名  表名> 导出的文件名

注:建议使用mysqldump备份数据库,能完整保留源数据库的结构和数据。DataGrip、Navicat的导入导出,由于两个数据库之间可能存在差异,数据结构、格式会发生改变,导致复制失败。

2.创建目标数据库

需要在目标数据库中创建对应的数据库,可以使用MySQL的命令行工具登录到目标数据库,执行以下命令来创建数据库:

create database <database_name>;

其中,<database_name>是目标数据库的名称。

3.导入数据 到目标数据库

有了源数据库的备份文件和目标数据库,可以使用MySQL的命令行工具将备份的sql语句导入到目标数据库。进入backup.sql所在目录(如果是从服务器导入到本机 可将服务器上生成的backup.sql文件下载到本地),在目标数据库的终端执行以下命令:

mysql -u <username> -p <database_name> < backup.sql

其中,是目标数据库的用户名,<database_name>是目标数据库的名称,backup.sql是源数据库的备份文件。

执行完该命令后,目标数据库将包含与源数据库完全相同的所有表结构和数据。

三、补充知识

3.1 mysqldump命令介绍

[root@localhost ~]# mysqldump -help
Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

登录选项

1.登录选项:
    -u user:指定用户
    -h host:指定主机
    -p:表示要使用密码
    -E, --events: 备份事件调度器
    -R, --routines: 备份存储过程和存储函数
2.备份选项:
    --all-databases:备份所有数据库
    --databases db1 db2:备份指定的数据库
    --single-transaction:对事务引擎执行热备
    --flush-logs:更新二进制日志文件
    --master-data=2
        1:每备份一个库就生成一个新的二进制文件(默认)
        2:只生成一个新的二进制文件
    --quick:在备份大表时指定该选项

3.2 常用备份命令

//导出命令
#导出包括系统数据库在内的所有数据库(all.sql默认保存在bin文件夹下面)
	mysqldump -u username -p --all-databases > filename.sql
#导出指定数据库表结构和数据
	mysqldump -u username -p dbname [tbname...] > filename.sql	
#导出多个数据库:
	mysqldump -u username -p --databases db1 db2 ...> filename.sql
#导出多张表:
	mysqldump -u username -p --databases db1 --tables t1 t2> filename.sql
#只导出表结构不导表数据,添加“-d”命令参数
    mysqldump -u username -p -d dbname [tbname...] > filename.sql
#只导出表数据不导表结构,添加“-t”命令参数
    mysqldump -u username -p -t dbname [tbname...] > d:/user.sql
#只导出db1数据库的表结构
 导出:mysqldump -u root -p --no-data --databases db1 > backup.sql
 导入:mysql -u root -p db1 < backup.sql
 
 
#系统行导入命令
  mysql -u username -p dbname < d:XX.sql(路径) 
  mysql -u root -p db_name < d:/backup.sql
#source导入
  mysql> use db_name;
  mysql> source /backup/mysqldump/backup.sql(路径)

参数说明:

username:表示用户名称;
dbname:表示需要备份的数据库名称;
tbname:表示数据库中需要备份的数据表,可以指定多个数据表。省略该参数时,会备份整个数据库;
右箭头“>”:用来告诉 mysqldump 将备份数据表的定义和数据写入备份文件;
filename.sql:表示备份文件的名称,文件名前面可以加绝对路径。通常将数据库备份成一个后缀名为.sql的文件。
注意:mysqldump 命令必须在 cmd 窗口下执行,不能登录到 MySQL 服务中执行。
输入密码后,Mysql就会进行备份了。

原文链接

猜你喜欢

【MySql】MySQL表的内外连接和视图
内外连接一、表的内外连接(1)左外连接(2)右外连接1. 内连接2. 外连接3. 练习二、视图1. 视图的使用2. 视图规则和限制一、表的内外连接表的连接分为内连和外连。1. 内连接内连接实际上就是利用 where 子句对两种表形成的笛卡尔积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。语法: select&nbsp;字段&nbsp;from&nbsp;表1&nbsp;inner&nbsp;join&nbsp;表2&nbsp;on&nbsp;连接条件&amp;nbs
发表于:2024-01-30 浏览:375 TAG:
【MySQL】MySQL主从同步实现
要实现MySQL的主从同步,可以按照以下步骤来进行操作:1 配置主服务器确保主服务器的MySQL配置文件my.cnf或my.ini中启动了二进制日志中brinary.log,即设置了log-bin参数为ON。为主数据库创建一个用于复制的用户,并授予复制权限。例如使用以下明命令:Create USER &#39;repl&#39;@&#39;slave_ip_address&#39; INENTIFIED BY &#39;password&#39;;Grant REPLACEACTION SLAV
发表于:2024-06-27 浏览:241 TAG:
【MySQL】MySQL中的json操作
引言Mysql5.7版本以后提供了一个原生的Json类型,Json值将不再以字符串的形式存储,而是采用一种允许快速读取文本元素(document elements)的内部二进制(internal binary)格式。 在Json列插入或者更新的时候将会自动验证Json文本,未通过验证的文本将产生一个错误信息。 Json文本采用标准的创建方式,可以使用大多数的比较操作符进行比较操作,例如:=, &lt;, &lt;=, &gt;, &gt;=, &lt;&gt;, != 和 &lt;=&gt;。
发表于:2024-07-26 浏览:254 TAG:
【MySql】MySQL产生死锁的根本原因及解决方法
概念死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程一、 什么是死锁死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程.二、 死锁产生的四个必要条件互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只
发表于:2024-03-13 浏览:292 TAG:
【MySql】mysql explain 查询详解
MySQL 的 EXPLAIN 语句是一个强大的工具,用于分析和优化查询的执行计划。它提供了关于 MySQL 如何执行查询的详细信息,包括表的访问顺序、访问方法、使用的索引、连接类型等。以下是 EXPLAIN 查询的详细解释:
发表于:2025-02-21 浏览:75 TAG: #mysql
【MySql】深入解析数据库索引
写在前面&nbsp;MySQL索引是数据库中一个关键的概念,它可以极大地提高查询性能,加快数据检索速度。但是,要充分发挥索引的作用,需要深入理解它们的工作原理和使用方式。在本文中,我们将深入解析MySQL索引,探讨它们的重要性、类型、创建、维护以及最佳实践。一、基础介绍&nbsp;1.1&nbsp;什么是索引?在数据库中,索引是一种数据结构,用于快速查找表中的数据。索引包含表中一列或多列的值,这些值按照一定的顺序进行排序,以便优化数据的检索速度。通过使用索引,数据库可以避免全表扫描,从而提高查询
发表于:2023-12-07 浏览:357 TAG:
【MySQL】 复合查询 | 内外连接
文章目录1. 复合查询unionunion all单行子查询多行子查询多列子查询in关键字all关键字any关键字多表笛卡尔积自连接在where子句使用子查询在from子句中使用子查询合并查询2. 内连接3. 外连接左外连接右外连接1. 复合查询多表笛卡尔积显示雇员名、雇员工资以及所在部门的名字由于员工 信息属于 emp表 而所在部门名字属于 dept表 数据来自不同的表,所以需要进行多表查询表示从 emp (员工表) 和dept (部门表)
发表于:2023-11-30 浏览:872 TAG:
【MySql】怎么利用聚合函数实现高效地分组统计?
文章目录聚合函数:怎么高效地进行分组统计?sum( )avg( ) &amp; max( ) &amp; min( )count( )聚合函数:怎么高效地进行分组统计?MySQL中有5种聚合函数较为常用,分别是求和函数sum(), 求平均函数avg(), 最大值函数max(), 最小值函数min()和计数函数count()。在超市项目中有一个需求是这样的:经营者提出,他们需要统计一个门店,每天、每个单品的销售情况,包括销售数量和销售金额等。这里涉及3个数据表,具体信息如下所示:销售明细表demo
发表于:2023-12-08 浏览:392 TAG:
【MySql】索引怎么提高查询的速度?
文章目录索引:怎么提高查询的速度?如何创建组合索引?组合索引的原理如何创建单字段索引?单字段索引的作用如何选择索引字段?索引是什么?单字段索引组合索引总结索引索引相关面试题MySQL索引的底层实现索引创建原则索引优缺点索引失效场景索引:怎么提高查询的速度?在超市信息系统刚刚开始运营的时候,因为数据量很少,每一次的查询都能很快拿到结果。但是,系统运转时间长了以后,数据量不断地累积,变得越来越庞大,很多查询的速度就变得特别慢。这个时候,我们就采用了 MySQL 提供的高效访问数据的方法—— 索引,有
发表于:2023-12-07 浏览:383 TAG:
【MySql】MySql给数据库表添加新字段
要在MySQL中添加新字段,您可以使用ALTER TABLE语句。以下是添加新字段的基本语法:ALTER&nbsp;TABLE&nbsp;table_name&nbsp;ADD&nbsp;column_name&nbsp;datatype;其中:table_name 是您要在其中添加新字段的表的名称。column_name 是新字段的名称。datatype 是新字段的数据类型。例如,VARCHAR、INT或DOUBLE等。以下是一个示例ALTER TABLE语句,演示如何向名为user的表添加一
发表于:2024-09-03 浏览:247 TAG: #mysql