数据库备份

数据库备份

逻辑备份和物理备份
逻辑备份结果为SQL语句 适合于所有存储引擎 mysqldump
物理备份对数据库目录的拷贝 对于内存表之备份结构

全量备份 对整个数据库的完整备份
增量备份 上次全量或者增量备份基础上 对于更改数据进行备份 XtraBack

使用mysqldump进行备份

常用语法
mysqldump [OPTIONS] database [tables]
mysqldump [OPTIONS] --database [OPTIONS] DB1 [DB2..]
mysqldump [OPTIONS] --all-database [OPTIONS]

mysqldump常用参数
-u,--user=name
-p,--password[=name]
SELECT,RELOAD,LOCK TABLES,REPLICATION CLIENT,SHOW VIEW,PROCESS

--single-transaction //对innodb有效 数据库一致性
-l,--lock-tables //依次锁定 某一个db所有表数据一致性
-x,--lock-all-table //所有数据备份时候只读
--master-data=[1/2]

存在触发器 存储过程 调度事件要加参数
-R,--routines
--triggers
-E,--events

--hex-blob //对数据中blog16进制保存
-tab=path //存储表结构加数据
-w,--where='过滤条件'
Where只支持单表

mysqldump备份实例

  • create user 'backup'@'localhost' identified by '123456';

  • grant select,reload,lock tables,replication client,show view,event,process on . to 'backup'@'localhost'; //给用户权限

  • mysqldump -ubackup -p123456 --master-data=2 --single-transaction --routines --triggers --events szyqbbs > szyqbbsdb.sql

  • grep "CREATE TABLE" szyqbbsdb.sql //查看表

  • 备份单个数据表

  • mysqldump -ubackup -p123456 --master-data=2 --single-transaction --routines --triggers --events szyqbbs bbs_user_info > szyqbbsdb_userinfo.sql

  • 备份所有数据库

  • mysqldump -ubackup -p123456 --master-data=2 --single-transaction --routines --triggers --events --all-databases > alldata.sql

  • 指定目录 tab 会拆分成.sql .txt

  • mysqldump -ubackup -p123456 --master-data=2 --single-transaction --routines --triggers --events --tab="/tmp/szyqbbsdb" szyqbbs > szyqbbsdb.sql

  • chown mysql:mysql szyqbbsdb //改变目录用户为mysql用户 这样mysql用户才能写入数据

  • mysqldump -ubackup -p123456 --master-data=2 --single-transaction --routines --triggers --events --where "cid>100 and cid<200" szyqbbs bbs_card> szyqbbsdb_card_100_200.sql

备份脚本

#!/bin/bash
###############Basic parameters##########################
DAY=`date +%Y%m%d`
Environment=$(/sbin/ifconfig | grep "inet addr" | head -1 |grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}')
USER="backup"
PASSWD="123456"
HostPort="3306"
MYSQLBASE="/home/mysql/"
DATADIR="/home/www/data/db_backup/${DAY}"
MYSQL=`/usr/bin/which mysql`
MYSQLDUMP=`/usr/bin/which mysqldump`
mkdir -p ${DATADIR}

Dump(){
 ${MYSQLDUMP} --master-data=2 --single-transaction  --routines --triggers --events -u${USER} -p${PASSWD} -P${HostPort} ${database}  > ${DATADIR}/${Environment}-${database}.sql
 cd ${DATADIR}
 gzip ${Environment}-${database}.sql
}

for db in `echo "SELECT schema_name FROM information_schema.schemata where schema_name not in ('information_schema','sys','performance_schema','abgent_web_20')" | ${MYSQL} -u${USER} -p${PASSWD} --skip-column-names`
do
   database=${db}
   Dump
done

1.参数意义
DAY 当前备份日期
Environment 主机IP
MYSQLBASE 备份目录
DATADIR 当前备份子目录
for db in //排除一些数据库如information_schema

如何恢复mysqldump备份的数据

  • mysql -u -p dbname < backup.sql
  • mysql> source /tmp/backup.sql
  • mysql -uroot -pweizai -e"create database bak_szyqbbsdb"

用备份数据还原删除的数据

INSERT TO mc_orderdb.order_master (///字段////)
SELECT a.* FROM bak_orderdb.order_master a
LEFT JOIN mc_orderdb.order_master b on a.order_id=b.order_id
WHERE b.order_id IS NULL;
//静态数据可以 动态不可以

恢复误删除数据

基于时间点的步骤
mysqlbin 结合数据库日志 position

基于时间点的恢复
1.具有指定时间点前的mysqldump的全备
2.具有全备到指定时间点的mysql二进制文件

二进制文件备份

使用xtrabackup全备

innobackupex --user=root --password=pwd
--parallel=2 /home/db_backup

原文地址:https://www.cnblogs.com/weizaiyes/p/7865267.html