2

mysqldump备份技巧分享

 2 years ago
source link: https://segmentfault.com/a/1190000040367606
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

mysqldump备份技巧分享

前言:

mysqldump 是日常比较常用的一个工具了,在对数据库进行导出工作时,经常会用到 mysqldump 。本篇文章将介绍 mysqldump 工具的使用方法并分享几点备份技巧。

1.mysqldump使用简介

mysqldump 是 MySQL 系统自带的逻辑备份工具,主要用于转储数据库。它主要产生一系列的 SQL 语句,可以封装到文件,该文件包含重建数据库所需要的 SQL 命令如 CREATE DATABASE ,CREATE TABLE ,INSERT 等等。当我们需要还原这些数据时,只需要执行此文件,即可将对应的数据还原。

mysqldump 基础使用语法如下:

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

执行 mysqldump --help 或参考 MySQL 官方文档,我们发现 mysqldump 工具可配置的参数有很多,以下简要说明部分常用的参数。

上表展示了一些常见的 mysqldump 相关选项,当你不了解某个参数的作用时,可以执行 mysqldump --help 来获取帮助。对于布尔类型的参数,一般还存在一个与之对立的参数,如 --triggers 默认开启,可以使用 --skip-triggers 来禁用它。

2.几点备份小技巧

虽然 mysqldump 不太适用于大数据量的备份,但因其具有灵活方便、可根据场景定制参数等优点,还是被广泛应用在数据导出领域。

笔者根据自己的使用经验,简单分享几点 mysqldump 备份小技巧:

  • 建议使用 --single-transaction 参数来获得一致性备份,减少锁表。
  • 按需求来导出,只要自己想要的数据,尽量减少导出文件大小。
  • 若想用于搭建从库,建议使用 --master-data = 2 参数记录主库 binlog 信息。
  • 若想备份存储过程、自定义函数及事件,请加 -R -E 参数,此二者默认不开启。
  • 不了解的参数不要随意加,按默认即可。

下面分享几个不同场景下的 mysqldump 使用方法:

# 备份全部数据库(包含存储过程、自定义函数及事件)
mysqldump -uroot -pxxxxxx --single-transaction -R -E --all-databases > /tmp/all_database.sql

# 要求记录 binlog 位点信息 可用于搭建从库
mysqldump -uroot -pxxxxxx --single-transaction -R -E --all-databases --master-data=2 > /tmp/all_database.sql

# 备份指定数据库
mysqldump -uroot -pxxxxxx --single-transaction -R -E --databases db1 > /tmp/db1.sql
mysqldump -uroot -pxxxxxx --single-transaction -R -E --databases db1 db2 > /tmp/db1_db2.sql

# 备份部分表
mysqldump -uroot -pxxxxxx --single-transaction db1 tb1 > /tmp/tb1.sql
mysqldump -uroot -pxxxxxx --single-transaction db1 tb1 tb2 tb3 > /tmp/tb.sql

# 导出某个表,数据以单行insert显示
mysqldump -uroot -pxxxxxx --single-transaction --skip-extended-insert db1 tb1 > /tmp/tb1.sql

# 导出单表的部分数据
mysqldump -uroot -pxxxxxx --single-transaction db1 tb1 --where=" create_time >= '2021-06-01 00:00:00' " > /tmp/tb1.sql
mysqldump -uroot -pxxxxxx --single-transaction db1 tb1 --where='id < 10' > /tmp/tb1.sql

# 排除某些表导出
mysqldump -uroot -pxxxxxx --single-transaction --databases db1 --ignore-table=db1.tb1 --ignore-table=db1.tb2 > /tmp/db1.sql

# 只导出结构或只导出数据
mysqldump -uroot -pxxxxxx db1 --no-data > /tmp/db1_jiegou.sql
mysqldump -uroot -pxxxxxx db1 --no-create-info > /tmp/db1_data.sql

# 只导出某个库的存储过程及自定义函数
mysqldump -uroot -pxxxxxx -d -t -R db1 > /tmp/db1_routine.sql

# 远程导出 即MySQL服务端不在本地
mysqldump -uroot -pxxxxxx -hxxx.xxx.xx -P3306 --single-transaction --databases db1 > /tmp/db1.sql

总结:

本篇文章主要介绍了 mysqldump 工具的使用方法及一些常见场景。mysqldump 作为一个实用工具,希望各位都能上手学习下,比用 Navicat 等图形化界面导出更快速,且文件体积小。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK