MySQLDump的備份小技巧
前言:
mysqldump 是日常比較常用的一個工具了,在對數(shù)據(jù)庫進行導出工作時,經(jīng)常會用到 mysqldump 。本篇文章將介紹 mysqldump 工具的使用方法并分享幾點備份技巧。
1.mysqldump使用簡介
mysqldump 是 MySQL 系統(tǒng)自帶的邏輯備份工具,主要用于轉(zhuǎn)儲數(shù)據(jù)庫。它主要產(chǎn)生一系列的 SQL 語句,可以封裝到文件,該文件包含重建數(shù)據(jù)庫所需要的 SQL 命令如 CREATE DATABASE ,CREATE TABLE ,INSERT 等等。當我們需要還原這些數(shù)據(jù)時,只需要執(zhí)行此文件,即可將對應的數(shù)據(jù)還原。
mysqldump 基礎(chǔ)使用語法如下:
- Usage: mysqldump [OPTIONS] database [tables]
- OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
- OR mysqldump [OPTIONS] --all-databases [OPTIONS]
執(zhí)行 mysqldump --help 或參考 MySQL 官方文檔,我們發(fā)現(xiàn) mysqldump 工具可配置的參數(shù)有很多,以下簡要說明部分常用的參數(shù)。
上表展示了一些常見的 mysqldump 相關(guān)選項,當你不了解某個參數(shù)的作用時,可以執(zhí)行 mysqldump --help 來獲取幫助。對于布爾類型的參數(shù),一般還存在一個與之對立的參數(shù),如 --triggers 默認開啟,可以使用 --skip-triggers 來禁用它。
2.幾點備份小技巧
雖然 mysqldump 不太適用于大數(shù)據(jù)量的備份,但因其具有靈活方便、可根據(jù)場景定制參數(shù)等優(yōu)點,還是被廣泛應用在數(shù)據(jù)導出領(lǐng)域。
筆者根據(jù)自己的使用經(jīng)驗,簡單分享幾點 mysqldump 備份小技巧:
- 建議使用 --single-transaction 參數(shù)來獲得一致性備份,減少鎖表。
- 按需求來導出,只要自己想要的數(shù)據(jù),盡量減少導出文件大小。
- 若想用于搭建從庫,建議使用 --master-data = 2 參數(shù)記錄主庫 binlog 信息。
- 若想備份存儲過程、自定義函數(shù)及事件,請加 -R -E 參數(shù),此二者默認不開啟。
- 不了解的參數(shù)不要隨意加,按默認即可。
下面分享幾個不同場景下的 mysqldump 使用方法:
- # 備份全部數(shù)據(jù)庫(包含存儲過程、自定義函數(shù)及事件)
- 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
- # 備份指定數(shù)據(jù)庫
- 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
- # 導出某個表,數(shù)據(jù)以單行insert顯示
- mysqldump -uroot -pxxxxxx --single-transaction --skip-extended-insert db1 tb1 > /tmp/tb1.sql
- # 導出單表的部分數(shù)據(jù)
- 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
- # 只導出結(jié)構(gòu)或只導出數(shù)據(jù)
- mysqldump -uroot -pxxxxxx db1 --no-data > /tmp/db1_jiegou.sql
- mysqldump -uroot -pxxxxxx db1 --no-create-info > /tmp/db1_data.sql
- # 只導出某個庫的存儲過程及自定義函數(shù)
- 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
總結(jié):
本篇文章主要介紹了 mysqldump 工具的使用方法及一些常見場景。mysqldump 作為一個實用工具,希望各位都能上手學習下,比用 Navicat 等圖形化界面導出更快速,且文件體積小。