<--目录-->
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