仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 962|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL教程之MySQL数据库的主动备份与数据库被损坏后...

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:16:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL的双许可模式意味着,那些希望对数据库具有额外控制的人可以直接从数据库厂商那儿得到帮助。MySQLAB公司提供了支持和维护服务,诸如代码更新和补丁修补服务等,每年订阅费为大约3000美元。当数据库服务器创建好今后,我们起首要做的不是思索要在这个撑持数据库的服务器运转哪些受MySQL扶携提拔的程序,而是当数据库遭到损坏后,如何安稳恢复到最初一次一般的形态,使得数据的丧失到达最小。大概说,仅仅是数据库服务器的创建,只能申明它能做些甚么,其实不代表它能不乱的做些甚么。劫难恢复的效力及周全性,也是体系的不乱性的一个准要素,特别关于一个服务器体系。
这一节,先容数据库主动备份和数据库被损坏后的恢复的办法。在这里,我们利用mysqlhotcopy,而且界说一段Shell剧本来完成数据库的主动备份,而且,让全部数据主动备份与数据恢复历程都基于Shell。
创建数据库备份所需前提
[1]创建主动备份剧本
在这里,为了使数据库备份和恢复的切合我们的实践请求,用一段切合请求的Shell剧本来完成全部备份历程的主动化。
[root@CentOS~]#vimysql-backup.sh ←创建数据库主动备份剧本,以下:

#!/bin/bash

PATH=/usr/local/sbin:/usr/bin:/bin

#TheDirectoryofBackup
BACKDIR=/backup/mysql

#ThePasswordofMySQL
ROOTPASS=******** 此处请将星号交换成MySQL的root暗码

#RemaketheDirectoryofBackup
rm-rf$BACKDIR
mkdir-p$BACKDIR

#GettheNameofDatabase
DBLIST=`ls-p/var/lib/mysqlgrep/tr-d/`

#BackupwithDatabase
fordbnamein$DBLIST
do
mysqlhotcopy$dbname-uroot-p$ROOTPASS$BACKDIRlogger-tmysqlhotcopy
done
[2]运转数据库主动备份剧本
[root@CentOS~]#chmod700mysql-backup.sh 改动剧本属性,让其只能让root用户实行
[root@CentOS~]#./mysql-backup.sh 运转剧本
[root@CentOS~]#ls-l/backup/mysql/ 确认一下是不是备份乐成
total8
drwxr-x---2mysqlmysql4096Sep116:54mysql 已乐成备份到/backup/mysql目次中
[3]让数据库备份剧本天天主动运转
[root@sample~]#crontab-e ←编纂主动运转划定规矩(然后会呈现编纂窗口,操纵同vi)
0003***/root/mysql-backup.sh 增加这一行到文件中,让数据库备份天天清晨3点举行
测试主动备份一般运转与否(备份恢复的办法)
这里,以经由过程实践操纵的历程来先容成绩呈现后的恢复办法。
[1]当数据库被删除后的恢复办法
起首创建一个测试用的数据库。
[root@CentOS~]#mysql-uroot-p ←用root登录到MySQL服务器
Enterpassword: ←输出MySQL的root用户暗码
WelcometotheMySQLmonitor.Commandsendwith;org.
YourMySQLconnectionidis8toserverversion:4.1.20

Typehelp;orhforhelp.Typectoclearthebuffer.

mysql>createdatabasetest; ←创建一个测试用的数据库test
QueryOK,1rowaffected(0.00sec)

mysql>usetest ←毗连到这个数据库
Databasechanged

mysql>createtabletest(numint,namevarchar(50)); ←在数据库中创建一个表
QueryOK,0rowsaffected(0.07sec)

mysql>insertintotestvalues(1,Hello,CentOS); ←拔出一个值到这个表(这里以“Hello,CentOS”为例)
QueryOK,1rowaffected(0.02sec)

mysql>select*fromtest; ←检察数据库中的内容
+------+-----------------+
numname
+------+-----------------+
1 Hello,Centos ←确认方才拔出到表中的值的存在
+------+------------------+
1rowinset(0.01sec)

mysql>exit ←加入MySQL服务器
Bye
然后,运转方才创建的数据库备份剧本,备份方才创建的测试用的数据库。
[root@sample~]#cd ←回到剧本地点的root用户的根目次
[root@sample~]#./mysql-backup.sh ←运转剧本举行数据库备份
接上去,我们再次登录到MySQL服务器中,删除方才创建的测试用的数据库test,以便于测试数据恢复可否乐成。
[root@Centos~]#mysql-uroot-p ←用root登录到MySQL服务器
Enterpassword: ←输出MySQL的root用户暗码
WelcometotheMySQLmonitor.Commandsendwith;org.
YourMySQLconnectionidis13toserverversion:4.1.20

Typehelp;orhforhelp.Typectoclearthebuffer.

mysql>usetest ←毗连到测试用的test数据库
Readingtableinformationforcompletionoftableandcolumnnames
Youcanturnoffthisfeaturetogetaquickerstartupwith-A

