<--目录-->

1)MySQL常用备份参数介绍

2)备份与恢复

3) 生产环境示例

4)备份还原示例



【MySQL常用备份参数介绍】

-A --databases  #全库备份

-B              #备份建库语句

-C, --compress  #压缩备份

-d              #只备份表结构

-t              #只备份表数据

-F              #刷新binlog参数

-x              #锁表

gzip            #压缩备份

--compact       #去掉注释

--events        #事件

--help          #查看帮助

--single-transaction #只有在开始备份那一刻时已经存在的数据库备份,备份过程中新加入的数据不会备份

--master-data=2(前面“--”号代表加注释,指还原到107的位置,文件名为mysql-bin.000009)

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=107;

--master-data=1(不加注释,用于主从同步,指还原到107的位置,文件名为mysql-bin.000009)

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=107;



【备份与恢复】

1)备份库

   1.备份单库

     mysqldump -uroot -pwsyht -B wsyht > /opt/wsyht.sql #备份wsyht库和建库语句

     egrep -v "#|\*|--|^$" /opt/wsyht.sql   #查看wsyht.sql的库内容

     mysqldump -uroot -pwsyht -B wsyht | gzip > /opt/test.sql.gzip  #压缩备份减少占用空间

     mysqldump -uroot -pwsyht123 -A -B -C --events > 备份文件名.sql  #压缩备份所有库所有表

     mysqldump -uroot -pwsyht123 -A -B -F --events > 备份文件名.sql #-F刷新binlog参数

     mysqldump -uroot -pwsyht123 -B wsyht--master-data=2 > 备份文件名.sql #--master-data   

     mysqldump -uroot -pwsyht -B -C --single-transaction wsyht > /opt/wsyht.sql #热备

     mysqldump -uroot -pwsyht123 -A -B -F --master-data=2 -x --events > a.sql #-x表示锁表

     mysqldump -uroot -pwsyht123 -A -B -C -F --master-data=2 --events --single-transaction > all.sql 

     mysqldump -uroot -pwsyht123 -B d1 | gzip > /opt/d1bak_$(date +%F).sql.gz  #单实例备份 方法

     mysqldump -uroot -pwsyht123 -S /data/3306mysql.sock -B d1 | gzip > /opt/d1bak_$(date+%F).sql.gz 

     mysqldump -upeter -pwsyht123 -B wsyht test | gzip> test.sql.gz #备份wsyht和test库


2)备份表

   mysqldump -uroot -pwsyht123 库名 表名  > 备份的文件名.sql

   mysqldump -uroot -pwsyht123 -d 库名 表名 > 备份文件名.sql  #-d只备份表结构

   mysqldump -uroot -pwsyht123 --skip-lock-tables -d库名 > 备份文件名.sql #-d备份所有库表结构

   mysqldump -uroot -pwsyht123 -t 库名 表名 > 备份文件名.sql #-t只备份数据


3)恢复库

mysql -uroot -pwsyht < /opt/wsyht.sql  #加了-B备份,恢复不用指定数据库

mysql> source /mnt/mysql_bak_B.sql


4)获得数据库前半部分示例:

mysql -uroot -pwsyht123 -e "show databases;" | egrep -vi "cheu|mysql|perfor|infor|database" 

mysql -uroot -pwsyht123 -e "show databases;" | sed '1,3d;6d;7d'



【生产环境示例】

#!/bin/bash

dir=/wsyht/db-backup/

now=$(date +%Y%m%d)

mkdir -p $dir$now

mysqldump -uroot -pwsyht wsyht -B -C --single-transaction > $dir/$now/wsyht.sql

find "$dir" -type d -mtime +7 -exec rm {} \;   


#导库注意

1、关闭binlog

2、后台导入

3、使用多线程导入

   MySQL多线程备份恢复参考博客

   http://blog.uinion.com/?p=471

   http://blog.uinion.com/?p=465



【备份还原示例】

分库备份,脚本备份多个库

单实例(通过列表形式进行备份)

vim dbbak01.sh

#!/bin/bash

myuser=root

mypass=wsyht123

mydump="mysqldump -u$myuser -p$mypass"

[ ! -e /opt/database ] && mkdir /opt/database

for database in d1 d2

do

$mydump -B $database | gzip > /opt/${database}_$(date +%F).sql.gz

done


多实例(通过列表形式进行备份)

vim dbbak01.sh

#!/bin/bash

myuser=root

mypass=wsyht123

socket=/data/3306/mysql.sock

mydump="mysqldump -u$myuser -p$mypass -S $socket"

[ ! -e /opt/database ] && mkdir /opt/database

for database in d1 d2

do

 $mydump -B $database | gzip > /opt/${database}_$(date +%F).sql.gz

done 


单实例(通过数据库取列表进行备份)

vim dbbak02.sh

#!/bin/bash

myuser=root

mypass=wsyht123

mycmd="mysql -u$myuser -p$mypass"

mydump="mysqldump -u$myuser -p$mypass"

[ ! -e /opt/database ] && mkdir /opt/database

for database in `$mycmd -e "show databases;" |  egrep -vi "mysql|perfor|infor|database" `

do

$mydump -B $database | gzip > /opt/${database}_$(date +%F).sql.gz

done


多实例 (通过数据库取列表进行备份)

vim dbbak02.sh

#!/bin/bash

myuser=root

mypass=wsyht123

socket=/data/3306/mysql.sock

mycmd="mysql -u$myuser -p$mypass -S $socket"

mydump="mysqldump -u$myuser -p$mypass -S $socket"

[ ! -e /opt/database ] && mkdir /opt/database

for database in `$mycmd -e "show databases;" |  sed '1,2d'| grep -v "mysql|schema"`

do

 $mydump -B $database | gzip > /opt/${database}_$(date +%F).sql.gz

done 



分库分表备份

单实例

#!/bin/bash

myuser=root

mypass=wsyht123

mycmd="mysql -u$myuser -p$mypass"

mydump="mysqldump -u$myuser -p$mypass"

for database in `$mycmd -e "show databases;" |  egrep -vi "mysql|perfor|infor|database" `

do

[ ! -e /opt/${database} ] && mkdir /opt/${database}

for table in `$mycmd -e "show tables from $database;" | sed '1d'`

do

$mydump $database $table | gzip > /opt/$database/${database}_${table}_$(date +%F).sql.gz

done

done


多实例 

#!/bin/bash

myuser=root

mypass=wsyht123

socket=/data/3306/mysql.sock

mycmd="mysql -u$myuser -p$mypass -S $socket"

mydump="mysqldump -u$myuser -p$mypass -S $socket"

for database in `$mycmd -e "show databases;" |  egrep -vi "mysql|perfor|infor|database" `

do

[ ! -e /opt/${database} ] && mkdir /opt/${database}

for table in `$mycmd -e "show tables from $database;" | sed '1d'`

do

$mydump $database $table | gzip > /opt/$database/${database}_${table}_$(date +%F).sql.gz

done

done