# MYSQLDUMP备份工具
```sql
/* 三种格式 */
mysqldump [OPTIONS] database [tables]
mysqldump [OPTIONS] –B DB1 [DB2 DB3...]
mysqldump [OPTIONS] –A [OPTIONS]
- 官方:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html - 选项
bash
-A, --all-databases #备份所有数据库,含create database
-B, --databases db_name… #指定备份的数据库,包括create database语句
-E, --events:#备份相关的所有event scheduler
-R, --routines:#备份所有存储过程和自定义函数
--triggers:#备份表相关触发器,默认启用,用--skip-triggers,不备份触发器
--default-character-set=utf8 #指定字符集
--master-data[=#]: #此选项须启用二进制日志
1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定#,默认为1
2:记录为注释的CHANGE MASTER TO语句
此选项会自动关闭--lock-tables功能,自动打开-x | --lock-all-tables功能(除非开启--
single-transaction)
-F, --flush-logs #备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文
件,配合-A 或 -B 选项时,会导致刷新多次数据库。建议在同一时刻执行转储和日志刷新,可通过和--
single-transaction或-x,--master-data 一起使用实现,此时只刷新一次二进制日志
--compact #去掉注释,适合调试,生产不使用
-d, --no-data #只备份表结构
-t, --no-create-info #只备份数据,不备份create table
-n,--no-create-db #不备份create database,可被-A或-B覆盖
--flush-privileges #备份mysql或相关时需要使用
-f, --force #忽略SQL错误,继续执行
范例:分库备份并压缩
范例:利用二进制日志,还原数据库最新状态
--hex-blob #使用十六进制符号转储二进制列,当有包括BINARY, VARBINARY,BLOB,BIT的数
据类型的列时使用,避免乱码
-q, --quick #不缓存查询,直接输出,加快备份速度
```
完全备份+还原
- 默认开启二进制日志,最好不在一台主机上
###服务端配置文件 [mysqld] log-bin=/data/log datadir=/data/mysql socket=/data/mysql/mysql.sock ... ###客户端配置文件 vim /etc/my.cnf.d/mysql-clients.cnf [mysql] socket=/data/mysql/mysql.sock [mysqldump] socket=/data/mysql/mysql.sock ...
- 创建完全备份
### 在data/backup下创建备份文件并压缩 mysqldump -A --master-data=2 | gzip > /data/backups/bakup_`date +%F%T`.sql.gz ls bakup_2019-11-2810:34:19.sql.gz
- 数据库发生操作
use ali /* 使用库 */ insert ali_ymp(stu_name) values('Justin'); /* 添加一个员工Justin */
- 出现事故:某云来把库删了
/* 删除整个库 */ drop database ali
- 先恢复到完全备份状态
# 解压备份文件 cd /data/backups gzip -d bakup_2019-11-2810:34:19.sql.gz bakup_2019-11-2810:34:19.sql ls bakup_2019-11-2810:34:19.sql # 找到完全备份位置 grep '\-\- CHANGE MASTER TO' /data/backups/bakup_2019-11-2810:34:19.sql MASTER_LOG_FILE='localhost-bin.000004', MASTER_LOG_POS=508; #备份从完全备份后的二进制日志 mysqlbinlog --start-position=508 /data/log/localhost-bin.000004 > /log/backs.sql vim backs.sql # 找到删除语句并删除 drop database stund
- 进入数据库还原备份
/*关闭二进制日志的选项*/ set sql_log_bin=0; /*回到完全备份状态*/ source /data/backups/bakup_2019-11-2810:34:19.sql; /*回到删库之前*/ source /data/log/backs.sql; /*重新开启二进制日志的选项*/ set sql_log_bin=0;