首页 > 数据库 >MySQL导入导出 —— mysqldump 简介及常见用法

MySQL导入导出 —— mysqldump 简介及常见用法

时间:2023-04-18 10:39:08浏览次数:51  
标签:-- sql 导出 导入 mysqldump MySQL data schema


一、 导出

导出用户需要有导出对象的权限,例如导出表要有select权限、导出视图要有show view权限、导出触发器要有trigger权限、需要锁表时要有lock tables权限等。

如果dump文件中包含了GTID信息,则无法导入到未启用GTID的数据库(低于5.6.9版本的数据库不支持GTID,因此也无法导入到这些库中)。

1. db级

导出所有db结构和数据

mysqldump -uroot -p -A > /data/bak/all.sql

仅导出所有db结构

mysqldump -uroot -p -A -d > /data/bak/all_struct.sql

仅导出所有db数据不导表结构

mysqldump -uroot -p -A -t > /data/bak/all_data.sql

导出单个db结构和数据

mysqldump -uroot -p mydb > /data/bak/mydb.sql

仅导出单个db结构

mysqldump -uroot -p mydb -d > /data/bak/mydb.sql

仅导出单个db数据

mysqldump -uroot -p mydb -t > /data/bak/mydb.sql

导出多个db结构和数据(--databases参数,数据,结构单独导出方法同上)

mysqldump -uroot -p --databases db1 db2 > /data/bak/muldbs.sql

2. 表级

导出指定db某张表结构及数据(数据,结构单独导出方法同上)

mysqldump -uroot -p dbname test > db.sql

导出指定db中多张表(test1,test2,test3)结构及数据

mysqldump -uroot -p dbname test1 test2 test3 > db.sql

排除部分表,导出DB中其余表结构和数据

mysqldump -uroot -p mydb --ignore-table=mydb.test1 --ignore-table=mydb.test2

指定where条件导出表的部分数据

mysqldump -uroot -w "id=6032" -p db_name  tbl_name > /tmp/where.sql

3. 主要导出参数

  • --all-databases, -A:导出所有数据库
  • --databases, -B:导出多个数据库。不使用该选项时,mysqldump把第一个名字参数作为db名,后面的作为表名;使用该选项时,则把每个名字都当作为db名。
  • default-character-set:指定默认字符集,不指定默认为UTF-8
  • --force, -f:即使发现sql错误,仍然继续导出
  • --no-data, -d:只导出表结构
  • --port=port_num, -P port_num:端口号
  • --quick, -q:强制mysqldump从服务器每次查询一行数据而不是查询整个表。避免大表导出时查询刷爆内存且热点数据被刷出缓冲池,通常建议总是启用该选项。
  • --tables:覆盖 --databases or -B选项,后面所跟参数被视作表名
  • --tab=path(-T path):产生TAB分割的数据文件,为每张表建一个包含create table语句的tabname.sql和一个包含数据的tabname.txt文件
  • --xml, -X:导出为xml文件
  • --single-transaction:导出开始前先执行start transaction命令,导出时不锁表,仅支持InnoDB存储引擎,需要确保导出时无DDL操作
  • --lock-tables(-l):导出过程中依次锁住每个schema下所有表(只能保证各schema下表导出的一致性),被锁的表只能读,MyISAM存储引擎常用
  • --lock-all-tables(-x):导出过程中锁住所有schema下所有表,避免前面参数无法保证所有schema下表导出的一致性的问题,但是所有表都变为只读
  • --master-data=[value] 主要用于建从库。value=1时,dump文件包含change master语句,导入时自动执行;value=2时,change master语句被注释,需手动执行。--master-data会忽略--lock-tables选项,如果不加--single-transaction选项会自动使用--lock-all-tables
  • --where(-w):指定导出条件
  • --events(-E):导出事件调度器
  • --routines(-R):导出存储过程和函数
  • --triggers:导出触发器
  • --hex-blob:将binary,varbinary,blog,bit列类型导出为16进制格式

二、 导入

导入用户需要有执行备份文件中语句的权限(ddl、dml等)。

1. 常用导入方法

  • 系统命令行方法

mysql -uroot -p < test_backup.sql

  • mysql命令行source方法

mysql -uroot -p

source /home/mysql/test_backup.sql
 

2. 导入示例

导入所有数据库

  • mysql命令行:mysql>source /data/bak/all.sql
  • 系统命令行: mysql -uroot -p123456 < /data/bak/all.sql

