文章目录
- mysqldump --help
- 备份mysql的N种姿势
mysqldump --help
mysqldump 是一个常用的命令行工具,用于备份和还原 MySQL 数据库。
[root@VM-24-3-centos blg]# mysqldump --help
mysqldump Ver 10.13 Distrib 5.6.50, for Linux (x86_64)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Dumping structure and contents of MySQL databases and tables.
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
The following groups are read: mysqldump client
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit.
--no-defaults Don't read default options from any option file,except for login file.
--defaults-file=# Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.
--defaults-group-suffix=#Also read groups with concat(group, suffix)
--login-path=# Read this path from the login file.-A, --all-databases Dump all the databases. This will be same as --databaseswith all databases selected.-Y, --all-tablespacesDump all the tablespaces.-y, --no-tablespacesDo not dump any tablespace information.--add-drop-database Add a DROP DATABASE before each create.--add-drop-table Add a DROP TABLE before each create.(Defaults to on; use --skip-add-drop-table to disable.)--add-drop-trigger Add a DROP TRIGGER before each create.--add-locks Add locks around INSERT statements.(Defaults to on; use --skip-add-locks to disable.)--allow-keywords Allow creation of column names that are keywords.--apply-slave-statementsAdds 'STOP SLAVE' prior to 'CHANGE MASTER' and 'STARTSLAVE' to bottom of dump.--bind-address=name IP address to bind to.--character-sets-dir=nameDirectory for character set files.-i, --comments Write additional information.(Defaults to on; use --skip-comments to disable.)--compatible=name Change the dump to be compatible with a given mode. Bydefault tables are dumped in a format optimized forMySQL. Legal modes are: ansi, mysql323, mysql40,postgresql, oracle, mssql, db2, maxdb, no_key_options,no_table_options, no_field_options. One can use severalmodes separated by commas. Note: Requires MySQL serverversion 4.1.0 or higher. This option is ignored withearlier server versions.--compact Give less verbose output (useful for debugging). Disablesstructure comments and header/footer constructs. Enablesoptions --skip-add-drop-table --skip-add-locks--skip-comments --skip-disable-keys --skip-set-charset.-c, --complete-insertUse complete insert statements.-C, --compress Use compression in server/client protocol.-a, --create-optionsInclude all MySQL specific create options.(Defaults to on; use --skip-create-options to disable.)-B, --databases Dump several databases. Note the difference in usage; inthis case no tables are given. All name arguments areregarded as database names. 'USE db_name;' will beincluded in the output.-#, --debug[=#] This is a non-debug version. Catch this and exit.--debug-check Check memory and open file usage at exit.--debug-info Print some debug info at exit.--default-character-set=nameSet the default character set.--delayed-insert Insert rows with INSERT DELAYED.--delete-master-logsDelete logs on master after backup. This automaticallyenables --master-data.-K, --disable-keys '/*!40000 ALTER TABLE tb_name DISABLE KEYS */; and'/*!40000 ALTER TABLE tb_name ENABLE KEYS */; will be putin the output.(Defaults to on; use --skip-disable-keys to disable.)--dump-slave[=#] This causes the binary log position and filename of themaster to be appended to the dumped data output. Settingthe value to 1, will printit as a CHANGE MASTER commandin the dumped data output; if equal to 2, that commandwill be prefixed with a comment symbol. This option willturn --lock-all-tables on, unless --single-transaction isspecified too (in which case a global read lock is onlytaken a short time at the beginning of the dump - don'tforget to read about --single-transaction below). In allcases any action on logs will happen at the exact momentof the dump.Option automatically turns --lock-tables off.-E, --events Dump events.-e, --extended-insertUse multiple-row INSERT syntax that include severalVALUES lists.(Defaults to on; use --skip-extended-insert to disable.)--fields-terminated-by=nameFields in the output file are terminated by the givenstring.--fields-enclosed-by=nameFields in the output file are enclosed by the givencharacter.--fields-optionally-enclosed-by=nameFields in the output file are optionally enclosed by thegiven character.--fields-escaped-by=nameFields in the output file are escaped by the givencharacter.-F, --flush-logs Flush logs file in server before starting dump. Note thatif you dump many databases at once (using the option--databases= or --all-databases), the logs will beflushed for each database dumped. The exception is whenusing --lock-all-tables or --master-data: in this casethe logs will be flushed only once, corresponding to themoment all tables are locked. So if you want your dumpand the log flush to happen at the same exact moment youshould use --lock-all-tables or --master-data with--flush-logs.--flush-privileges Emit a FLUSH PRIVILEGES statement after dumping the mysqldatabase. This option should be used any time the dumpcontains the mysql database and any other database thatdepends on the data in the mysql database for properrestore.-f, --force Continue even if we get an SQL error.-?, --help Display this help message and exit.--hex-blob Dump binary strings (BINARY, VARBINARY, BLOB) inhexadecimal format.-h, --host=name Connect to host.--ignore-table=name Do not dump the specified table. To specify more than onetable to ignore, use the directive multiple times, oncefor each table. Each table must be specified with bothdatabase and table names, e.g.,--ignore-table=database.table.--include-master-host-portAdds 'MASTER_HOST=<host>, MASTER_PORT=<port>' to 'CHANGEMASTER TO..' in dump produced with --dump-slave.--insert-ignore Insert rows with INSERT IGNORE.--lines-terminated-by=nameLines in the output file are terminated by the givenstring.-x, --lock-all-tablesLocks all tables across all databases. This is achievedby taking a global read lock for the duration of thewhole dump. Automatically turns --single-transaction and--lock-tables off.-l, --lock-tables Lock all tables for read.(Defaults to on; use --skip-lock-tables to disable.)--log-error=name Append warnings and errors to given file.--master-data[=#] This causes the binary log position and filename to beappended to the output. If equal to 1, will print it as aCHANGE MASTER command; if equal to 2, that command willbe prefixed with a comment symbol. This option will turn--lock-all-tables on, unless --single-transaction isspecified too (in which case a global read lock is onlytaken a short time at the beginning of the dump; don'tforget to read about --single-transaction below). In allcases, any action on logs will happen at the exact momentof the dump. Option automatically turns --lock-tablesoff.--max-allowed-packet=#The maximum packet length to send to or receive fromserver.--net-buffer-length=#The buffer size for TCP/IP and socket communication.--no-autocommit Wrap tables with autocommit/commit statements.-n, --no-create-db Suppress the CREATE DATABASE ... IF EXISTS statement thatnormally is output for each dumped database if--all-databases or --databases is given.-t, --no-create-infoDon't write table creation info.-d, --no-data No row information.-N, --no-set-names Same as --skip-set-charset.--opt Same as --add-drop-table, --add-locks, --create-options,--quick, --extended-insert, --lock-tables, --set-charset,and --disable-keys. Enabled by default, disable with--skip-opt.--order-by-primary Sorts each table's rows by primary key, or first uniquekey, if such a key exists. Useful when dumping a MyISAMtable to be loaded into an InnoDB table, but will makethe dump itself take considerably longer.-p, --password[=name]Password to use when connecting to server. If password isnot given it's solicited on the tty.-P, --port=# Port number to use for connection.--protocol=name The protocol to use for connection (tcp, socket, pipe,memory).-q, --quick Don't buffer query, dump directly to stdout.(Defaults to on; use --skip-quick to disable.)-Q, --quote-names Quote table and column names with backticks (`).(Defaults to on; use --skip-quote-names to disable.)--replace Use REPLACE INTO instead of INSERT INTO.-r, --result-file=nameDirect output to a given file. This option should be usedin systems (e.g., DOS, Windows) that use carriage-returnlinefeed pairs (\r\n) to separate text lines. This optionensures that only a single newline is used.-R, --routines Dump stored routines (functions and procedures).--set-charset Add 'SET NAMES default_character_set' to the output.(Defaults to on; use --skip-set-charset to disable.)--set-gtid-purged[=name]Add 'SET @@GLOBAL.GTID_PURGED' to the output. Possiblevalues for this option are ON, OFF and AUTO. If ON isused and GTIDs are not enabled on the server, an error isgenerated. If OFF is used, this option does nothing. IfAUTO is used and GTIDs are enabled on the server, 'SET@@GLOBAL.GTID_PURGED' is added to the output. If GTIDsare disabled, AUTO does nothing. If no value is suppliedthen the default (AUTO) value will be considered.--single-transactionCreates a consistent snapshot by dumping all tables in asingle transaction. Works ONLY for tables stored instorage engines which support multiversioning (currentlyonly InnoDB does); the dump is NOT guaranteed to beconsistent for other storage engines. While a--single-transaction dump is in process, to ensure avalid dump file (correct table contents and binary logposition), no other connection should use the followingstatements: ALTER TABLE, DROP TABLE, RENAME TABLE,TRUNCATE TABLE, as consistent snapshot is not isolatedfrom them. Option automatically turns off --lock-tables.--dump-date Put a dump date to the end of the output.(Defaults to on; use --skip-dump-date to disable.)--skip-opt Disable --opt. Disables --add-drop-table, --add-locks,--create-options, --quick, --extended-insert,--lock-tables, --set-charset, and --disable-keys.-S, --socket=name The socket file to use for connection.--secure-auth Refuse client connecting to server if it uses old(pre-4.1.1) protocol.(Defaults to on; use --skip-secure-auth to disable.)--ssl Enable SSL for connection (automatically enabled withother flags).--ssl-ca=name CA file in PEM format (check OpenSSL docs, implies--ssl).--ssl-capath=name CA directory (check OpenSSL docs, implies --ssl).--ssl-cert=name X509 cert in PEM format (implies --ssl).--ssl-cipher=name SSL cipher to use (implies --ssl).--ssl-key=name X509 key in PEM format (implies --ssl).--ssl-crl=name Certificate revocation list (implies --ssl).--ssl-crlpath=name Certificate revocation list path (implies --ssl).--ssl-verify-server-certVerify server's "Common Name" in its cert againsthostname used when connecting. This option is disabled bydefault.--ssl-mode=name SSL connection mode.-T, --tab=name Create tab-separated textfile for each table to givenpath. (Create .sql and .txt files.) NOTE: This only worksif mysqldump is run on the same machine as the mysqldserver.--tables Overrides option --databases (-B).--triggers Dump triggers for each dumped table.(Defaults to on; use --skip-triggers to disable.)--tz-utc SET TIME_ZONE='+00:00' at top of dump to allow dumping ofTIMESTAMP data when a server has data in different timezones or data is being moved between servers withdifferent time zones.(Defaults to on; use --skip-tz-utc to disable.)-u, --user=name User for login if not current user.-v, --verbose Print info about the various stages.-V, --version Output version information and exit.-w, --where=name Dump only selected records. Quotes are mandatory.-X, --xml Dump a database as well formed XML.--plugin-dir=name Directory for client-side plugins.--default-auth=name Default authentication client-side plugin to use.--enable-cleartext-pluginEnable/disable the clear text authentication plugin.Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- ----------------------------------------
all-databases FALSE
all-tablespaces FALSE
no-tablespaces FALSE
add-drop-database FALSE
add-drop-table TRUE
add-drop-trigger FALSE
add-locks TRUE
allow-keywords FALSE
apply-slave-statements FALSE
bind-address (No default value)
character-sets-dir (No default value)
comments TRUE
compatible (No default value)
compact FALSE
complete-insert FALSE
compress FALSE
create-options TRUE
databases FALSE
debug-check FALSE
debug-info FALSE
default-character-set utf8
delayed-insert FALSE
delete-master-logs FALSE
disable-keys TRUE
dump-slave 0
events FALSE
extended-insert TRUE
fields-terminated-by (No default value)
fields-enclosed-by (No default value)
fields-optionally-enclosed-by (No default value)
fields-escaped-by (No default value)
flush-logs FALSE
flush-privileges FALSE
force FALSE
hex-blob FALSE
host (No default value)
include-master-host-port FALSE
insert-ignore FALSE
lines-terminated-by (No default value)
lock-all-tables FALSE
lock-tables TRUE
log-error (No default value)
master-data 0
max-allowed-packet 524288000
net-buffer-length 1046528
no-autocommit FALSE
no-create-db FALSE
no-create-info FALSE
no-data FALSE
order-by-primary FALSE
port 3306
quick TRUE
quote-names TRUE
replace FALSE
routines FALSE
set-charset TRUE
single-transaction FALSE
dump-date TRUE
socket /tmp/mysql.sock
secure-auth TRUE
ssl FALSE
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cert (No default value)
ssl-cipher (No default value)
ssl-key (No default value)
ssl-crl (No default value)
ssl-crlpath (No default value)
ssl-verify-server-cert FALSE
tab (No default value)
triggers TRUE
tz-utc TRUE
user (No default value)
verbose FALSE
where (No default value)
plugin-dir (No default value)
default-auth (No default value)
enable-cleartext-plugin FALSE
[root@VM-24-3-centos blg]#
备份mysql的N种姿势
#!/bin/bash# 定义备份文件目录和保留天数
backup_dir="/path/to/backup"
retention_days=7# 定义数据库连接信息
db_user="xxx"
db_password="xxxx"
db_host="xxxxx"
db_port="xxxx"# 定义完全备份函数
function perform_full_backup() {# 定义备份文件名backup_file="$backup_dir/full_backup_$(date +%Y%m%d_%H%M%S).sql"# 执行完全备份mysqldump -u$db_user -p$db_password -h$db_host -P$db_port --all-databases > $backup_file
}# 定义增量备份函数
function perform_incremental_backup() {# 定义备份文件名incremental_dir="$backup_dir/incremental"# 检查目录是否存在initBackPath $incremental_dirbackup_file="$incremental_dir/incremental_backup_$(date +%Y%m%d_%H%M%S).sql"# 执行增量备份mysqldump -u$db_user -p$db_password -h$db_host -P$db_port --all-databases --no-create-info --skip-triggers --skip-add-drop-table > $backup_file
}# 定义事务日志备份函数
function perform_binlog_backup() {# 定义备份文件名binlog_file="$backup_dir/binlog_$(date +%Y%m%d_%H%M%S).binlog"# 开启二进制日志mysql -u$db_user -p$db_password -h$db_host -P$db_port -e "SET GLOBAL log_bin = ON;"# 备份二进制日志mysqlbinlog --no-defaults --base64-output=decode-rows --result-file=$binlog_file --raw --stop-datetime="`date +%Y-%m-%d\ %H:%M:%S`" --start-datetime="`date -d '1 day ago' +%Y-%m-%d\ %H:%M:%S`"
}# 定义备份完整性检查函数
function check_backup_integrity() {# 定义备份文件名backup_file="$backup_dir/full_backup_xxxxx.sql"# 还原备份文件到测试数据库mysql -u$db_user -p$db_password -h$db_host -P$db_port < $backup_file# 检查数据库完整性mysqlcheck -u$db_user -p$db_password -h$db_host -P$db_port --check --databases db1 db2
}# 定义备份恢复测试函数
function perform_backup_restore_test() {# 定义备份文件名backup_file="$backup_dir/full_backup_xxxxx.sql"# 还原备份文件到测试数据库mysql -u$db_user -p$db_password -h$db_host -P$db_port < $backup_file# 检查数据库是否能正常运行mysql -u$db_user -p$db_password -h$db_host -P$db_port -e "SHOW DATABASES;"
}# 定义过期备份清理函数
function perform_backup_cleanup() {# 清理过期完全备份文件find $backup_dir -type f -name "full_backup_*.sql" -mtime +$retention_days -exec rm {} \;# 清理过期增量备份文件find $backup_dir/incremental -type f -name "incremental_backup_*.sql" -mtime +$retention_days -exec rm {} \;# 清理过期事务日志备份文件find $backup_dir -type f -name "binlog_*.binlog" -mtime +$retention_days -exec rm {} \;
}# 初始化目录
function initBackPath() {dir=$1if [ ! -d "$dir" ]; then mkdir -p $dirfi }# 检查备份目录
initBackPath $backup_dir# 执行完全备份
perform_full_backup# 执行增量备份
perform_incremental_backup# 执行事务日志备份
# perform_binlog_backup# 执行备份完整性检查
# check_backup_integrity# 执行备份恢复测试
# perform_backup_restore_test# 执行过期备份清理
perform_backup_cleanup