mysqldump导数据

前景

我们生产中要求编写sh脚本来执行数据dump。
编写完mysqldump语句后,改文件后缀为.sh之后,就可以通过 sh xxx.sh的命令在linux上面运行,文件名前面什么都不加,表示导出文件的目录和当前脚本目录同级。

sh xxx.sh运行之后,输入密码即可

注意

  1. 脚本内容直接用了mysqldump,如果没有软连接或配置MySQL环境变量的,是不会是别的。
  2. 确保文件输出的路径有权限执行。
  3. –set-gitd-purged=off的版本问题(后面有说明)

导出多条数据多行的脚本

mysqldump -h19.111.240.17 -p3306 -uroot -p --default-character-set=utf8 --set-gitd-purged=off --single-transaction --skip-lock-tables --skip-extended-insert --complete-insert -t --compact database_aaa table_name_bbb --where="id in (3,4,5)" > aaa.sql

对于–set-gitd-purged=off的版本问题

关于GTID是5.6以后,加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。
官方给的:A global transaction identifier (GTID) is a unique identifier created and associated with each transaction committed on the server of origin (master).
所以可能是因为在一个数据库里面唯一,但是当导入其他的库就有可能重复。所有会有一个提醒。

可以通过添加–set-gtid-purged=off 或者–gtid-mode=OFF这两个参数设置。

dump常用参数

–default-character-set=utf8

设置导出文件的字符编码,如果中文乱码,需要调整编辑器的编码格式为utf8,默认是一般是gbk的

–single-transaction

该参数通过在一个事务中导出所有表从而创建一个一致性的快照,当前版本的MySQL只可以对innodb 引擎保证一致性,导出过程中不会锁表其他引擎,如MyISAM 在导出期间会锁表为保证有效的dump文件,即正确的表内容和二进制日志位置,在导出的过程中不能有如下操作

  • ALTER TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE

如指定了 --lock-tables参数则会自动将其关闭,推荐在mysqldump中使用该参数

–skip-lock-tables

加此参数,可以在不锁表的情况导出数据,速度更快一些
参数lock-tables 是一次性锁定当前库的所有表,不只是锁定当前导出表

–skip-extended-insert

默认mysqldump会将多条插入语句导出成一条insert语句格式,得拉很长,不好观察数据

insert into t values(1),(2);

–skip-extended-insert作用就是生成多条insert语句

insert into t  values(1);
insert into t values(2);

–complete-insert

使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。

–compact

导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:–skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys

其他参数可以搜索:mysqldump参数去找,有很多相关博文
https://www.cnblogs.com/qq78292959/p/3637135.html

dump基础操作

语法

mysqldump [选项] 数据库名 [表名] > 脚本名

mysqldump [选项] --数据库名 [选项 表名] > 脚本名

mysqldump [选项] --all-databases [选项] > 脚本名

选项参数,加不加空格无所谓

参数名缩写含义
–host-h服务器IP地址
–port-P服务器端口号
–user-uMySQL 用户名
–pasword-pMySQL 密码
–databases指定要备份的数据库
–all-databases备份mysql服务器上的所有数据库
–compact压缩模式,产生更少的输出
–comments添加注释信息
–complete-insert输出完成的插入语句
–lock-tables备份前,锁定所有数据库表
–no-create-db/–no-create-info禁止生成创建数据库语句
–force当出现错误时仍然继续备份操作
–default-character-set指定默认字符集
–add-locks备份数据库表时锁定数据库表

实例

-- 备份所有数据库:
mysqldump -uroot -p --all-databases > aaa.sql

-- 备份指定数据库db1:
mysqldump -uroot -p db1 > aaa.sql

-- 备份指定数据库db1指定表tbl1 tbl2(多个表以空格间隔)
mysqldump -uroot -p  db1 tbl1 tbl2 > aaa.sql

-- 备份指定数据库db1排除某些表tbl1 tbl2
mysqldump -uroot -p db1 --ignore-table=db1.tbl1 --ignore-table=db1.tbl2 > aaa.sql
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值