MySQL简易备份方法

适用对象: MySQL DB管理员.
适用条件: 对 Linux 环境有基础的管理及操作能力.
文章附注: 本篇文章为自由文件,欢迎非商业性质转载,并请注明出处!
商业性质转载请来信告知!
特别注意: 1.本篇文章提供之程式及设定*不一定*符合您的环境,
请依您的系统环境适当地修改程式及设定.
2.在执行任何具破坏性的动作及行为前,
请确认您已作好完整可用的资料备份工作.

 目录内容
一.前言
二.错误修正
三.开始备份
四.如何回存
五.MySQL线上备份
六.MySQL线上回存
七.开始排定备份
八.结语
九.参考资料
十.附录-备份Script原始档

 

一.前言

        前几周,正当我在网上快乐的冲浪,在酷!学园快乐的灌口水时, 竟蹦出一页 "phpBB critical error",查询 Database 出现错误的讯息,中断了各学员在各系版唇枪舌战,热烈的讨论,虽然过了不久,系统管理工友把网页修好,但开始连续几个星期,phpBB 讨论区有时还是很容易挂掉,频率大约是 一至二周一次,通常都是在周末大家最闲的时侯发生的,幸好此时刚好世界杯足球赛正好开打,不能到学园灌水,最少还有足球赛可以看. 当时修护的方式,是将 MySQL 服务停止,再把前一次可用的DB档案盖回去, 然後再重新启动 MySQL 服务来测试 phpBB 是否正常,这样子的作法通常都有效, 但总是会遗失某一段时间内的文章,这不是大家所希望的... 为了保存许多珍贵的资料和学园们恶心的口水,我开始著手准备 DB 的备份 工作,准备重建这个有问题 DB ,更为将来校园的迁址作 DB 移转准备.

(DB: Database的简称,以下都以 DB 取代 Database,
phpBB: 酷!学园讨论区系统的软体名称)

二.错误修正

花了一些时间熟悉主机的环境後,我开始寻找错误在那里... 检测 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 的目录.) Ok!这样就完成了! (什麽?就这样! 3行就结束了?!)

对!这样就可以了! 不过要注意的是,怕 DB 内每个 Tables 间的资料有关关联性, 所以最好是把整个 DB 一次备起来,单独只备哪个 Tables 的档案,以後回存时, 怕会有资料关联不一致的问题! 以酷!学园的口水讨论区为例,有21000笔左右的文章加上1200名注册会员,资料库
整个 tar 起来大约30几 MB 左右,每天备份,以一周为周期来计算,备份大约只需要
(35*7=245) 200 多 MB 左右的空间,一星期的备份烧在一张光碟还够!

本新闻共3页,当前在第1页  1  2  3 

 

四.如何回存

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

然後再去测试一下网页及资料库! 看使用上是否正常就行了...

五.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;

这样就行了,记得尾端要加个 ";" 符号该行指令才会执行.

 
共2页: 上一页 1 [2]
下一页

时间: 2024-09-15 20:35:07

MySQL简易备份方法的相关文章

mysql数据库备份方法

mysql教程数据库教程备份方法 mysql数据库备份方法有很多种,下面我们来一一介绍一下备份工具与直接在mysql.exe进行数据备份. 一.php教程myadmin最简单的了,   1.打开你的phpmyadmin   2.点击要备份的数据库或表   3.选择导出,数据库或数据备份完成了 二.用地国备份系统   1.方法很简单,去网上下载一个,然后进去产看说明 三.mysql自带的备份命令   1.e:>cd xamppmysqlbin e:xamppmysqlbin>mysql -u r

MySQL数据库备份方法说明_Mysql

在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.有时,正是MySQL管理员造成破坏.管理员已经知道表已破坏,用诸如vi或Emacs等编辑器试图直接编辑它们,这对表绝对不是件好事!  备份数据库两个主要方法是用mysqldump程序或直接拷贝数据库文件(如用cp.cpio或tar等).每种方法都有其优缺点:  mysqldump与MySQL服务器协同操作.直接拷贝方法在服务器外部进行,并且你必须采取措施保证没