Databasechanged
mysql>droptabletest; ←删除数据中的表
QueryOK,0rowsaffected(0.04sec)

mysql>dropdatabasetest; ←删除测试用数据库test
QueryOK,0rowsaffected(0.01sec)

mysql>showdatabases;
+---------------+
Database
+---------------+
mysql ←确认测试用的test数据库已不存在、已被删除
+---------------+
1rowinset(0.01sec)

mysql>exit ←加入MySQL服务器
Bye
以上,我们就即是摹拟了数据库被损坏的历程。接上去,是数据库被“损坏”后,用备份举行恢复的办法。
[root@Centos~]#/bin/cp-Rf/backup/mysql/test//var/lib/mysql/ ←复制备份的数据库test到响应目次
[root@Centos~]#chown-Rmysql:mysql/var/lib/mysql/test/ ←改动数据库test的回属为mysql
[root@Centos~]#chmod700/var/lib/mysql/test/ ←改动数据库目次属性为700
[root@Centos~]#chmod660/var/lib/mysql/test/* ←改动数据库中数据的属性为660
然后,再次登录到MySQL服务器上,看是不是已乐成恢复了数据库。
[root@CentOS~]#mysql-uroot-p ←用root登录到MySQL服务器
Enterpassword: ←输出MySQL的root用户暗码
WelcometotheMySQLmonitor.Commandsendwith;org.
YourMySQLconnectionidis14toserverversion:4.1.20

Typehelp;orhforhelp.Typectoclearthebuffer.

mysql>showdatabases; ←检察以后存在的数据库
+-------------+
Database
+-------------+
mysql
test  ←确认方才被删除的test数据库已乐成被恢复返来!
+------------+
2rowsinset(0.00sec)

mysql>usetest ←毗连到test数据库
Readingtableinformationforcompletionoftableandcolumnnames
Youcanturnoffthisfeaturetogetaquickerstartupwith-A

Databasechanged
mysql>showtables; ←检察test数据库中存在的表
+-------------------+
Tables_in_test
+-------------------+
test 
+-------------------+
1rowinset(0.00sec)

mysql>select*fromtest; ←检察数据库中的内容
+------+---------------------+
numname 
+------+---------------------+
1Hello,CentOS ←确认数据表中的内容与删除前界说的“Hello,CentOS”一样!
+------+---------------------+
1rowinset(0.01sec)

mysql>exit ←加入MySQL服务器
Bye
以上了局暗示,数据库被删除后,用备份后的数据库乐成的将数据恢复到了删除前的形态。
[2]当数据库被修正后的恢复办法
数据库被修正,大概存在着多方面的缘故原由,被进侵、和响应程序存在Bug等等,这里不作具体先容。这里将只先容在数据库被修正后,假如恢复到被修正前形态的办法。
详细和下面所述的“数据库被删除后的恢复办法”相相似。这里,测试用数据库接着利用方才在后面用过的test。这里为了使方才打仗数据库的伴侣不至于了解凌乱,我们再次登录到MySQL服务器上确认一下方才创建的测试用的数据库test的相干信息。
[root@CentOS~]#mysql-uroot-p ←用root登录到MySQL服务器
Enterpassword: ←输出MySQL的root用户暗码
WelcometotheMySQLmonitor.Commandsendwith;org.
YourMySQLconnectionidis14toserverversion:4.1.20

Typehelp;orhforhelp.Typectoclearthebuffer.

mysql>showdatabases; ←检察以后存在的数据库
+-------------+
Database
+-------------+
mysql
test 
+------------+
2rowsinset(0.00sec)

mysql>usetest ←毗连到test数据库
Readingtableinformationforcompletionoftableandcolumnnames
Youcanturnoffthisfeaturetogetaquickerstartupwith-A

Databasechanged
mysql>showtables; ←检察test数据库中存在的表
+-------------------+
Tables_in_test
+-------------------+
test 
+-------------------+
1rowinset(0.00sec)

mysql>select*fromtest; ←检察数据库中的内容
+------+--------------------+
numname 
+------+--------------------+
1Hello,CentOS
+------+--------------------+
1rowinset(0.01sec)

mysql>exit ←加入MySQL服务器
Bye
然后,我们再次运转数据库备份剧本,将以后形态的数据库,再做一次备份。
[root@CentOS~]#cd ←回到剧本地点的root用户的根目次
[root@CentOS~]#./mysql-backup.sh ←运转剧本举行数据库备份
接上去,我们再次登录到MySQL服务器中,对测试用的数据库test举行一些修正,以便于测试数据恢复可否乐成。
[root@sample~]#mysql-uroot-p ←用root登录到MySQL服务器
Enterpassword: ←输出MySQL的root用户暗码
WelcometotheMySQLmonitor.Commandsendwith;org.
YourMySQLconnectionidis15toserverversion:4.1.20

Typehelp;orhforhelp.Typectoclearthebuffer.

