MySQL导入导出 —— mysqldump 简介及常见用法
一、 导出
导出用户需要有导出对象的权限,例如导出表要有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 > /data/bak/mydb.sql
指定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的博客-CSDN博客
Mysql导出(多张表)表结构及表数据 mysqldump用法 - youngjoy - 博客园
MySQL :: MySQL 8.0 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program
MySQL导入导出 —— mysqldump 简介及常见用法相关推荐
- 运行cmd状态下MySQL导入导出.sql文件
MySQL导入导出.sql文件步骤如下: 一.MySQL的命令行模式的设置: 桌面->我的电脑->属性->环境变量->新建-> PATH=":path\mysq ...
- linux如何mysql实现导出数据库,Linux下MySQL导入导出数据库
linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sq ...
- mysql导入导出乱码问题
linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqld ...
- mysql 导入导出数据库
mysql 导入导出数据库 1.导出数据 // 导出test 数据库 -R 表示导出函数和存储过程,加上使导出更完整 mysqldump -u root -p -R test > test.sq ...
- mysql数据库导入sql文件Mysql导入导出.sql文件的方法
mysql数据库导入sql文件:Mysql导入导出.sql文件的方法 mysql导入sql文件:Mysql导入导出.sql文件 步骤如下: 一.MYSQL的命令行模式的设置: 桌面->我的电脑- ...
- 大数据基础(二)hadoop, mave, hbase, hive, sqoop在ubuntu 14.04.04下的安装和sqoop与hdfs,hive,mysql导入导出
hadoop, mave, hbase, hive, sqoop在ubuntu 14.04.04下的安装 2016.05.15 本文测试环境: hadoop2.6.2 ubuntu 14.04.04 ...
- mysql导入导出语句6_mysql的导入导出 | 吴老二
mysql的导入导出 1.导出结构不导出数据 mysqldump --opt -d 数据库名 -u root -p > xxx.sql 2.导出数据不导出结构 mysqldump -t 数据库名 ...
- Mysql导入导出亿条数据(排坑篇)
声明:这是我在大学毕业后进入第一家互联网工作学习的内容 背景:公司业务需要给某个活动的支付宝用户发送模板消息 经调查发现,此次活动的用户数量大约2亿,为了模拟生产环境,领导让我把生产库的用户信息(脱敏 ...
- MySQL导入导出实践
最近一次数据迁移,需要将MySQL的数据导出.处理后导入到新表和ES.这里做个简单记录,方便后续查询. 注: 为了写文章方便及隐私安全,实际内容会有所简化.例如表结构简化.数据库连接部分全部用 xxx ...
最新文章
- 2018-3-27 专家系统
- 面向小白的最全 Python 可视化教程,超全的!
- 感谢武汉晚报的采访报道:清华硕士回襄阳老家当“威客” 两年赚30万元
- 波士顿动力机器狗新技能!跳绳园艺做家务,还有书法神技
- 《Groovy官方指南》翻译邀请
- optee3.8 qemu_v8的环境搭建篇(ubuntu20.04)
- python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...
- python开发的系统有哪些_Python web开发=几个模板系统的性能对比
- 状态栏编程(显示系统时间和进度条)
- WPF应用程序内嵌网页
- js 比较时分大小_JS 判断两个时间的大小(可自由选择精确度:天,小时,分钟,秒)...
- MyBatis基本例子-实现增删改查
- MSRA,我的实习初体验(下)
- CoinFLEX的基本情况以及与Bakkt
- idea提交本地项目到git
- 计算机组成原理白中英ppt,计算机组成原理(本全)白中英.ppt
- 【白皮书】2020腾讯人工智能白皮书.pdf(附下载链接)
- 微信商户号转账到个人银行卡加密算法及结果查询问题
- Android布局优化之TextView、ImageView合二为一
- matlab升幂降幂排列,升幂降幂是什么意思(升幂排列与降幂排列)
热门文章
- amd python mkl_pip install“无效要求:'numpy1.13.1+mklcp36cp36mwin_amd64'”
- 嚼得菜根做得大事·《菜根谭》·六
- ajax可以说成技能吗,争论:Ajax技能能无法即将没落?
- 简历制作-Word 2007插入相片
- 【Git】1336- 45 个 Git 经典操作场景,专治不会合代码
- 45 个 git 合代码的经典操作场景
- java e4_请问,eclipse e4 究竟是什么?愿能集思广益
- UltraSnap PRO(抓图工具) V2.3 绿色汉化版
- seer文献_SEER数据库的申请及数据提取方法与流程
- 改善客户体验 (CX) 的 10 种方法