linux中mysql下mysqldump命令常见用法详解

打印 上一主题 下一主题

主题 909|帖子 909|积分 2727

一、导出

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 “name=‘qipa250’” -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步迁移视图。
查询出要导的库的全部表
  1. 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
  导出视图
  1. SELECT CONCAT("CREATE VIEW ",TABLE_NAME," as ",VIEW_DEFINITION,";") FROM information_schema.VIEWS where table_schema='mytest';
复制代码
如果是同名库的导出可以用下面的语句
  1. 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和库名,必要用下面的方式导出。
查看存储过程
  1. select routine_name,routine_type from information_schema.routines where routine_schema='mytest' and routine_type='PROCEDURE';
复制代码
查看函数
  1. select routine_name,routine_type from information_schema.routines where routine_schema='mytest' and  routine_type='FUNCTION';  
复制代码
查看触发器
  1. select trigger_name from information_schema.triggers where trigger_schema="mytest";
复制代码
查看事件
  1.     select event_name from information_schema.events where event_schema='mytest';
复制代码
导出存储过程和函数
  1. 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;
复制代码
导出触发器
  1. 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;
复制代码
导出事件
  1. 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;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

笑看天下无敌手

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

标签云

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