MySQL自动备份及灾难恢复

[转自51cto]http://bbs.51cto.com/thread-820965-1.html

?

? 当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态,使得数据的损失达到最小。

或者说,仅仅是数据库服务器的建立,只能说明它能做些什么,并不代表它能稳定的做些什么。灾难恢复的效率及全面性,也是系统的稳定性的一个准因素,尤其对于一个服务器系统。

这一节,介绍数据库自动备份以及数据库被破坏后的恢复的方法。在这里,我们使用mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备份,并且,让整个数据自动备份与数据恢复过程都基于Shell。

建立数据库备份所需条件

[1] 建立自动备份脚本

在这里,为了使数据库备份和恢复的符合我们的实际要求,用一段符合要求的Shell脚本来实现整个备份过程的自动化。

[[email protected] ~]# vi mysql-backup.sh  ← 建立数据库自动备份脚本,如下:

#声明SHELL 和执行路径

#!/bin/bash

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

# 设定备份的目录

BACKDIR=/backup/mysql

# 设置ROOT的密码

ROOTPASS=********  ← 将星号替换成MySQL的root密码

# 重做备份目录

rm -rf $BACKDIR

mkdir -p $BACKDIR

# 获得数据库名字

DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`?#tr - translate or delete characters[ -d, --delete]

# 备份数据库

for dbname in $DBLIST

do

mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy

done

[2] 运行数据库自动备份脚本

[[email protected] ~]# chmod 700 mysql-backup.sh  ← 改变脚本属性,让其只能让root用户执行

[[email protected] ~]# https://blog.csdn.net/junli_chen/article/details/mysql-backup.sh   ← 运行脚本

[[email protected] ~]# ls -l /backup/mysql/   ← 确认一下是否备份成功

total 8

drwxr-x--- 2 mysql mysql 4096 Sep 1 16:54 mysql   ← 已成功备份到/backup/mysql目录中

[3] 让数据库备份脚本每天自动运行

[[email protected] ~]# crontab -e  ← 编辑自动运行规则(然后会出现编辑窗口,操作同vi)

00 03 * * * /root/mysql-backup.sh   ← 添加这一行到文件中,让数据库备份每天凌晨3点进行

测试自动备份正常运转与否(备份恢复的方法)这里,以通过实际操作的过程来介绍问题出现后的恢复方法。

[1] 当数据库被删除后的恢复方法

首先建立一个测试用的数据库。

[[email protected] ~]# mysql -u root -p   ← 用root登录到MySQL服务器

Enter password:  ← 输入MySQL的root用户密码

#进入下面的BANNER

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 8 to server version: 4.1.20

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer.

#BANNER结束

mysql> create database test;  ← 建立一个测试用的数据库test

Query OK, 1 row affected (0.00 sec)

mysql> use test  ← 连接到这个数据库

Database changed

mysql> create table test(num int, name varchar(50));  ← 在数据库中建立一个表

Query OK, 0 rows affected (0.07 sec)

mysql> insert into test values(1,‘Hello,BSD‘);  ← 插入一个值到这个表(这里以“Hello,BSD”为例)

Query OK, 1 row affected (0.02 sec)

mysql> select * from test;  ← 查看数据库中的内容

+------+-------------+

| num? | name   |

+------+-------------+

|1   | Hello,BSD |  ← 确认刚刚插入到表中的值的存在

+------+-------------+

1 row in set (0.01 sec)

mysql> exit ? ← 退出MySQL服务器

Bye

然后,运行刚才建立的数据库备份脚本,备份刚刚建立的测试用的数据库。

[[email protected] ~]# cd ? ← 回到脚本所在的root用户的根目录

[[email protected] ~]# https://blog.csdn.net/junli_chen/article/details/mysql-backup.sh  ← 运行脚本进行数据库备份

接下来,我们再次登录到MySQL服务器中,删除刚刚建立的测试用的数据库test,以便于测试数据恢复能否成功。

[[email protected] ~]# mysql -u root -p  ← 用root登录到MySQL服务器

Enter password: ? ← 输入MySQL的root用户密码

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 13 to server version: 4.1.20

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer.

mysql> use test  ← 连接到测试用的test数据库

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> drop table test; ? ← 删除数据中的表

Query OK, 0 rows affected (0.04 sec)

mysql> drop database test; ? ← 删除测试用数据库test

Query OK, 0 rows affected (0.01 sec)

mysql> show databases;

+-------------+

| Database |

+-------------+

| mysql   |  ← 确认测试用的test数据库已不存在、已被删除

+-------------+

1 row in set (0.01 sec)

mysql> exit  ← 退出MySQL服务器

Bye

以上,我们就等于模拟了数据库被破坏的过程。接下来,是数据库被“破坏”后,用备份进行恢复的方法。

[[email protected] ~]# /bin/cp -Rf /backup/mysql/test/ /var/lib/mysql/  ← 复制备份的数据库test到相应目录

[[email protected] ~]# chown -R mysql:mysql /var/lib/mysql/test/  ← 改变数据库test的归属为mysql

[[email protected] ~]# chmod 700 /var/lib/mysql/test/  ← 改变数据库目录属性为700

[[email protected] ~]# chmod 660 /var/lib/mysql/testbin/bashyourpath...

时间: 2024-10-12 00:07:20

MySQL自动备份及灾难恢复的相关文章

Mysql自动备份

Mysql自动备份 批处理命令: set"Ymd=%date:~,4%%date:~5,2%%date:~8,2%" set"hMs=%time:~,2%%time:~3,2%%time:~6,2%" mysqldump-uroot --password=password weixin> D:\mysql_back\weixin_%Ymd%_%hMs%.sql 命令解释 要用mysqldump需要设置环境变量 Mysqldump.exe程序在mysql安装目录

Windows下MYSQL自动备份批处理

windows下MYSQL自动备份批处理 2011-05-04 09:16:45|  分类: mysql|举报|字号 订阅 按系统时间进行备份 注意mysql安装路径中如果有空格.就要把,.bat文件拷到相应目录下面. 1.按系统时间进行直接拷贝 net stop mysqlxcopy data\*.* d:\bonadb\%date:~0,10%\ /y /s/enet start mysql 2.用压缩软件,压缩备份 net stop mysqlc:\progra~1\winrar\winr

java实现的MySQL自动备份和还原(struts2+Hibernate)---兼容 window+Linux

相信很多朋友都经历过数据库出问题的情况,我也同样(见我的上一篇博文:phpmyadmin误删表后的恢复过程(心惊胆跳啊)   ).如果数据很大或者很重要,那么恢复起来是相当困难的,所以我们在做一个相对完善的系统时,数据库的备份/还原功能是必不可少的.本文将在javaEE环境下实现MySQL的自动备份/还原,使用了struts2和hibernate框架,MySQL版本是5.1.16. 下图展示的是web application的执行流程, Timer是在一个随着application启动而启动的s

linux下的mysql自动备份shell

#!/bin/bash # mysql 的备份脚本 # 备份原理: # 1 # 使用列举出所有的库; # 2 # 使用每个库,列举出每张表,除了指定忽略的库; # 3 # 使用mysqldump 导出每一张表到文件:主机名/年月日/库/表.mysqldump.sql # 4 # 验证每张表的sql文件是否包含完成标志; # 5 # 压缩每个sql文件并删除本sql文件 # 6 # 强制删除超过x天的备份文件夹全部文件 # 7 # 发送处理日志到指定email # 8 # 请配合同步工具多处服务器

Linux下定时任务实现mysql自动备份并上传远程ftp

Linux下定时任务实现mysql自动备份并上传远程ftp 1.创建保存备份文件的目录:/home/mysql_datacd /homemkdir mysql_data2.创建备份脚本文件:/home/mysql_data/mysql_databak.shcd /homecd  mysql_datatouch mysql_databak.shvim  mysql_databak.sh #!/bin/sh DUMP=/usr/bin/mysqldump#mysqldump备份文件执行路径 OUT_

mysql 自动备份和nginx自动安装脚本

一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 BAKDIR=/data/backup/mysql/`date +%Y-%m-%d` MYSQLDB=webapp MYSQLPW=backup MYSQLUSR=backup #must use root user run scripts 必须使用root用户运行,$UID为系统变量 if [

MYSQL自动备份!

#cd /www #mkdir mysqlbackup #vi mysqlautobackup.sh 这个mysqlautobackup.sh的文件里写入以下内容: filename=`date +%Y%m%d` mysql_bin_dir/mysqldump --opt datename -u dateuser -pdatepassword | gzip > /www/mysqlbackup/datename$filename.gz 保存退出,然后把这个文件赋予可执行的权限: #chmod 7

mysql自动备份脚本及异地定时FTP

分享个自己写的mysql自动备份脚本.定时执行设置及windows自动FTP,请大家指教. 前提环境:mysql数据库服务器开启vsftpd,并配置合适帐号以便能被内网存储服务器FTP 第一步:编写mysql自动执行脚本 #!/bin/sh # mysql_db_backup.sh: backup mysql databases. # # Last updated: Wed Nov  9 07:01:01 CST 2011 # ----------------------------------

mysql自动备份软件 1.0 绿色版

mysql自动备份工具是一款能够为mysql用户打造的自动备份软件.mysql自动备份工具界面简洁,操作简单,用户设定好相应数据后就能自动备份mysql中的数据了,是一款非常实用的小工具,有需要的朋友欢迎来jz5u下载软件. 目前本软件功能单一只支持自动定时备份指定my sql数据库,意思就是说只可以单机使用!备份文件也与sql在同一台机器上,很多服务器管理员需要用到这类的软件哦!可以置备份目录.可以设置备份文件.可以设置时间等等…… (命令在DOS的\mysql\bin目录下执行) mysql