导入单个数据库

  • mysql命令行:

mysql>use mydb

mysql>source /data/bak/mydb.sql

  • 系统命令行:

mysql -uroot -p123456 mydb < /data/bak/mydb.sql

导入单个数据库的多个表

  • mysql命令行:

mysql>use mydb

mysql>source /data/bak/multables.sql

  • 系统命令行:

mysql -uroot -p123456 mydb < /data/bak/multables.sql

导入多个数据库(一个备份文件里有多个数据库的备份,此时不需要指定数据库)

  • mysql命令行:

mysql>source /data/bak/muldbs.sql

  • 系统命令行:

mysql -uroot -p123456 < /data/bak/muldbs.sql

三、 拼出部分对象创建语句

有时将数据库迁移新环境时,业务方会要求修改新库库名和用户名,如果源库中有视图,存储过程、函数、触发器、事件等对象,导入时会遇到问题,因为这些对象definer中可能会写明了用户,创建语句中指定了库名。

这种情况下,可以先做一次全量导入,然后删掉这些问题对象,再分别用导入创建语句的方式导入这些对象。

1. 导出视图创建语句

创建视图的时候一般会带上库名和definer的定义,如果迁移数据时,目标库的库名、用户名和源库的不一样,则视图迁移会失败。 如果遇到这种情况,需要分2步导出,第1步迁移表数据,第2步迁移视图。

  • 查询出要导的库的全部表
select table_name from information_schema.tables where table_schema='mytest' and table_type!='view';
  •  查询之后,用notepad++替换掉| 和\r 回车,然后mysqldump命令导出
mysqldump --set-gtid-purged=OFF -uroot -p --single-transaction -R --triggers --events --max_allowed_packet=1G mytest T1 T2 T3 T4
  • 导出视图
SELECT CONCAT("CREATE VIEW ",TABLE_NAME," as ",VIEW_DEFINITION,";") FROM information_schema.VIEWS where table_schema='mytest';
  •  如果是同名库的导出可以用下面的语句
SELECT CONCAT("DROP VIEW IF EXISTS `",TABLE_SCHEMA,"`.`",TABLE_NAME,"`;\nCREATE VIEW `", TABLE_SCHEMA,"`.`",TABLE_NAME,"` as ",VIEW_DEFINITION,";") FROM  information_schema.VIEWS where table_schema='mytest';

2. 导出其他对象

一般情况下,-R  --triggers --events 可以正常导出存储过程、函数、触发器等信息,但是如果创建的时候也写了definer和库名,需要用下面的方式导出。

--查看存储过程
select routine_name,routine_type from information_schema.routines where routine_schema='mytest' and routine_type='PROCEDURE';

--查看函数
select routine_name,routine_type from information_schema.routines where routine_schema='mytest' and  routine_type='FUNCTION';

--查看触发器
select trigger_name from information_schema.triggers where trigger_schema='mytest';

--查看事件
select event_name from information_schema.events where event_schema='mytest';

导出存储过程和函数

SELECT CONCAT("DROP ",TYPE," IF EXISTS `",db,"`.`", NAME,"`;\nDELIMITER ;;\nCREATE ",TYPE," `",db,"`.`",NAME,"`(", param_list,") ",IF ( TYPE = "FUNCTION", CONCAT ("RETURNS ", RETURNS, "\n"),"\n"), body_utf8,";;\nDELIMITER ;") FROM  mysql.proc;

导出触发器

SELECT CONCAT("DROP TRIGGER IF EXISTS `",TRIGGER_SCHEMA, "`.`", TRIGGER_NAME,"`;\nDELIMITER ;;\nCREATE TRIGGER `",TRIGGER_SCHEMA,"`.`",TRIGGER_NAME,"` ",ACTION_TIMING," ",EVENT_MANIPULATION," ON `",EVENT_OBJECT_SCHEMA,"`.`",EVENT_OBJECT_TABLE,"` FOR EACH ROW\n",ACTION_STATEMENT,";;\nDELIMITER ;") FROM information_schema.TRIGGERS;

导出事件

SELECT  CONCAT(   "DROP EVENT IF EXISTS `",   EVENT_SCHEMA,   "`.`",   EVENT_NAME,   "`;\nDELIMITER ;;\nCREATE EVENT `",   EVENT_SCHEMA,   "`.`",   EVENT_NAME,   "` ON SCHEDULE EVERY ",   INTERVAL_VALUE,   " ",   INTERVAL_FIELD,   " STARTS '",   STARTS,"'",   IF ( ENDS <>NULL, CONCAT (" ENDS '",ENDS,"'"),""),     " ON COMPLETION ",   ON_COMPLETION,   " ENABLE DO ",   EVENT_DEFINITION,   ";;\nDELIMITER ;"  ) FROM  information_schema.events;

