注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

测试:mysqldump备份的无数据丢失恢复  

2015-12-04 16:16:49|  分类: MySQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
测试:mysqldump备份的无数据丢失恢复
当前库有以下库和用户:
执行如下分库备份的脚本:
#!/bin/bash
#初始化环境变量
source /home/mysql/.bash_profile
MYUSER=system
MYPASS=123456
SOCKET=/data/mysqldata/3305/mysql.sock
MYCMD="mysql -u$MYUSER -p$MYPASS -S $SOCKET"

#备份mysq库
MYDUMP="mysqldump -u$MYUSER -p$MYPASS -S $SOCKET --default-character-set=utf8 -R -E --triggers  -x  --master-data=2  --hex-blob -B"
$MYDUMP   mysql | gzip > /data/mysqldata/backup/mysql_$(date +%F).sql.gz

#备份innodb库
MYDUMP="mysqldump -u$MYUSER -p$MYPASS -S $SOCKET --default-character-set=utf8 -R -E --triggers  --single-transaction --master-data=2 --hex-blob -B"
for database in `$MYCMD -e "show databases;" | grep -Evi "database|mysql|information|performance"`
do
    $MYDUMP -d $database | gzip > /data/mysqldata/backup/${database}_struct_$(date +%F).sql.gz  #只备份表结构,不花多少时间按,下面有可能会用到。
    $MYDUMP     $database | gzip > /data/mysqldata/backup/${database}_$(date +%F).sql.gz             #分库备份
done

mysqldump参数意义:
-B, --databases  导出指定的某个或某几个数据库  通过该参数导出库时,输出的内容中是包含建库语句的,这就是附加该参数和直接指定库名的区别。
-R, --routines  导出存储过程、函数、等定义好的mysql程序。
 -E, --events        Dump events.
--triggers            导出触发器
-x, --lock-all-tables
-F, --flush-logs   每次执行mysqldump时刷新日志,方便增量恢复时从一个新的binlog开头读取日志,否则很可能从某个binlog的中间位置点读取日志。
--single-transaction  在innodb表导出时会建立一致性快照,导出的数据一致,又不阻塞其他会话,指定后其他连接不能执行alter table /drop table/ rename table/truncate table 等DDL操作。
--master-data=2 在备份出来的文件开头写入开始恢复的binlog号及位置,如果做从库也方便知道从主库的哪个binlog号及位置开始获取日志。

 
关库并准备恢复:
$ cd /data/mysqldata
$ mv 3305 3305bak
$ mkdir 3305/{tmp,binlog,data} -p 

初始化:
$ /usr/local/mysql/scripts/mysql_install_db  --basedir=/usr/local/mysql  --datadir=/data/mysqldata/3305/data
从他处拷来my.cnf并修改

启库:mysqld_safe --defaults-file=/data/mysqldata/3305/my.cnf &

查看备份并解压:
$ cd /data/mysqldata/backup
$ ll -thr
drwxrwxr-x 3 mysql mysql 4.0K 11-27 21:31 xtrabackup
-rw-rw-r-- 1 mysql mysql 3.8K 11-27 22:01 testdb_struct_2015-11-27.sql.gz
-rw-rw-r-- 1 mysql mysql 187K 11-27 22:01 mysql_2015-11-27.sql.gz
-rw-rw-r-- 1 mysql mysql 1.8K 11-27 22:01 tpcc_struct_2015-11-27.sql.gz
-rw-rw-r-- 1 mysql mysql 2.3M 11-27 22:01 testdb_2015-11-27.sql.gz
-rw-rw-r-- 1 mysql mysql 442M 11-27 22:02 tpcc_2015-11-27.sql.gz
$ gunzip *.sql.gz               

库恢复:
$ mysql -uroot -S /data/mysqldata/3305/mysql.sock mysql < mysql_2015-11-27.sql
$ mysql -uroot -S /data/mysqldata/3305/mysql.sock  < tpcc_2015-11-27.sql     
$ mysql -uroot -S /data/mysqldata/3305/mysql.sock  < testdb_2015-11-27.sql 
$ mysql -uroot -S /data/mysqldata/3305/mysql.sock


追加后续binlog:
从mysqldump出来的文件前部找到binlog号和位置。
$ mysqlbinlog mysql-bin.000095  --start-position=120 > binlog.sql    
$ mysqlbinlog mysql-bin.000096  mysql-bin.000097 mysql-bin.000098 >> binlog.sql              
$ mysql -uroot -S /data/mysqldata/3305/mysql.sock  < binlog.sql

最后库重启(上面也看到了,虽然原来的库用户恢复了,但上面的恢复操作还是用的root@local用户,重启后就一切正常了)
  评论这张
 
阅读(90)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017