mysql之使用mysqldump 进行数据导出

2023年 12月 19日 92.9k 0

jmysqldump是mysql官方自带的逻辑备份的工具。支持以多个维度对数据库进行备份,如全库备份、单库备份、表备份、按表的过滤条件备份等。mysqldump支持将数据转换成标准的insert sql语句,也支持按照特定的分割符分割的文件,如csv、xml等。

mysqldump 连接用户需要的权限

select、
show view(导出视图)、
trigger(导出触发器)、
Lock tables(如果没有使用--single-transaction,默认需要lock table)

mysql常用参数

类型 参数 作用
帮助参数 -? [--help] 显示帮助信息
连接参数 -u [--user] 用户
-p [password] 密码
-h [--host] 主机域名或ip
-P [--Port] 端口
DDL参数 --add-drop-table 在每个CREATE TABLE语句之前写一个DROP TABLE语句
--add-drop-database 在每个CREATE DATABASE语句之前写一个DROP DATABASE语句,该选项通常与--all-databases或--databases选项一起使用,除非指定了其中一个选项,否则不会写入。
格式参数 --compact 产生更紧凑的输出。该选项启用:--skip-add-drop-table、--skip-add-locks、--skip-comments、--skip-diasbles-keys 和 --skip-set-charset选项。
导出数据控制参数 -A [--all-databases] 导出所有数据库
-B [--databases ] 导出指定的单个或多个数据库
--tables 参数值的格式为"db_name table_name
-w [--where] 指定导出的条件
--ignore-table 指定表不导出,参数值格式:--ignore-table=db_name.tbl_name 不要导出指定的表,它必须同事使用数据库名和表名来指定。要忽略多个表,需要多次使用此选项。
-d [--no-data] 只导出表结构,不导行数据
-t [--no-create-info] 只导行数据,不导表结构
--insert-ignore 以insert ignore的方式导出信息,导入时如果目标表有冲突则会被忽略
锁控制参数 -l [--lock-tables] 在对象导出期间,会锁定该对象,此时其它会话无法对该表进行写入操作,默认启用。可以使用--skip-lock-tables关闭。
--single-transaction 该选项会将事务隔离级别设置为RR,并在导出数据之前设置start transation语句。这个参数和--lock-tables是互斥的。这个参数可以用来保证导出一致性数据。
其他参数 --force 在导出导入过程中,如果遇到错误,继续执行
--set-gtid-purged=value 该参数控制是否添加SET @@GLOBAL.gtid_purged
到输出文件中。这个参数还可能在输出文件中写入SET @@SESSION.SQL_LOG_BIN = 0;
,这意味着在此会话中对数据库所做的任何后续更改都不会记录在二进制日志文件中。该参数默认值是:auto。
--quick 该参数控制mysqldump从服务器检索表的行数据,每次一行,而不是检索整个数据集并将其缓存在内存中,这对于导出大表比较有用。

生产环境使用建议:

  • --lock-tables:该参数是默认开启的,也就是导出期间,会锁定该表(可以在审计日志中看到LOCK TABLES table_name READ *!32311 LOCAL */这样的信息),导致导出期间不能对表进行写入,生产环境导出注意一定要关闭这个参数,方法:指定--skip-lock-tables。
  • --single-transaction:用来创建一致性快照。生产环境建议开启。
  • --set-gtid-purged: 当这个参数打开时,mysqldump会在输出文件中写入SET @@SESSION.SQL_LOG_BIN = 0;
    ,这意味着在此会话中对数据库所做的任何后续更改都不会记录在binlog中。若还原时服务器架构是主从架构,还需要在从库还原一次,否则主从数据库将不同步。所以导出时建议将这个参数设置为off。
  • --compact:参数更紧凑的输出,可以减少一些注释等信息。建议开启。

使用示例

1.导出所有数据库(全库备份)

mysqldump -uuser -ppassword -hhost -Pport --all-databases --single-transaction --set-gtid-purged=off --compact --skip-lock-tables> backup.sql

2.导出多个数据库

mysqldump -uuser -ppassword -hhost -Pport --databases db1 db2 db3 --single-transaction --set-gtid-purged=off --compact --skip-lock-tables> backup.sql

3.导出单个数据库

#使用--databases选项,输出结果中包含`create database`语句。
mysqldump -uuser -ppassword -hhost -Pport --databases db1 --single-transaction > db.sql
##不使用--database选项,输出结果中不包含`create database`语句。
mysqldump -uuser -ppassword -hhost -Pportdb1 --single-transaction --set-gtid-purged=off --compact --skip-lock-tables> db.sql

4.导出某个库下的某些表

#使用--tables选项。
mysqldump -uuser -ppassword -hhost -Pport --tables db_name tb1 tb2 tb3 --single-transaction > db.sql
#不使用--tables选项。
mysqldump -uuser -ppassword -hhost -Pportdb1 db_name tb1 tb2 tb3 --single-transaction --set-gtid-purged=off --compact --skip-lock-tables> db.sql

5.mysqldump支持将数据直接从一个服务器复制到另一个服务器。

mysqldump --host=orgin_host db_name | mysql --host=remote_host -C db_name

6.mysqldump导出成csv文件

mysqldump -uuser -ppassword -hhost -Pportdb -t -T /tmp/  db_name tb_name --fields-terminated-by=',' > output.csv

导出数据到excel

mysqldump支持将数据导出成sql、csv、xml文件但是不支持导出excel文件。我们可以通过如下命令达到目的:

echo "select * from db_name.table_name"| mysql -uuser -ppassword -hhost -Pportdb>/tmp/output.xls

总结

mysqldump是mysql官方自带的逻辑备份的工具。支持以多个维度对数据库进行备份,如全库备份、单库备份、表备份、按表的过滤条件备份等。
生产环境下使用需要注意--lock-tables是默认开启的,也就是导出期间,会锁定该表,导致导出期间不能对表进行写入,生产环境导出一定要关闭这个参数,方法:指定--skip-lock-tables。另外,建议指定--single-transaction,来创建一致性快照。建议设置--set-gtid-purged=off,防止还原时主从数据不一致。建议设置--compact,减少不必要的输出。

参考文档:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_opt
https://www.cnblogs.com/lijiaman/p/12219603.html

点个“赞 or 在看” 你最好看!

喜欢,就关注我吧!

👇👇👇 谢谢各位老板啦!!!

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论