mysql>usetest ←毗连到test数据库
Readingtableinformationforcompletionoftableandcolumnnames
Youcanturnoffthisfeaturetogetaquickerstartupwith-A

Databasechanged
mysql>updatetestsetname=Shit,Windows; ←然后将test中表的值从头界说为“Shit,Windows”(本来为“Hello,CentOS”)
QueryOK,1rowaffected(0.07sec)
Rowsmatched:1Changed:1Warnings:0

mysql>select*fromtest; ←确认test中的表被界说的值
+------+--------------------+
numname 
+------+-------------------+
1Shit,Windows ←确认已将原test数据库表中的值修正为新的值“Shit,Windows”
+------+-------------------+
1rowinset(0.00sec)

mysql>exit ←加入MySQL服务器
Bye
以上,我们就即是摹拟了数据库被改动的历程。接上去,是数据库被“改动”后,用备份举行恢复的办法。
[root@CentOS~]#/bin/cp-Rf/backup/mysql/test//var/lib/mysql/ ←复制备份的数据库test到响应目次
然后,再次登录到MySQL服务器上,看数据库是不是被恢复到了被“改动”之前的形态。
[root@CentOS~]#mysql-uroot-p ←用root登录到MySQL服务器
Enterpassword: ←输出MySQL的root用户暗码
WelcometotheMySQLmonitor.Commandsendwith;org.
YourMySQLconnectionidis16toserverversion:4.1.20

Typehelp;orhforhelp.Typectoclearthebuffer.

mysql>usetest ←毗连到test数据库
Readingtableinformationforcompletionoftableandcolumnnames
Youcanturnoffthisfeaturetogetaquickerstartupwith-A

Databasechanged
mysql>select*fromtest; ←检察数据库中的内容
+------+----------------+
numname 
+------+----------------+
1Hello,CentOS  ←确认数据表中的内容与被修正前界说的“Hello,CentOS”一样!
+------+----------------+
1rowinset(0.01sec)

mysql>exit ←加入MySQL服务器
Bye
以上了局暗示,数据库被修正后,用备份后的数据库乐成的将数据恢复到了被“改动”前的形态。
测试后…
测试完成后,将测试用过的遗留信息删除。
[root@CentOS~]#mysql-uroot-p ←用root登录到MySQL服务器
Enterpassword: ←输出MySQL的root用户暗码
WelcometotheMySQLmonitor.Commandsendwith;org.
YourMySQLconnectionidis19toserverversion:4.1.20

Typehelp;orhforhelp.Typectoclearthebuffer.

mysql>usetest ←毗连到test数据库
Readingtableinformationforcompletionoftableandcolumnnames
Youcanturnoffthisfeaturetogetaquickerstartupwith-A

Databasechanged
mysql>droptabletest; ←删除test数据库中的表
QueryOK,0rowsaffected(0.01sec)

mysql>dropdatabasetest; ←删除测试用数据库test
QueryOK,0rowsaffected(0.00sec)

mysql>showdatabases; ←检察以后存在的数据库
+-------------+
Database
+-------------+
mysql ←确认测试用数据库test不存在、已被删除
+-------------+
1rowinset(0.00sec)

mysql>exit ←加入MySQL服务器
Bye
以上先容了用我们本人创建的一段Shell剧本,经由过程mysqlhotcopy来备份数据库的办法。
关于很多团体喜好者来讲,组建服务器大概不是很思索数据被损坏和数据被损坏后的恢停工作。但不克不及不说,关于服务器来讲,数据损坏后的恢复效力也是区别专业和专业的要素之一。以是笔者倡议,在您设置好了Web服务器和MySQL服务器等等的时分,万万不要急于使用它,而要想举措在无限的(硬件、软件)前提下使它“坚如盘石”以后,再思索使用的成绩。
并且,以上先容的办法中提到的数据库主动备份剧本固然被设置为天天准时运转,但当您运转某些与MySQL相干联的程序(论坛、社区等等)时,做一些可能危及数据平安的操纵的时分,运转数据库备份剧本立即备份以后形态数据库,也长短常有匡助的,最少能够在呈现成绩后包管数据库方面的可恢复性。
客户还是可以使用DBaaS系统所能提供的所有能力。数据库云服务消除了组织对专职人员、本地数据库存储设备的需要。他们不必安装、配置和维护任何软硬件。
小女巫 该用户已被删除
9#
发表于 2015-3-23 18:19:31 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
因胸联盟 该用户已被删除
8#
发表于 2015-3-17 03:51:22 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
谁可相欹 该用户已被删除
7#
发表于 2015-3-10 00:18:25 | 只看该作者
无法深入到数据库系统层面去了解和探究
变相怪杰 该用户已被删除
6#
发表于 2015-2-28 14:49:25 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
5#
发表于 2015-2-10 01:34:44 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
小魔女 该用户已被删除
地板
发表于 2015-2-4 13:56:13 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
admin 该用户已被删除
板凳
发表于 2015-1-26 08:51:56 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-19 06:31:00 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 00:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表