mysqldump导数据

  • 前景
  • 注意
  • 导出多条数据多行的脚本
  • 对于--set-gitd-purged=off的版本问题
  • dump常用参数
  • --default-character-set=utf8
  • --single-transaction
  • --skip-lock-tables
  • --skip-extended-insert
  • --complete-insert
  • --compact
  • dump基础操作
  • 语法
  • 选项参数,加不加空格无所谓
  • 实例


前景

我们生产中要求编写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参数去找,有很多相关博文

dump基础操作

语法

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

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

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

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

参数名

缩写

含义

–host

-h

服务器IP地址

–port

-P

服务器端口号

–user

-u

MySQL 用户名

–pasword

-p

MySQL 密码

–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