【MySql】mysql 将数据库中的所有表结构和数据 导入到另一个库(亲测有效)
一、问题描述
在本地开发一个功能,需要结合具体数据测试代码是否正确,但服务器上的数据不可随便修改。此时则需要将服务器上某个数据库的表批量导入到本地、而后进行测试。
将数据库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. 什么是数据库事务?数据库事务是一个作为单个逻辑工作单元执行的一系列操作。事务具有ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这意味着事务内的操作要么全部成功,要么全部失败,保持数据完整性,并且独立于其他事务运行。2. MySQL中InnoDB与MyISAM的区别是什么?InnoDB支持事务处理,行级锁定和外键,适用于需要高并发和事务处理的场景。MyISAM不支持事务和行级锁定,但读取速度快,适
- 【MySQL】 复合查询 | 内外连接
- 文章目录1. 复合查询unionunion all单行子查询多行子查询多列子查询in关键字all关键字any关键字多表笛卡尔积自连接在where子句使用子查询在from子句中使用子查询合并查询2. 内连接3. 外连接左外连接右外连接1. 复合查询多表笛卡尔积显示雇员名、雇员工资以及所在部门的名字由于员工 信息属于 emp表 而所在部门名字属于 dept表 数据来自不同的表,所以需要进行多表查询表示从 emp (员工表) 和dept (部门表)
- 【MySql】关于外键和连接, 如何做到关联查询?
- 文章目录外键和连接:如何做关联查询?如何创建外键?连接关联查询中的误区外键和连接:如何做关联查询?在实际的数据库应用开发过程中,我们经常需要把2个或2个以上的表进行关联,以获取需要的数据。这是因为,为了提高存取效率,我们会把不同业务模块的信息分别存放在不同的表里面。但是,从业务层面上看,我们需要完整全面的信息为经营决策提供数据支撑。还是以超市项目为例,数据库里面的销售流水表一般只保存销售必需的信息,比如商品编号,数量, 价格,金额和会员卡号等。但是,在呈现给超市经营者的统计报表中,只包括这些信息
- 【MySQL】索引有哪些优缺点
- 索引是数据库中用于提高查询性能的重要工具,但它也有一些有点和确定,一下是索引的主要优缺点:优点: 1. 加速查询速度最显而易见的有嗲你是加速select查询速度。通过使用索引,数据库引擎能够更快的定位和检索数据,特别是在大型数据集中。 2. 排序性能提升索引可以提高排序操作的性能,因为数据库引擎可以按照索引顺序而不是表中实际物理存储顺序来执行排序。 3. 唯一
- 【MySql】MySql给数据库表添加新字段
- 要在MySQL中添加新字段,您可以使用ALTER TABLE语句。以下是添加新字段的基本语法:ALTER TABLE table_name ADD column_name datatype;其中:table_name 是您要在其中添加新字段的表的名称。column_name 是新字段的名称。datatype 是新字段的数据类型。例如,VARCHAR、INT或DOUBLE等。以下是一个示例ALTER TABLE语句,演示如何向名为user的表添加一
- 【MySql】Centos7 安装 MySQL5.7 步骤
- Centos7 安装 MySQL5.7 步骤(一)、使用yum源方式安装4.1 开启mysql的远程访问权限4.2 为firewalld添加开放端口33064.3 远程连接测试3.1 启动mysql并查看状态3.2 获取临时密码3.3 登录mysql3.4 修改登录密码2.1 下载mysql的yum源配置2.2 安装mysql的yum源2.3 使用yum方式安装mysql2.3.1 安装过程中报错解决1、卸载系统自带 mariadb2、下载并安装MySQL官方的 Yum3、使用并设置mysql4
- 【MySql】如何进行数学计算、字符串处理和条件判断?
- 文章目录如何进行数学计算、字符串处理和条件判断?数学函数字符串函数条件判断函数总结如何进行数学计算、字符串处理和条件判断?MySQL 提供了很多功能强大,而且使用起来非常方便的函数,包括数学函数、字符串处理函数和条件判断函数等。在很多场景中 ,我们都会用到这些函数,比如说,在超市项目的实际开发过程中,会有这样的需求:会员积分的规则是一元积一分,不满一元不积分,这就要用到向下取整的数学函数 floor();在打印小票的时候,收银纸的宽度是固定的,怎么才能让打印的结果清晰而整齐呢?这个时候,就要用到
- 【MySql】json字段内数据求和
- 首先,我们需要使用JSON_EXTRACT函数来解析JSON数据。假设我们的数据表名为data_table,JSON数据字段名为json_data,需要查询的字段为field_name。```sql SELECT JSON_EXTRACT(json_data, '$.field_name') AS extracted_field FROM data_table;### 步骤2:使用JSON函数提取数组内字段 如果字段是一