5.2 MySQL备份工具
物理备份:
冷备份:cp tar
逻辑备份:
mysqldump
mysqldump:是MySQL的客户端命令,通过mysql协议连接至mysql服务器进行备份 -A, --all-databases #备份所有数据库,含create database -B, --databases db_name… #指定备份的数据库,包括create database语句 -E, --events:#备份相关的所有event scheduler -R, --routines:#备份所有存储过程和自定义函数 --triggers:#备份表相关触发器,默认启用,用--skip-triggers,不备份触发器 --default-character-set=utf8 #指定字符集 -d, --no-data #只备份表结构,不备份数据 -t, --no-create-info #只备份数据,不备份表结构,即create table -n,--no-create-db #不备份create database,可被-A或-B覆盖 -f, --force #忽略SQL错误,继续执行
--master-data=[#] #1:所备份的数据之前添加一条记录为change master to语句,非注释,不指定默认为1 ,适合主从复制多机使用 #2:记录为被注释的#change master to语句,适合于单机使用 -F --flush-logs #备份前滚动日志,锁表完成后,执行flush logs命令,生成新的二进制日志文件,建议配合--master-data使用
-x
--single-transaction 使用可重复读的事务隔离级别
--hex-blob 使用十六进制符号转储二进制列,当有包含binary,varbinary blob bit的数据类型的列时使用,避免乱码
语法:
mysqldump [OPTIONS] database [tables] #支持指定数据库和指定多表的备份,但数据库本身定义不备份 mysqldump [OPTIONS] –B DB1 [DB2 DB3...] #支持指定数据库备份,包含数据库本身定义也会备份 mysqldump [OPTIONS] –A [OPTIONS] #备份所有数据库,包含数据库本身定义也会备份
实战:
InnoDB建议备份策略 mysqldump –uroot -p –A –F –E –R --triggers --single-transaction --master-data=1 --flush-privileges --default-character-set=utf8 --hex-blob >${BACKUP}/fullbak_${BACKUP_TIME}.sql MyISAM建议备份策略 mysqldump –uroot -p –A –F –E –R –x --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob >${BACKUP}/fullbak_${BACKUP_TIME}.sql
分库备份脚本:
#!/bin/bash TIME=`date +%F_%H-%M-%S` DIR=/backup [ -d "$DIR" ] || mkdir $DIR for DB in `mysql -e "show databases" |grep -Ev "^Database|.*schema$"`;do mysqldump -F --single-transaction --master-data=2 --default-character-set=utf8 -q -B $DB | gzip > ${DIR}/${DB}_${TIME}.sql.gz done
利用二进制日志还原数据库最新状态
1.开启二进制日志,并独立存放(备份) 2.完全备份并记录二进制位置 3.修改数据库 4.损坏数据 5.还原