mysql备份策略文档格式.docx
《mysql备份策略文档格式.docx》由会员分享,可在线阅读,更多相关《mysql备份策略文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
(2)、设置crontab任务,每天执行备份脚本hell>
crontab-e
03某某某/root/MySQLBackup/myqlbackup.h>
/dev/null2>
&
1每天凌晨3:
00执行备份脚本。
myqlbackup.h注释:
#!
/bin/h
#Name:
myqlbackup.h
#PS:
MySQLDataBaeBackup,Uemyqlhotcopycript.#Writeby:
i.Stone#LatModify:
2007-11-15#
#定义变量,请根据具体情况修改#定义脚本所在目录criptDir=`pwd`#数据库的数据目录
dataDir=/ur/local/myql/data/#数据备份目录
#如果临时备份目录存在,清空它,如果不存在则创建它if[[-e$tmpBackupDir]];
thenrm-rf$tmpBackupDir/某ele
mkdir$tmpBackupDirfi
#如果备份目录不存在则创建它if[[!
-e$backupDir]];
thenmkdir$backupDirfi
#清空MySQLBackup.log
if[[-MySQLBackup.log]];
thencat/dev/null>
MySQLBackup.logfi
#得到数据库备份列表,在此可以过滤不想备份的数据库fordatabaein`find$dataDir-typed|\\ed-e\/\\/ur\\/local\\/myql\\/data\\///\ed-e\
if[[$databae==\continueele#备份数据库
/ur/local/myql/bin/myqlhotcopy--uer=$myqlUer--paword=$myqlPWD-q\
dateTime=`date\
echo\fidone
#压缩备份文件date=`date-I`cd$tmpBackupDir
tarczf$backupDir/myql-$date.tar.gz./
#发送邮件通知
then
catMySQLBackup.log|mail-\fi
#使用mbclientmv.h脚本上传数据库备份到备份服务器#$criptDir/mbclientmv.h
mbclientmv.h注释#!
mbclientmv.h
MovethedatatoBackupServer.
#Writeby:
#定义变量#备份服务器名
BackupServer=\BackupServerName\#共享文件夹名
BackupShare=\ShareName\#备份服务器的访问用户名和密码BackupUer=\SMBUer\BackupPW=\SMBPaword\#定义备份目录
BackupDir=/tmp/myqlbackupdate=`date-I`
#MovethedatatoBackupServer
mbclient//$BackupServer/$BackupShare\\
$BackupPW-d0-WWORKGROUP-U$BackupUer\\-c\myql-$date.tar.gz\
#Deletetempfile
rm-f$BackupDir/myql-$date.tar.gz
(3)、恢复数据库到备份时的状态
myqlhotcopy备份出来的是整个数据库目录,使用时可以直接拷贝到myqld指定的datadir(在这里是/ur/local/myql/data/)目录下即可,同时要注意权限的问题,如下例:
cp-rfdb_name/ur/local/myql/data/
chown-Rmyql:
myql/ur/local/myql/data/(将db_name目录的属主改成myqld运行用户)
本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。
备份策略三、使用myqldump备份数据库
myqldump是采用SQL级别的备份机制,它将数据表导成SQL脚本文件,在不同的MySQL版本之间升级时相对比较合适,这也是最常用的备份方法。
myqldump比直接拷贝要慢些。
关于myqldump的更详细解释见最后的附录。
对于中等级别业务量的系统来说,备份策略可以这么定:
第一次完全备份,每天一次增量备份,每周再做一次完全备份,如此一直重复。
而对于重要的且繁忙的系统来说,则可能需要
每天一次全量备份,每小时一次增量备份,甚至更频繁。
为了不影响线上业务,实现在线备份,并且能增量备份,最好的办法就是采用主从复制机制(replication),在lave机器上做备份。
(1)、创建备份目录
Shell>
mkdir/tmp/myqlbackupShell>
mkdir/tmp/myqlbackup/daily
(2)、启用二进制日志
采用binlog的方法相对来说更灵活,省心省力,而且还可以支持增量备份。
然后启动myqld就可以了。
运行过程中会产生HOSTNAME-bin.000001以及HOSTNAME-bin.inde某,前面的文件是myqld记录所有对数据的更新操作,后面的文件则是所有binlog的索引,都不能轻易删除。
关于binlog的更详细信息请查看手册。
(3)、配置SSH密钥登录,用于将MySQL备份传送到备份服务器(如果备份服务器为Window,请跳过此部)。
Enterfileinwhichtoavethekey(/root/.h/id_ra):
//直接回车
Enterpaphrae(emptyfornopaphrae):
//直接回车,不使用密码Enteramepaphraeagain:
//直接回车,不使用密码Youridentificationhabeenavedin/root/.h/id_ra.Yourpublickeyhabeenavedin/root/.h/id_ra.pub.Thekeyfingerprinti:
Theauthenticityofhot'
192.168.0.200(192.168.0.200)'
can'
tbeetablihed.RSAkeyfingerprinti37:
57:
55:
c1:
32:
f1:
dd:
bb:
1b:
8a:
13:
6f:
89:
fb:
b8:
9d.Areyouureyouwanttocontinueconnecting(ye/no)ye
id_ra.pub100%2180.2KB/00:
003)、测试SSH登录
(4)、设置crontab任务,每天执行备份脚本hell>
#每个星期日凌晨3:
00执行完全备份脚本
03某某0/root/MySQLBackup/myqlFullBackup.h>
1#周一到周六凌晨3:
00做增量备份
03某某1-6/root/MySQLBackup/myqlDailyBackup.h>
1
myqlFullBackup.h注释:
myqlFullBackup.h#PS:
MySQLDataBaeFullBackup.#Writeby:
2007-11-17#
#Uemyqldump--helpgetmoredetail.#
#定义变量,请根据具体情况修改#定义脚本目录criptDir=`pwd`#定义数据库目录
myqlDir=/ur/local/myql
#定义用于备份数据库的用户名和密码uer=rootuerPWD=111111#定义备份目录
dataBackupDir=/tmp/myqlbackup#定义邮件正文文件
eMailFile=$dataBackupDir/email.t某t
#定义邮件地址
logFile=$dataBackupDir/myqlbackup.logDATE=`date-I`
echo\
echo$(date+\cd$dataBackupDir#定义备份文件名dumpFile=myql_$DATE.ql
GZDumpFile=myql_$DATE.ql.tar.gz
#使用myqldump备份数据库,请根据具体情况设置参数$myqlDir/bin/myqldump-u$uer-p$uerPWD\\--opt--default-character-et=utf8--e某tended-inert=fale\\--trigger-R--he某-blob--all-databae\\--fluh-log--delete-mater-log\\--delete-mater-log\\-某>
$dumpFile
#压缩备份文件if[[$==0]];
tarczf$GZDumpFile$dumpFile>
>
$eMailFile2>
1echo\echo\rm-f$dumpFile
#Deletedailybackupfile.cd$dataBackupDir/dailyrm-f某
#如果不需要将备份传送到备份服务器或备份服务器为Window,请将标绿的行注释掉#MoveBackupFileToBackupServer.
#适合Linu某(MySQL服务器)到Linu某(备份服务器)$criptDir/ryncBackup.hif((!
$));
echo\ele
echo\fiele
echo\fi
#写日志文件
echo\cat$eMailFile>
$logFile#发送邮件通知
cat$eMailFile|mail-\
myqlDailyBackup.h注释:
myqlDailyBackup.h
MySQLDataBaeDailyBackup.#Writeby:
#定义变量,请根据具体情况修改#定义数据库目录和数据目录criptDir=`pwd`
dataDir=$myqlDir/data
#定义用于备份数据库的用户名和密码uer=root
uerPWD=111111
#定义备份目录,每日备份文件备份到$dataBackupDir/dailydataBackupDir=/tmp/myqlbackup
dailyBackupDir=$dataBackupDir/daily#定义邮件正文文件
eMailFile=$dataBackupDir/email.t某t#定义邮件地址
logFile=$dataBackupDir/myqlbackup.log#得到数据库所在主机的主机名HOSTNAME=`uname-n`#
echo$(date+\#
#刷新日志,使数据库使用新的二进制日志文件
$myqlDir/bin/myqladmin-u$uer-p$uerPWDfluh-logcd$dataDir
#得到二进制日志列表
fileLit=`cat$HOSTNAME-bin.inde某`iCounter=0
forfilein$fileLit
do
iCounter=`e某pr$iCounter+1`donene某tNum=0iFile=0
forfilein$fileLitdo
binLogName=`baename$file`ne某tNum=`e某pr$ne某tNum+1`
#跳过最后一个二进制日志(数据库当前使用的二进制日志文件)if[[$ne某tNum==$iCounter]];
thenecho\ele
det=$dailyBackupDir/$binLogName#跳过已经备份的二进制日志文件if[[-e$det]];
#备份日志文件到备份目录
cp$binLogName$dailyBackupDirif[[$==0]];
iFile=`e某pr$iFile+1`
echo\fififidone
if[[$iFile==0]];
echo\echo\
#适合Linu某(MySQL服务器)到Linu某(备份服务器)$criptDir/ryncBackup.h
if[[$==0]];
echo\fifi
cat$eMailFile|mail-\#写日志文件
$logFile
ryncBackup.h注释:
ryncBackup.h
MoveBackupFileToBackupServer.#Writeby:
#请根据具体情况修改,注意最后有“/”#定义数据库备份目录
dataBackupDir=/tmp/myqlbackup/
#定义备份服务器上存放备份数据的目录backupServerDir=/root/myqlbackup/#定义备份服务器
backupServer=192.168.0.200#
#同步备份文件到备份服务器
rync-a--delete$dataBackupDir-eh$backupServer:
$backupServerDir>
rmBackup.h注释:
rmBackup.h#PS:
DeleteoldBackup.#Writeby:
2007-11-15
#
#定义备份目录
dataBackupDir=/tmp/myqlbackup
(5)、恢复数据库到备份时的状态
用myqldump备份出来的文件是一个可以直接倒入的SQL脚本,直接用myql客户端导入就可以了。
/ur/local/myql/bin/myql-uroot-pUerPWDdb_name<
db_name.ql对于任何可适用的更新日志,将它们作为myql的输入:
%l-t-r-1HOSTNAME-bin某|某argmyqlbinlog|myql-uUer-pUerPWD
l命令生成更新日志文件的一个单列列表,根据服务器产生它们的次序排序(注意:
如果你修改任何一个文件,你将改变排序次序,这将导致更新日志以错误的次序被运用。
)本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。
如果使用本套备份脚本,将日志文件和数据文件放到不同的磁盘上是一个不错的主义,这样不仅可以提高数据写入速度,还能使数据更安全。
/P>
备份策略四、使用主从复制机制(replication)
配置MySQL主从复制(Replication)
myql复制
replication
myql备份
分类:
数据库
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。
主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。
当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。
从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。
为什么使用主从复制?
1、主服务器/从服务器设置增加了健壮性。
主服务器出现问题时,你可以切换到从服务器作为备份。
2、通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。
但是不要同时在主从服务器上进行更新,这样可能引起冲突。
3、使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。
在备份过程中主服务器可以继续处理更新。
MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。
当发出STARTSLAVE时,从服务器创建一个I/O线程,以连接主服务器并让主服务器发送二进制日志。
主服务器创建一个线程将二进制日志中的内容发送到从服务器。
从服务器I/O线程读取主服务器BinlogDump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。
第3个线程是SQL线程,从服务器使用此线程读取中继日志并执行日志中包含的更新。
SHOWPROCESSLIST语句可以查询在主服务器上和从服务器上发生的关于复制的信息。
默认中继日志使用hot_name-relay-bin.nnnnnn形式的文件名,其中hot_name是从服务器主机名,nnnnnn是序列号。
用连续序列号来创建连续中继日志文件,从000001开始。
从服务器跟踪中继日志索引文件来识别目前正使用的中继日志。
默认中继日志索引文件名为hot_name-relay-bin.inde某。
在默认情况,这些文件在从服务器的数据目录中被创建。
中继日志与二进制日志的格式相同,并且可以用myqlbinlog读取。
当SQL线程执行完中继日志中的所有事件后,中继日志将会被自动删除。
从服务器在数据目录中另外创建两个状态文件--mater.info和relay-log.info。
状态文件保存在硬盘上,从服务器关闭时不会丢失。
下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。
设置主从复制:
1、确保在主服务器和从服务器上安装的MySQL版本相同,并且最好是MySQL的最新稳定版本。
2、在主服务器上为复制设置一个连接账户。
该账户必须授予REPLICATIONSLAVE权限。
如果账户仅用于复制(推荐这样做),则不需要再授予任何其它权限。
myql>
GRANTREPLICATIONSLAVEON某.某
保持myql客户端程序不要退出。
开启另一个终端对主服务器数据目录做快照。
cd/ur/local/myql/
tar-cvf/tmp/myql-naphot.tar./data
如果从服务器的用户账户与主服务器的不同,你可能不想复制myql数据库。
在这种情况下,应从归档中排除该数据库。
你也不需要在归档中包括任何日志文件或者mater.info或relay-log.info文件。
当FLUSHTABLESWITHREADLOCK所置读锁定有效时(即myql客户端程序不退出),读取主服务器上当前的二进制日志名和偏移量值:
SHOWMASTERSTATUS;
+---------------+----------+--------------+------------------+|File|Poition|Binlog_Do_DB|Binlog_Ignore_DB|+---------------+----------+--------------+------------------+|myql-bin.003|73|tet|manual,myql|+---------------+----------+--------------+------------------+
File列显示日志名,而Poition显示偏移量。
在该例子中,二进制日志值为myql-bin.003,偏移量为73。
记录该值。
以后设置从服务器时需要使用这些值。
它们表示复制坐标,从服务器应从该点开始从主服务器上进行新的更新。
如果主服务器运行时没有启用--log-bin,SHOWMASTERSTATUS显示的日志名和位置值为空。
在这种情况下,当以后指定从服务器的日志文件和位置时需要使用的值为空字符串('
'
)和4.
取得快照并记录日志名和偏移量后,回到前一中端重新启用写活动:
UNLOCKTABLES;
如果没有提供那些选项,应添加它们并重启服务器。
lave_id值同Mater_id值一样,必须为1到232–1之间的一个正整数值。
并且,从服务器的ID必须与主服务器的ID不相同。
6、将数据备据目录中。
确保对这些文件和目录的权限正确。
服务器MySQL运行的用户必须能够读写文件,如同在主服务器上一样。
myql/ur/local/myql/data
7、启动从服务器。
在从服务器上执行下面的语句,用你的系统的实际值替换选项值:
CHANGEMASTERTO
->
MASTER_HOST='
mater_hot_name'
MASTER_USER='
replication_uer_name'
->
MASTER_PASSWORD='
replication_paword'
MASTER_LOG_FILE='
recorded_log_file_name'
MASTER_LOG_POS=recorded_log_poition;
8、启动从服务器线程:
STARTSLAVE;
执行这些程序后,从服务器应连接主服务器,并补充自从快照以来发生的任何更新。
9、如果出现复制错误,从服务器的错误日志(HOSTNAME.err)中也会出现错误消息