mysql mysqldump 命令备份数据

mysql mysqldump 命令备份数据

数据备份常用命令
mysqldump -A -uroot -p > xxx.sql                       # 备份所有db。-A 参数等同于 --all-databases
mysqldump --all-databases -uroot -p > xxx.sql          # 备份所有db
mysqldump -t testdb -u root -p > xxx.sql               #只导出数据、不导出结构
mysqldump --opt -d testdb -u root -p > xxx.sql         #只导出表结构、不导出数据
mysqldump testdb -uroot -p > xxx.sql                   #导出结构和数据
mysqldump -d testdb -uroot -p > xxx.sql
mysqldump -databases testdb -uroot -p > xxx.sql
mysqldump testdb --add-drop-table -uroot -p > xxx.sql  #导出时不包含drop table
mysqldump -B testdb --table tb01 -uroot -p > xxx.sql   #导出指定表的结构

数据恢复
# mysql testdb -uroot -p < xxx.sql
> source /home/xxx.sql

mysqldump 语法:
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]

mysqldump 主要参数:
--help 显示命令所有帮助信息
--all-databases, -A  导出全部数据库,但是不会包含 information_schema和performance_schema两个数据库
--all-tablespaces, -Y 导出全部表空间
--no-tablespaces, -y 不导出任何表空间信息
--databases, -B 导出多个数据库。参数后面列出多个数据库名称,空格分隔
--tables 覆盖 --databases (-B) 参数,指定需要导出的表名
--opt 等同于 --add-drop-table,  --add-locks, --create-options, --quick, --extended-insert, --lock-tables,  --set-charset, --disable-keys 该选项默认开启,可以通过 --skip-opt 来禁用
--no-create-db, -n 只导出数据,而不添加CREATE DATABASE 语句
--no-create-info, -t 只导出数据,而不添加CREATE TABLE 语句
--no-data, -d 不导出任何数据,只导出数据库表结构
--user=name, -u 连接数据库用户
--password, -p 连接数据库密码
--port, -P 连接数据库端口号
--add-drop-database 每个数据库创建之前添加drop数据库语句
--skip-add-drop-table 取消每个数据表创建之前的默认添加drop数据表语句行为(默认 --add-drop-table 是开启的)
--skip-add-locks 取消在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE行为(默认 --add-locks 是开启的)
--allow-keywords 允许创建是关键词的列名字
--apply-slave-statements 在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'
--character-sets-dir=/usr/local/mysql/share/mysql/charsets  指定字符集文件的目录
--skip-comments 取消默认的附加注释信息行为
--compatible=xxx 兼容性导出:尽力而为的保障导出的数据将和其它数据库或旧版本的MySQL相兼容。xxx有一定的取值范围(例如:postgresql、oracle、mssql、db2等)
--compact 导出更少的输出信息,去掉注释和头尾等结构
--complete-insert, -c 使用完整的insert语句(含列名)。这样能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败
--compress, -C 在MySQL Client和MySQL Server之间启用压缩传递所有信息,质量不好的网络可以考虑使用压缩传输
--create-options, -a 在CREATE TABLE语句中包括所有MySQL特性选项(不加的话,默认为开启状态)
--debug 输出debug信息(默认位置:/tmp/debug.trace)
--debug-check 检查内存和打开文件使用说明并退出
--debug-info 输出调试信息并退出
--default-character-set 设置默认字符集,如果不设置,默认值为utf8
--delayed-insert 采用延时插入方式(INSERT DELAYED)导出数据。如果用delayed-insert插入时不会锁表(不会加 LOCK TABLES & UNLOCK TABLES)
--delete-master-logs master备份之后执行 purge logs to 语句,删除了备份之后的master上的binary log。一般不推荐随便删除binary log。
--disable-keys 对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态
--skip-extended-insert 取消默认使用具有多个VALUES列的INSERT语法的行为(--extended-insert,  -e)。由于开启多个VALUES列的INSERT语法会使导出文件更小,并加速导入时的速度。因此默认为打开状态,使用该选项可以取消
--fields-terminated-by
--fields-enclosed-by
--fields-optionally-enclosed-by
--fields-escaped-by
--flush-logs 开始导出之前刷新日志
--flush-privileges 在导出MySQL自身的"mysql"数据库之后,触发一次FLUSH  PRIVILEGES语句执行。为了正确恢复,该选项应该用于导出"mysql"数据库和依赖"mysql"数据库数据的任何时候。
--force 在导出过程中忽略出现的SQL错误
--hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有BINARY、VARBINARY、BLOB
--host, -h 指定针对那台主机进行mysqldump导出操作(例如:--host=192.168.1.100)
--ignore-table 不导出指定表(--ignore-table=db1.table01 --ignore-table=db1.table02 )
--lock-all-tables, -x 提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。
--lock-tables, -l 开始导出前锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。如果当导出多个数据库时,--lock-tables 是分别为每个单独的数据库锁定表。
--log-error 输出警告和错误信息到指定文件( --log-error=/tmp/xxx.err )
--master-data 该选项将binlog的位置和文件名追加到输出文件中。如果为1:将会输出CHANGE MASTER 命令;如果为2:输出的CHANGE  MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项
--max_allowed_packet 服务器发送和接受的最大包长度,多VALUS方式时可能一条INSERT语句太长导致超出max_allowed_packet而报错,可以通过该参数设置参数
--net_buffer_length TCP/IP和socket连接的缓存大小,适当调大参数可以提高导入性能
--no-autocommit 使用autocommit/commit 语句包裹表
--no-set-names,  -N 等同于--skip-set-charset
--quick, -q 不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项
--quote-names,-Q 使用(`)引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。
--replace 使用REPLACE INTO 取代INSERT INTO
--result-file,  -r 直接输出到指定文件中。该选项应该用在使用回车换行对(\\r\\n)换行的系统上(例如:DOS,Windows)。该选项确保只有一行被使用
--routines, -R 导出存储过程以及自定义函数
--set-charset 添加'SET NAMES  default_character_set'到输出文件。默认为打开状态,使用--skip-set-charset关闭选项
--skip-opt 禁用–opt选项
--where=name, -w 只针对过滤的数据进行备份,过滤条件必须用引用符号包含起来( eg1:-w = ' id < 1000 '  eg2:-w = " id < 1000 and createtime < unix_timestamp('2021-12-30') " )
--verbose, -v 打印详情
......
支持的参数很多,这里只列出了一部分,其他参数详情,自己查看命令帮助

mysqldump备份优化SQL:
mysqldump --single-transaction --master-data=2 --routines --flush-logs --databases testdb testdb02 testdb03 -uroot -p > all_dbs.sql;
mysqldump --flush-privileges --databases mysql -uroot -p > mysql.sql;

说明:mysqldump 结合相关参数 --single-transaction 、--master-data=2 、--flush-logs 来达到将锁定时间大大减少的目的;并保障一致性备份,以及备份和flush的日志也保持一致。
--master-data 会启用 --lock-all-tables,导致全局锁,不能进行任何修改操作,以保证数据的一致性。如果要备份MySQL自身的"mysql"数据库,还需要加参数 --flush-privileges,导出后会触发一次FLUSH  PRIVILEGES语句执行。
 

上一篇:mysqldump定时任务生成备份文件内容为空的解决方法


下一篇:15-Mysql备份