最简便的MySql数据库备份方法MySQLdump第1/2页_php模板

使用MYSQL进行数据库备份,有很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但有没有想过,MySQL会有更简捷的使用文件目录的备份方法,而且又快有好.  一.数据备份捷径  因为这个方法没有得到官方正式文档的验证,我们暂称为试验吧.  目的:备份hostA主机中一个MySQL数据库TestA,并恢复到到hostB机中  试验环境:  操作系统:WinNT4.0,MySQL3.22.34,PHPMyAdmin 2.1.0 Chinaz  在hostA中安装MySQL数据库并建立Tes

使用dreamhost空间实现MYSQL数据库备份方法_Mysql

如何利用SSH(Shell)来备份和恢复MySQL数据库的方法 例如: 数据库参数为:: MySQL地址:mysql.dh.net MySQL名称:mysql_dbname MySQL用户:mysql_dbuser MySQL密码:mysql_dbpass 我要把数据库备份为bak.sql 步骤: 同样,使用windows系统自己带的telnet或者去下载一个putty来,登陆以后,一路cd到自己觉得合适的目录下(确认当前目录可写). 输入下面的命令: mysqldump -h mysql.dh

Linux下mysql数据库备份方法小结

通过mysql提供的功能 导出 命令: mysqldump -u 用户名 -p 数据库 > 数据库.sql 示例:  代码如下 复制代码 mysqldump -u root -p db1 > db1.sql(将数据库db1备份到db1.sql中) 提示输入密码,完成即可. 导入 需要先创建一个空数据库 mysql -u root -p(输入密码后进入mysql) create database db1;(创建一个名为db1的数据库) exit(退出mysql) 命令: mysql -u 用户名

Linux下mysql数据库备份方法

  通过mysql提供的功能 导出 命令: mysqldump -u 用户名 -p 数据库 > 数据库.sql 示例:  代码如下 复制代码 mysqldump -u root -p db1 > db1.sql(将数据库db1备份到db1.sql中) 提示输入密码,完成即可. 导入 需要先创建一个空数据库 mysql -u root -p(输入密码后进入mysql) create database db1;(创建一个名为db1的数据库) exit(退出mysql) 命令: mysql -u 用

mysql数据备份方法总结

利用命令方式xcopy命令,把下面代码保存成bak.bat文件.  代码如下 复制代码 net stop mysql xcopy D:/phpStudy/MySQL/data/sql111cn/*.*  D:/db_backup/%date:~0,10%/ /y net start mysql 然后在你的服务器中做计划任务就可以实现自动备份数据库了, 利用mysqldump命令方式进行数据备份 备份数据库: 在命令提示符窗口(注意不是 MySQL 的 MySQL Command Line Cli

memcached 做mysql主从备份方法

 一般的大站通常做法是    拿着内存当数据库教程来用(memcached).     和很好的读  写分离  备份机制 (mysql教程 的主从) 在这样的环境下我们怎么进行PHP开发呢.  本人不太会讲话.所以还是帖代码吧.  刚在linux  的 VIM  里写的一个  demo    调试通过.  也同时希望大家拍砖 ,  使用PHP5  写的. PHP4写出来怕大家说我落后了 <?php教程 $memcached = array(  //用memcached 的 多 进程模拟 多台me

windows mysql 自动备份的几种方法汇总_Mysql

基于之前的文章方法,加入批处理命令即可实现自动备份.只是由于批处理命令中对于备份文件的名字按照时间命名比较特别,所以特别整理一文. 1.复制date文件夹备份 ============================ 假想环境: MySQL   安装位置:C:\MySQL 论坛数据库名称为:bbs 数据库备份目的地:C:\db_bak\ ============================ 新建db_bak.bat,写入以下代码 *******************************