mysql 将数据库中的全部表结构和数据 导入到另一个库(亲测有效) ...

打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

一、问题形貌



  • 在本地开辟一个功能,须要联合具体数据测试代码是否精确,但服务器上的数据不可随便修改。此时则须要将服务器上某个数据库的表批量导入到本地、而后举行测试。
  • 将数据库db1中的全部表及数据(如table1、table2),批量导入到另一个数据库db2中。
二、解决方案

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

首先利用mysqldump命令来备份源数据库。mysqldump是MySQL自带的命令行工具,可通过在cmd(windows)或 Linux终端(Linux)中执行如下命令来备份整个数据库:
  1. mysqldump -u <username> -p <database_name> > backup.sql
复制代码
其中,是数据库的用户名,<database_name>是要备份的数据库的名称,backup.sql是备份文件的名称。执行完该命令后,会在当前目录生成一个名为backup.sql的文件,该文件包罗了源数据库的全部表结构和数据。其他的一些导出语句,可参考以下:
  1. //导出完整数据库结构和数据
  2. mysqldump -u 用户名 -p 数据库名 > 导出的文件名  
  3. //导出数据库结构
  4. mysqldump -u 用户名 -p -d 数据库名 > 导出的文件名
  5. //导出一个表,包括表结构和数据
  6. mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名     
  7. //导出一个表结构
  8. mysqldump -u 用户名 -p -d数据库名  表名> 导出的文件名   
复制代码
注:发起利用mysqldump备份数据库,能完整保留源数据库的结构和数据。DataGrip、Navicat的导入导出,由于两个数据库之间可能存在差异,数据结构、格式会发生改变,导致复制失败。
2.创建目的数据库

须要在目的数据库中创建对应的数据库,可以利用MySQL的命令行工具登录到目的数据库,执行以下命令来创建数据库:
  1. create database <database_name>;
复制代码
其中,<database_name>是目的数据库的名称。
3.导入数据 到目的数据库

有了源数据库的备份文件和目的数据库,可以利用MySQL的命令行工具将备份的sql语句导入到目的数据库。进入backup.sql所在目录(如果是从服务器导入到本机 可将服务器上生成的backup.sql文件下载到本地),在目的数据库的终端执行以下命令:
  1. mysql -u <username> -p <database_name> < backup.sql
复制代码
其中,是目的数据库的用户名,<database_name>是目的数据库的名称,backup.sql是源数据库的备份文件。
执行完该命令后,目的数据库将包罗与源数据库完全相同的全部表结构和数据。
三、增补知识

3.1 mysqldump命令介绍

  1. [root@localhost ~]# mysqldump -help
  2. Usage: mysqldump [OPTIONS] database [tables]
  3. OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
  4. OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
  5. For more options, use mysqldump --help
复制代码
登录选项
  1. 1.登录选项:
  2.     -u user:指定用户
  3.     -h host:指定主机
  4.     -p:表示要使用密码
  5.     -E, --events: 备份事件调度器
  6.     -R, --routines: 备份存储过程和存储函数
  7. 2.备份选项:
  8.     --all-databases:备份所有数据库
  9.     --databases db1 db2:备份指定的数据库
  10.     --single-transaction:对事务引擎执行热备
  11.     --flush-logs:更新二进制日志文件
  12.     --master-data=2
  13.         1:每备份一个库就生成一个新的二进制文件(默认)
  14.         2:只生成一个新的二进制文件
  15.     --quick:在备份大表时指定该选项
复制代码
3.2 常用备份命令

  1. //导出命令
  2. #导出包括系统数据库在内的所有数据库(all.sql默认保存在bin文件夹下面)
  3.         mysqldump -u username -p --all-databases > filename.sql
  4. #导出指定数据库表结构和数据
  5.         mysqldump -u username -p dbname [tbname...] > filename.sql       
  6. #导出多个数据库:
  7.         mysqldump -u username -p --databases db1 db2 ...> filename.sql
  8. #导出多张表:
  9.         mysqldump -u username -p --databases db1 --tables t1 t2> filename.sql
  10. #只导出表结构不导表数据,添加“-d”命令参数
  11.     mysqldump -u username -p -d dbname [tbname...] > filename.sql
  12. #只导出表数据不导表结构,添加“-t”命令参数
  13.     mysqldump -u username -p -t dbname [tbname...] > d:/user.sql
  14. #只导出db1数据库的表结构
  15. 导出:mysqldump -u root -p --no-data --databases db1 > backup.sql
  16. 导入:mysql -u root -p db1 < backup.sql
  17. #系统行导入命令
  18.   mysql -u username -p dbname < d:XX.sql(路径)
  19.   mysql -u root -p db_name < d:/backup.sql
  20. #source导入
  21.   mysql> use db_name;
  22.   mysql> source /backup/mysqldump/backup.sql(路径)
复制代码
参数说明:
username:表示用户名称;
dbname:表示须要备份的数据库名称;
tbname:表示数据库中须要备份的数据表,可以指定多个数据表。省略该参数时,会备份整个数据库;
右箭头“>”:用来告诉 mysqldump 将备份数据表的定义和数据写入备份文件;
filename.sql:表示备份文件的名称,文件名前面可以加绝对路径。通常将数据库备份成一个后缀名为.sql的文件。
注意:mysqldump 命令必须在 cmd 窗口下执行,不能登录到 MySQL 服务中执行。
输入密码后,Mysql就会举行备份了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表