参考

centos 下mysqldump备份多个数据库命令_linuxheik的博客

Mysql导出(多张表)表结构及表数据 mysqldump用法 - youngjoy

MySQL :: MySQL 8.0 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program

标签:--,sql,导出,导入,mysqldump,MySQL,data,schema
From: https://blog.51cto.com/u_13631369/6202531

相关文章

  • oracle、达梦数据库、MySQL数据创建表与字段注释
    /**1.oracle注释*//*表本身注释*/commentontable表名is'注释信息';/*字段注释*/commentoncolumn表名.字段名is'注释信息';/*实例如下:*/commentontableUSERis'用户表';commentoncolumnUSER.IDis'主键ID';/**2.MySQL注释*//*表本身注释*/altertable表名co......
  • 测试环境治理之MYSQL索引优化篇
    作者:京东物流 李光新1治理背景测试环境这个话题对于开发和测试同学一定不陌生,大家几乎每天都会接触。但是说到对测试环境的印象,却鲜有好评:•环境不稳定,测试五分钟,排查两小时•基础建设不全,导致验证不充分,遗漏缺陷•多人共用,节点堵塞这些问题在行业内其实屡见不鲜,针对测试......
  • 应用连MySQL 报错ERROR 1129 Host is blocked because of many connection errors
    开发反馈应用连MySQL报错 createconnectionSQLException,url:连接串,errorCode1129。搜索1129报错,报错内容为:Hostisblockedbecauseofmanyconnectionerrors一、报错原因同一个ip在短时间内产生太多中断的数据库连接(超过mysql数据库max_connection_errors设置),导......
  • Windows系统下,HHDBCS辅助Mysql安装
    通常来说,安装好Mysql后,使用HHDBCS和本机IP,就可以直接连入数据库。但有时候在安装成功的情况下,却连接不上Mysql。此时可以点击测试,会弹出提示框:由提示可知,被Mysql拒绝访问了。我们可以通过CMD来解决这个问题。使用管理员模式进入CMD;在登入mysql后,更改“mysql”数据库里的“......
  • 如何将之前编辑的文章HTML源代码导入到TinyMCE编辑器中
    如果你想用TinyMCE来修改你之前写的文章那么你需要将源代码放到TinyMCE中,如果服务器把HTML源码发给我们可是我们应该怎样调用?方法为使用 tinymce.activeEditor.setContent()这个函数具体用法为:tinymce.activeEditor.setContent()//设置TinyMCE编辑器里的内容源代码tin......
  • MySQL_05存储过程
    存储过程存储过程有哪些优点:1、存储过程是一个预编译的sql语句优点:(1):存储过程预编译过得,执行效率高(2):存储过程的代码直接放在数据库中,通过存储过程的名称直接调用(3):安全性表较高,执行存储需要一定权限用户(4):存储过程可以重复使用,可减少开发人员的工作量......
  • MySQL高可用之MHA-02
    续目录配置vip一、keepalived方式二、通过脚本实现VIP切换总结@目录配置vip一、keepalived方式二、通过脚本实现VIP切换总结配置vipvip配置可以采用两种方式,一种通过keepalived的方式管理虚拟ip的浮动;另外一种通过脚本方式启动虚拟ip的方式(即不需要keepalived或者heartbeat类似......
  • MySQL中间件mycat-01
    @目录mycat基础概念Mycat安装部署mycat基础概念1、什么是MyCat一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群一个融合内存缓存技术、NoSQL技术、HDFS大数据的新......
  • MySQL高可用-双主(keepalived)
    生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即两台MySQL服务器如果其中有一台MySQL服务器挂掉后,另外一台能立马接替其进行工作。MySQL的高可用方案一般有如下几种:keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD等,比较常用的是keepalived+双主,MHA和PXC。本节主......
  • MySQL高可用之PXC
    1.PXC简介参考Percona官方https://www.percona.com/software/mysql-database/percona-xtradb-clusterPXC(PerconaXtraDBCluster)是一个开源的MySQL高可用解决方案。它将PerconaServer和XtraBackup与Galera库集成,以实现同步多主复制。基于Galera的高可用方案主要有MariaDBGal......