今天特分享一款实用的脚本,数据库备份和恢复,对新手运维适用。互联网上什么最重要?无疑是数据。不管是程序员仍是运维都不但愿误操做数据丢失,或一些意想不到因素致使数据损坏或丢失。因此数据备份和恢复相当重要,也是运维的首要任务,也是标配。咱们都不但愿删库跑路。mysql
1、mysql备份:
1.备份脚本以下:程序员
#!/bin/bash #备份存放的路径 backup_dir="/backup/mysql/full" #备份用户 mysql_user="root" #备份密码 mysql_passwd="password" #备份记录日志 log="./mysql_backup.log" [ -d $backup_dir ] || mkdir -p $backup_dir function backup_mysql_full(){ #1.全量备份,在full目录生成一个以日期命名的备份文件夹 echo "Start to backup at `date +"%Y-%m-%d %H:%M:%S"`">>$log innobackupex --user=$mysql_user --password=$mysql_passwd $backup_dir if [ $? -eq 0 ];then echo "Backup success at "`date +"%Y-%m-%d %H:%M:%S"`>>$log #删除1天前的备份 find $backup_dir -type d -mtime +7|xargs rm -rf >>$log else echo "Backup fail at "`date +"%Y-%m-%d %H:%M:%S"`>>$log fi } backup_mysql_full
2.添加定时备份,天天凌晨2点开始自动备份,运行crontab -e
00 02 * bash /opt/xtrabackup_scripts/backup_mysql_full.shsql
说明:前提需安装xtrabackup备份工具,一款物理备份,速度相比mysqldump的逻辑备份快不少。数据库
脚本的特色:
1.属于物理热备,速度快,不影响业务。
2.定时自动备份
3.自动保留7天的备份,并删除旧备份,防止磁盘占满
4.备份日志记录,备份失败或没有备份方便查找缘由
5.全库备份
2、mysql数据库的恢复bash
#!/bin/bash # 使用方法 先删除数据rm -rf /data/mysqldata/, 而后 sh recover_mysql_full.sh 2018-08-08_16-33-07 #恢复的目标库的用户名 mysql_user="root" #恢复的目标库的密码 mysql_passwd="password" #备份文件存放的目录 mysql_recover_dir="/backup/mysql/full" #恢复的目标库数据库文件路径 mysql_dir="/data/mysqldata/" #目标库的数据配置文件 my_cnf="/etc/my.cnf" #日志记录 log="./mysql_recover.log" #自动建立恢复目录 [ -d $mysql_recover_dir ] || mkdir -p $mysql_recover_dir #备份数据数据中可能包含未提交的事务或已经提交但未同步至数据文件中的事务,此时数据还处于不一致状态。所以须要经过回滚未提交的事务及已经提交的事务至数据文件,使得数据文件 处于一致性状态 innobackupex --defaults-file=$my_cnf --user=$mysql_user --password=$mysql_passwd --apply-log $mysql_recover_dir/$1 #开始真正的恢复数据 service mysqld stop rm -rf $mysql_dir/* >>$log innobackupex --defaults-file=$my_cnf --user=$mysql_user --password=$mysql_passwd --copy-back $mysql_recover_dir/$1>>$log chown mysql.mysql -R $mysql_dir >>$log service mysqld start [ $? -ne 0 ] && service mysqld start
脚本说明:
此恢复脚本能够和备份脚本组合在一块儿,加个定时任务,就能够作天天定时同步生产数据自动同步到测试环境。对于数据量几十上百G不大的状况也挺实用,固然若是数据量很大,200G以上
则可考虑阿里的otter数据的消费和订阅,后面会讲到此方案的用法。app
3、恢复到一台新的数据库
不少时候咱们数据出了问题,并不想直接还原到原先的库,毕竟数据缺乏一天的。还原直接损失一天的数据,所以咱们想还原到别的地方作对比看看。
准备好新搭建的一台数据库运维
1.恢复数据前的准备(合并xtabackup_log_file和备份的物理文件),应用备份文件
innobackupex —apply-log /backup/mysql/full/2019-01-02_02-00-02
删除原先数据库里的数据
service mysqld stop
cd /var/lib/mysql/
rm -rf *
3.恢复
innobackupex —copy-back /backup/mysql/full/2019-01-02_02-00-02
chown -R mysql.mysql /var/lib/mysql/
service mysqld restart
最后查看新数据库已有原来的数据。ide
更多精彩,关注公众号工具