MySQL 备份和恢复策略(二)
备份策略三、使用mysqldump备份数据库
mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump 比直接拷贝要慢些。关于mysqldump的更详细解释见最后的附录。
对于中等级别业务量的系统来说,备份策略可以这么定:第一次完全备份,每天一次增量备份,每周再做一次完全备份,如此一直重复。而对于重要的且繁忙的系统来说,则可能需要每天一次全量备份,每小时一次增量备份,甚至更频繁。为了不影响线上业务,实现在线备份,并且能增量备份,最好的办法就是采用主从复制机制(replication),在 slave 机器上做备份。
备份策略布置:
(1)、创建备份目录
Shell> mkdir /tmp/mysqlbackup
Shell> mkdir /tmp/mysqlbackup/daily
(2)、启用二进制日志
采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。
启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 /etc/my.cnf,加入以下几行:
[mysqld]
log-bin
然后启动 mysqld 就可以了。运行过程中会产生 HOSTNAME-bin.000001 以及 HOSTNAME-bin.index,前面的文件是 mysqld 记录所有对数据的更新操作,后面的文件则是所有 binlog 的索引,都不能轻易删除。关于 binlog 的更详细信息请查看手册。
(3)、配置SSH密钥登录,用于将MySQL备份传送到备份服务器(如果备份服务器为Windows,请跳过此部)。
1)、在MySQL所在服务器(192.168.0.20)生成SSH密钥
[root@lab ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): //直接回车
Enter passphrase (empty for no passphrase): //直接回车,不使用密码
Enter same passphrase again: //直接回车,不使用密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c2:96:9f:2d:5a:8e:08:42:43:35:2f:85:5e:72:f8:1c root@lab
2)、在备份服务器(192.168.0.200)上创建目录,修改权限,并传送公钥。
[root@lab ~]# ssh 192.168.0.200 ”mkdir .ssh;chmod 0700 .ssh”
The authenticity of host ’192.168.0.200 (192.168.0.200)’ can’t be established.
RSA key fingerprint is 37:57:55:c1:32:f1:dd:bb:1b:8a:13:6f:89:fb:b8:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ’192.168.0.200′ (RSA) to the list of known hosts.
root@192.168.0.200’s password: //输入备份服务器的root密码
[root@lab ~]# scp .ssh/id_rsa.pub 192.168.0.200:.ssh/authorized_keys2
root@192.168.0.200’s password:
id_rsa.pub 100% 218 0.2KB/s 00:00
3)、测试SSH登录
[root@lab ~]# ssh 192.168.0.200 //测试SSH登录
Last login: Fri Nov 16 10:34:02 2007 from 192.168.0.20
[root@lib ~]#
(4)、设置crontab任务,每天执行备份脚本
shell> crontab -e
#每个星期日凌晨3:00执行完全备份脚本
0 3 * * 0 /root/MySQLBackup/mysqlFullBackup.sh >/dev/null 2>&1
#周一到周六凌晨3:00做增量备份
0 3 * * 1-6 /root/MySQLBackup/mysqlDailyBackup.sh >/dev/null 2>&1
mysqlFullBackup.sh注释:
#!/bin/sh
# Name:mysqlFullBackup.sh
# PS:MySQL DataBase Full Backup.
# Write by:i.Stone
# Last Modify:2007-11-17
#
# Use mysqldump –help get more detail.
#
# 定义变量,请根据具体情况修改
# 定义脚本目录
scriptsDir=`pwd`
# 定义数据库目录
mysqlDir=/usr/local/mysql
# 定义用于备份数据库的用户名和密码
user=root
userPWD=111111
# 定义备份目录
dataBackupDir=/tmp/mysqlbackup
# 定义邮件正文文件
eMailFile=$dataBackupDir/email.txt
# 定义邮件地址
eMail=alter@somode.com
# 定义备份日志文件
logFile=$dataBackupDir/mysqlbackup.log
DATE=`date -I`
echo “” > $eMailFile
echo $(date +”%y-%m-%d %H:%M:%S”) >> $eMailFile
cd $dataBackupDir
# 定义备份文件名
dumpFile=mysql_$DATE.sql
GZDumpFile=mysql_$DATE.sql.tar.gz
# 使用mysqldump备份数据库,请根据具体情况设置参数
$mysqlDir/bin/mysqldump -u$user -p$userPWD \
–opt –default-character-set=utf8 –extended-insert=false \
–triggers -R –hex-blob –all-databases \
–flush-logs –delete-master-logs \
–delete-master-logs \
-x > $dumpFile
# 压缩备份文件
if [[ $? == 0 ]]; then
tar czf $GZDumpFile $dumpFile >> $eMailFile 2>&1
echo “BackupFileName:$GZDumpFile” >> $eMailFile
echo “DataBase Backup Success!” >> $eMailFile
rm -f $dumpFile
# Delete daily backup files.
cd $dataBackupDir/daily
rm -f *
# Delete old backup files(mtime>2).
$scriptsDir/rmBackup.sh
# 如果不需要将备份传送到备份服务器或备份服务器为Windows,请将标绿的行注释掉
# Move Backup Files To Backup Server.
#适合Linux(MySQL服务器)到Linux(备份服务器)
$scriptsDir/rsyncBackup.sh
if (( !$? )); then
echo “Move Backup Files To Backup Server Success!” >> $eMailFile
else
echo “Move Backup Files To Backup Server Fail!” >> $eMailFile
fi
else
echo “DataBase Backup Fail!” >> $emailFile
fi
# 写日志文件
echo “——————————————————–” >> $logFile
cat $eMailFile >> $logFile
# 发送邮件通知
cat $eMailFile | mail -s “MySQL Backup” $eMail
本文转自:http://blog.thematice.com 作者:稀饭的国度
转载于:https://www.cnblogs.com/lvsong/archive/2010/07/30/1788899.html
MySQL 备份和恢复策略(二)相关推荐
- MySQL 备份和恢复策略
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.本文主要对MyISAM表做备份恢复. 备份策略一:直接拷贝数据 ...
- MySQL备份和恢复:mysqldump工具用法详述
MariaDB/MySQL备份和恢复(一):mysqldump工具用法详述 分类: 数据库系列 本文原创地址在博客园:https://www.cnblogs.com/f-ck-need-u/p/901 ...
- MySQL 备份和恢复
MySQL 备份和恢复 本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL 版本为 5.0.22. 目前 MyS ...
- mysql备份与恢复实验报告_实验报告六MYSQL备份和恢复.doc
实验报告六MYSQL备份和恢复.doc 班级:10应用 姓名:张红珍 学号:2010081133 指导老师:钟老师 实验六 MYSQL备份与恢复 实验平台:安装MYSQL数据库的PC 实验目的:1.熟 ...
- mysql数据库恢复策略_MySQL 备份和恢复策略(一)
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.本文主要对MyISAM表做备份恢复. 备份策略一:直接拷贝数据 ...
- 大数据运维之MySQL备份及恢复
一.MySQL备份概述 1.为什么要备份 能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方. 冗余: 数据有多份冗余,但不等备份,只能防止机械故障还来的数据丢失, ...
- MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述
MariaDB/MySQL备份恢复系列: 备份和恢复(一):mysqldump工具用法详述 备份和恢复(二):导入.导出表数据 备份和恢复(三):xtrabackup用法和原理详述 xtrabacku ...
- MySQL备份,恢复方案,mysqlbinlog,mysqldump,主从,主主复制
DBMS数据库管理系统的三层模型:物理层,逻辑层以及视图层. 物理层:决定数据的存储形式. 逻辑层:是一张有一张的表,一行行的数据记录. 视图层:让用户看起来更方便,可有可无. 存储引擎:使逻辑层中s ...
- MySQL备份和恢复数据表的方法(1)
备份是最简单的保护数据的方法,本节将介绍多种备份方法.为了得到一个一致的备份,在相关的表上做一个LOCK TABLES,你只需一个读锁定,当你在数据库目录中做文件的一个拷贝时,这允许其他线程继续查询该 ...
最新文章
- 靓号站php,阿里宝卡选靓号php代码
- 前端遍历导致查询数据时间过长_OLAP 服务器,空间换时间可行吗?
- Java Web(5) Spring 下使用Junit4 单元测试
- Shell脚本中循环select命令用法笔记
- vue使用axios并存数据到state
- Linux里面nginx显示Hello,Nginx得知——Hello World模
- java的接口语法_JAVA接口的基本语法
- Humble Numbers(丑数) 超详解!
- 怎样在VS2013/MFC中使用TeeChart绘图控件
- Atitit 外观ui调整法 表单与表格列表
- 计算机主板型号尺寸,10大华硕主板型号简介,组装电脑的朋友可别错过
- 弹出usb大容量储存设备时出问题【无法结束SYSTEM进程情况,explorer.exe重启无用 | 已解决】
- Linux偷偷“吃”了我的内存?
- java gui 做闹钟,用JAVA怎样编写一个可以在eclipse中运行的闹钟程序?
- Oracle、MySQL、SqlServer、PG数据库merge into语法实现总结
- 主元排序法c语言写法,快速排序隨即主元法
- Chaos Emulator v0.2.3 自建引力模拟器分享
- java不区分大小写查找字符串
- Reddit 的源代码和内部数据被盗
- android控制手机拍照代码,Android开发之手机拍照功能的实现(源代码分享)
热门文章
- 007_Redis的Set数据类型
- linux二进制文件构建mysql_MySQL安装系列:使用通用二进制文件在Unix/Linux安装
- html微信窗口阻止滚动条,解决微信浏览器页面可以随意拉伸,导致页面内部滚动条滚动体验不好的问题...
- mysql的字符集设置为什么_为什么Mysql默认的字符集都是latin1
- 在html中写typescript,5分钟上手TypeScript
- python图像分类实验总结_图像分类的5种技术,总结并归纳算法、实现方式,并进行实验验证...
- View类的xml属性和相关方法说明
- Android 四大组件之——Acitivity(一)
- python随机生成车牌_使用Python自动化获取全国每个城市的车牌代码
- java redis自增操作_【转载】关于spring boot使用redis的increment()方法自增问题