MySQL简易备份办法[MySQL防范]
本文“MySQL简易备份办法[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
一.错误改正
检测 MySQL 内 PHPBB 的 DB 後发现,有个 users 的 table 是有问题的, 利用 myisamchk 尝试去修护,发现还不行用预设方法修护,还要多加个 "-o" 的参数才行,在利用myisamchk 时,为避免还有效户来存取 DB ,最好是可以将 MySQL 服务终止,不然最少也要下个 "mysqladmin flush-tables" 後, 再作 myisamchk 指令,像:
myisamchk -o phpbb2_users.MYI
这个行动,大概要作个2~3次,直到没有错误的讯息呈现!
修护完,重新启动 MySQL 服务後,便可以用 mysql 这个 client 的指令, 去 Query 一下 DB 内容,测试看能否正常.很幸运的,DB的部份在此时, 运作是正常的.
当然,在你要备份之前,假定能先检测资料能否精确,那是最好不过了, 假定有需求,可以把检测的工作,排定在备份工作之前,但是记得,这个检测DB 的行动不要排定在 DB 高用量的那段时间,深夜无人上线的时段是个不错的挑选!
二.开始备份
phpBB 谈论区的资料档,主要有两个部份,就是 php 主程式和 DB 内容, php 主程式的备份就对比简单,只要把全部档案 tar 起来就行了,就像:
tar cvfz phpbb2_20020601.tgz phpbb (上面的 phpbb 是指 phpBB 的 php 网页程式存放目录.)
以後有改到 phpBB 网页程式部份再重新备份一次就行,它的内容资料都写在DB 内,所以 php 程式档部份异动性应当不大.
再来就是 MySQL DB 部份了,预设 MySQL 的 DB 档案是存在 /var/lib/mysql 内, 以 DB 名称为目录,目录内就是该 DB 的全部资料,像 phpbb2 这个 DB, 就是存在 /var/lib/mysql/phpbb2 内,在备份前,因为怕资料还没有完好写入磁碟, 并且 MySQL 会 Lock 在利用的 DB 档案,所以应当是要先把 MySQL 先 Shutdown 一下, 整个备份的程序可以下像下面的指令去完成:
/etc/rc.d/init.d/mysqld stop
tar cvfz phpbb2_db_20020601.tgz phpbb2
/etc/rc.d/init.d/mysqld start
(上面的 phpbb2 是指存放 phpbb2 这个 DB 的目录.)
对!这样便可以了! 不过要注意的是,怕 DB 内每个 Tables 间的资料有关关联性, 所以最好是把整个 DB 一次备起来,单独只备哪个 Tables 的档案,以後回存时, 怕会有资料关联不一致的问题!
三.若何回存
phpBB 谈论区的回存,只需把档案解回本来存放网页的途径便可以,用以下指令解开:
tar xvfz phpbb2_20020601.tgz
DB 发生错误而要回存时,其实也不难,先找出近来一次完好正常的备份,先把目前错误的网页或 DB 先改名或 tar 起来,再把好的备份给解开回本来目录位置就行了,需求注意的是, MySQL 服务最好也是要先终止,回存完成後再启动服务,回存 DB 的整个程序大概像下面:
/etc/rc.d/init.d/mysqld.stop
mv phpbb2 phpbb2_error
tar xvfz phpbb2_db_20020601.tgz
/etc/rc.d/init.d/mysqld.start
然後再去测试一下网页及资料库! 看利用上能否正常就行了...
[1] [2] [3] 下一页
四.MySQL线上备份
利用像上面的"档案"方法备份是个不错的办法,它最少可以保持该主机某个时间点的完好档案备份,但还是有一些问题需求考虑到,有些主机就不只成立一个 DB 罢了, 总不能为了备份某个 DB 而把整个 MySQL 服务终止,备份档案的方法,回存在原主机上一定实用,但假定 MySQL 版本进级,或是在那天,该网页空间需迁机移机到别的主机时, 那就没人敢保证备出来的资料档可以用,所以我们可以考虑另一种备份的方法,是利用MySQL 本身供应的功效: "MySQL Data Dump",指令是 "mysqldump".
利用 MySQL 的 Dump 功效可以把 DB 的"构造","资料"或"构造加资料" Dump 成文字档, mysqldump 指令供应的弹性很大,你可以挑选把整个 DB Dump 成一个档, 或是每个 Table 为一个档,乃至是把构造档和资料脱离储存都可以.
检测酷!学园的 phpBB 资料库後发现,以构造加资料 Full Dump 成一个档案, 档案的大小大约也是30几MB左右. 在 Dump 之前最好多下个 Flush-Logs 更新 LOG, 所以整个 Dump 的指令以下:
mysqladmin -uroot -p flush-logs
mysqldump phpbb2 -uroot -p opt > phpbb2_20020601.sql
(phpbb2 是 DB 名称, opt 是一个利用完好 Dump 参数)
再利用 time 指令去测试履行时间,这个30几 MB 的 DB , Dump 出来竟只要15秒左右, Query 的速度还真是快,假定只是要单独 Dump 某个 Table 时,只要在上面的指令後, 转出标记 ">" 前加个 Table 名称便可以,如只要 phpbb2_users 这个 Table 的 Dump 时, 只要下:
mysqldump phpbb2 -uroot -p opt phpbb2_users > phpbb2_users_20020601.sql
Dump 出来的档案是个纯文字档,你可以用 tar 把它压起来,以上面30几 MB 的 DB 为例, 大约可以把档案大小压到1/3左右的大小,因为 Dump 出是文字档,全部的资料都是以明文
显示,所以必须注意一下备份档保存的安全性,并且倡议备份档最好再别的储存於异地以及其他易於保存的媒体上,像光碟片或磁带,这样的备份才有意义.
五.MySQL线上回存
若要回存整个资料库,只需将紧缩的备份档复原成 Dump 的档案,再用下面的指令回存:
mysql phpbb2 -uroot -p < phpbb2_20020601.sql
这边需注意的是,若成立备份时是以"opt"或"add-drop-table"为参数时,回存的行动是先将旧的 Table 先删除,重建 Table 的构造後再把 Data 汇入,所以回存後, 全部的资料会回到你当时备份那个时间点,因此在回存资料时,可以考虑把现有错误或不完好的 DB 先备份一份下来,以备不时之需,或是拿来比对错误的地方在那边,当然你也可以把资料回存到另一个测试用的 DB 内,只要把上面指令的 DB 名称改成你的测试用 DB 名称便可.
利用这种回存方法, MySQL 服务不需终止,也不会动到其他正在利用的 DB ,在一些供应MySQL 服务的虚拟主机,可用这种方法作你自己的 DB 备份及回存.
别的,假定你是系统重建或是移机时,切需在新的 MySQL 内,新建一个空白 DB 後,才行作回存的工作,你可以用下面的指令成立:
mysql -uroot -p -e "CREATE DATABASE phpbb2"
(上面的phpbb2是你要新建的 DB 名称)
另一种作法,先用 "mysql" 指令进入 "mysql client console", 然後再用:
CREATE DATABASE phpbb2;
这样就行了,记得尾端要加个 ";" 标记该行指令才会履行.
六 开始排定备份
知道备份的办法之後,便可以把整个备份的行动作成一个 Scirpt ,指定 DB 相关参数後, 便可操纵 Crontab 排定备份的周期和时间,可以把下面的指令加入 Crontab 内:
00 04 * * * /home/dbadmin/backup
(backup 是 Script 的档名)
排定的时间当然最好是夜间离峰时. 以本文附录供应的 Script 作备份法则阐明,每日履行备份功课,以一周为一个周期,所以近来的资料是昨天,最久的资料是一星期前,每次备份是将指定的 DB Full Dump 成一个档, 用 tar 紧缩後存入指定的途径. 备份档以 DB 的名称加上星期来命名,星期的表示为"0" 代表星期日,"1"代表星期一,以此类推.
目前该 Scirpt 一次只能备份一个 DB 罢了,你可以加以改正以符合你的系统环境及需求.
上一页 [1] [2] [3] 下一页
七 结语
目前这个 Script 在测试机上测试的效果还不错,以酷!学园谈论区的2万多篇谈论文章, DB 总大小有30几 MB, 跑这个 Script 大约只需求30几秒就完成,下面是以 time 指令测试
数次计算的后果:
[root@demo tmp]# time backup
real 0m32.788s
user 0m22.770s
sys 0m4.610s
[root@demo tmp]# time backup
real 0m33.898s
user 0m24.740s
sys 0m4.590s
[root@demo tmp]# time backup
real 0m32.808s
user 0m23.710s
sys 0m4.750s
测试机的硬体装备是Intel Celeron 600 + 256mb SDRAM, 功课系统是CLE Linux 1.0.
因为 Dump 备份的速度很快,大部份作 MySQL 的备份都是这样作的,假定是大型大量的DB 环境时,就需求考虑以 Incremental 的备份方法,而 MySQL 本身也供应这种备份方法, 这种备份方法,一周作一次完好的备份,每天只要作异行动业档(LOG)的备份就行,在备份的本钱上,可以节俭备份时间和储存空间.
完成了备份的工作安置,目前又可以和学园们一同欢愉的上网冲浪去了...
八.附录-备份Script原始档
#!/bin/sh
#
# Title: MySQL Backup Script
# Created: 2002.06.01
# Current: 2002.06.23
# Contact: Duncan Lo <duncan@twn.wox.org >
# Note: This script just only backup one database!
#
#
# Variables define for your server
#
# Database name
DB
# Database admins name
DBUSER="root"
# Database admins password
DBPASS="password"
# MySQL commands path
# default: /usr/bin
BINPATH="/usr/bin"
# Backup date format
BAKDATE=`date +%w`
# Path for backup files save to
BAKPATH="/usr/backup/phpbb"
# Temp Directorys name
TMPDIR="tmp.dbbak".$BAKDATE
# Backup filess directory
BAKDIR="$DBNAME"_$BAKDATE
# Database tables list files name
TABLST="tables_list"
# Backup Type
# 0: All tables in one dump file
# 1: Pre table in one dump file
BAKTYPE="0"
#
# Script Start
#
#
# Create backup temp directory
#
cd /tmp
rm -rf $TMPDIR
mkdir $TMPDIR
cd $TMPDIR
mkdir $BAKDIR
cd $BAKDIR
#
# Create databases table list
#
$BINPATH/mysql $DBNAME -u$DBUSER -p$DBPASS -N -e "show tables" > $TABLST
#
# Flush databases LOG before dump
#
$BINPATH/mysqladmin -u$DBUSER -p$DBPASS flush-logs
#
# Choice one type to dump datebase
#
case $BAKTYPE in
0)
#
# Dump database all table in one file
#
$BINPATH/mysqldump $DBNAME -u$DBUSER -p$DBPASS opt > $DBNAME.sql
;;
1)
#
# Dump database pre table in one file
#
awk { print BINPATH"/mysqldump "DBNAME" -u"DBUSER" -p"DBPASS" \
opt " $1 " > " $1".sql" } \
BINPATH="$BINPATH" DB DBUSER="$DBUSER" DBPASS="$DBPASS" \
$TABLST \
| /bin/sh
;;
*);;
esac
cd ..
#
# Compress backup files
#
tar cfz $BAKDIR.tgz $BAKDIR
#
# Move file to backup directory
#
mv $BAKDIR.tgz $BAKPATH
cd ..
#
# Clean temp files and directory
#
rm -rf $TMPDIR
#
# Script End
#
上一页 [1] [2] [3]
以上是“MySQL简易备份办法[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:利用MySQL内建复制功效来最佳化可用性
- ·下一篇文章:快速修复MySQL数据库
- ·中查找“MySQL简易备份办法”更多相关内容
- ·中查找“MySQL简易备份办法”更多相关内容