MYSQLDUMP备份

MYSQLDUMP备份工具

/* 三种格式 */
mysqldump [OPTIONS] database [tables]
mysqldump [OPTIONS] –B DB1 [DB2 DB3...]
mysqldump [OPTIONS] –A [OPTIONS]

-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;

原文地址:https://www.cnblogs.com/Justin0717/p/11953040.html