mysql数据库恢复策略_MySQL 备份和恢复策略(一)

在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。本文主要对MyISAM表做备份恢复。

备份策略一:直接拷贝数据库文件(不推荐)

备份策略二:使用mysqlhotcopy备份数据库(完全备份,适合小型数据库备份)

备份策略三:使用mysqldump备份数据库(完全+增量备份,适合中型数据库备份)

备份策略四:使用主从复制机制(replication)(实现数据库实时备份)

脚本下载地址:点击下载脚本

备份策略一、直接拷贝数据库文件

直接拷贝数据文件最为直接、快速、方便,但缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在备份文件前,执行以下 SQL 语句:

FLUSH TABLES WITH READ LOCK;

也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。

备份策略二、使用mysqlhotcopy备份数据库

mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上,并且mysqlhotcopy 只能用于备份 MyISAM表。

本备份策略适合于小型数据库的备份,数据量不大,可以采用mysqlhotcopy程序每天进行一次完全备份。

备份策略布置:

(1)、安装DBD-mysql perl模块,支持mysqlhotcopy脚本连接到MySQL数据库。

shell> tar -xzvf  DBD-mysql-4.005.tar.gz

shell> cd DBD-mysql-4.005

shell> unset LANG

shell> perl Makefile.PL -mysql_config=/usr/local/mysql/bin/mysql_config -testuser=root -testpassword=UserPWD

shell> make

shell> make test

shell> make install

(2)、设置crontab任务,每天执行备份脚本

shell> crontab -e

0 3 * * * /root/MySQLBackup/mysqlbackup.sh >/dev/null 2>&1

每天凌晨3:00执行备份脚本。

mysqlbackup.sh注释:

#!/bin/sh

# Name:mysqlbackup.sh

# PS:MySQL DataBase Backup,Use mysqlhotcopy script.

# Write by:i.Stone

# Last Modify:2007-11-15

#

# 定义变量,请根据具体情况修改

# 定义脚本所在目录

scriptsDir=`pwd`

# 数据库的数据目录

dataDir=/usr/local/mysql/data/

# 数据备份目录

tmpBackupDir=/tmp/tmpbackup/

backupDir=/tmp/mysqlbackup/

# 用来备份数据库的用户名和密码

mysqlUser=root

mysqlPWD=111111

# 定义eMail地址

eMail=alter@somode.com

# 如果临时备份目录存在,清空它,如果不存在则创建它

if [[ -e $tmpBackupDir ]]; then

rm -rf $tmpBackupDir/*

else

mkdir $tmpBackupDir

fi

# 如果备份目录不存在则创建它

if [[ ! -e $backupDir ]];then

mkdir $backupDir

fi

# 清空MySQLBackup.log

if [[ -s MySQLBackup.log ]]; then

cat /dev/null >MySQLBackup.log

fi

# 得到数据库备份列表,在此可以过滤不想备份的数据库

for databases in `find $dataDir -type d | \

sed -e “s/\/usr\/local\/mysql\/data\///” | \

sed -e “s/test//”`; do

if [[ $databases == "" ]]; then

continue

else

# 备份数据库

/usr/local/mysql/bin/mysqlhotcopy –user=$mysqlUser –password=$mysqlPWD -q “$databases” $tmpBackupDir

dateTime=`date “+%Y.%m.%d %H:%M:%S”`

echo “$dateTime Database:$databases backup success!” >>MySQLBackup.log

fi

done

# 压缩备份文件

date=`date -I`

cd $tmpBackupDir

tar czf $backupDir/mysql-$date.tar.gz ./

# 发送邮件通知

if [[ -s MySQLBackup.log ]]; then

cat MySQLBackup.log | mail -s “MySQL Backup” $eMail

fi

# 使用smbclientmv.sh脚本上传数据库备份到备份服务器

# $scriptsDir/smbclientmv.sh

smbclientmv.sh注释

#!/bin/sh

# Name:smbclientmv.sh

# PS:Move the data to Backup Server.

# Write by:i.Stone

# Last Modify:2007-11-15

#

# 定义变量

# 备份服务器名

BackupServer=”BackupServerName”

# 共享文件夹名

BackupShare=”ShareName”

# 备份服务器的访问用户名和密码

BackupUser=”SMBUser”

BackupPW=”SMBPassword”

# 定义备份目录

BackupDir=/tmp/mysqlbackup

date=`date -I`

# Move the data to BackupServer

smbclient //$BackupServer/$BackupShare \

$BackupPW -d0 -W WORKGROUP -U $BackupUser \

-c “put $BackupDir/mysql-$date.tar.gz \

mysql-$date.tar.gz”

# Delete temp files

rm -f $BackupDir/mysql-$date.tar.gz

(3)、恢复数据库到备份时的状态

mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:

shell> cp -rf db_name /usr/local/mysql/data/

shell> chown -R mysql:mysql /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)

本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

laravel方法汇总详解

1.whereRaw() 用原生的SQL语句来查询,whereRaw(select * from user) 就和 User::all()方法是一样的效果 2.whereBetween() 查询时间格式 whereBetween(problem_date, [2016-10-05 19:00:00, 2016-10-05 20:35:10]) 这种可以查到,时间格式类似这种, 查询日…

输入输出优化

被各种变态的出题者出的数据坑到了这里/sad 1 int read() 2 { 3 int num0; char chgetchar(); 4 while(ch<0&&ch>9) chgetchar(); //过滤前面非数字字符 5 while(ch>0&&ch<9) {num*10;numch-0;chgetchar();} 6 return num…

mysql整数索引没用到_MYSQL 索引无效和索引有效的详细介绍

1、WHERE字句的查询条件里有不等于号(WHERE column!...)&#xff0c;MYSQL将无法使用索引2、类似地&#xff0c;如果WHERE字句的查询条件里使用了函数(如&#xff1a;WHERE DAY(column)...)&#xff0c;MYSQL将无法使用索引3、在JOIN操作中(需要从多个数据表提取数据时)&#x…

Qt词典搜索

Qt词典搜索 采用阿凡达数据-API数据接口及爱词霸API数据接口实现词典搜索功能&#xff0c;实例字符串搜索接口分别为&#xff1a;中文词组采用“词典”&#xff0c;中文单个字采用“中华字典”&#xff0c;英文或其他字符采用“爱词霸”&#xff1b; 对应的API接口&#xff1a;…

mysql8.0.13 rpm_Centos7 安装mysql 8.0.13(rpm)的教程详解

yum or rpm&#xff1f;yum安装方式很方便&#xff0c;但是下载mysql的时候从官网下载&#xff0c;速度较慢。rpm安装方式可以从国内镜像下载mysql的rpm包&#xff0c;比较快。rpm也适合离线安装。环境说明•操作系统&#xff1a;Centos7.4 (CentOS-7-x86_64-Minimal-1804.iso)…

如何参与一个GitHub开源项目

Github作为开源项目的著名托管地&#xff0c;可谓无人不知&#xff0c;越来越多的个人和公司纷纷加入到Github的大家族里来&#xff0c;为开源尽一份绵薄之力。对于个人来讲&#xff0c;你把自己的项目托管到Github上并不表示你参与了Github开源项目&#xff0c;只能说你开源了…

mysql数据库的多实例_MySQL数据库多实例应用实战 - 橙子柠檬's Blog

本文采用的是/data目录作为mysql多实例总的根目录&#xff0c;然后规划不同 的MySQL实例端口号来作为/data下面的二级目录&#xff0c;不同的端口号就是不同实例目录&#xff0c;以区别不同的实例&#xff0c;二级目录下包含mysql数据文件&#xff0c;配置文件以及启动文件的目…

微信企业号开发[二]——获取用户信息

注&#xff1a;文中绿色部分为摘自微信官方文档 在《微信企业号开发[一]——创建应用》介绍了如何创建应用&#xff0c;但是当用户点击应用跳转到我们设定的URL时&#xff0c;其实并没有带上用户的任何信息&#xff0c;为了获取用户信息&#xff0c;我们需要借助微信提供的OAut…

mysql全套基础知识_Mysql基础知识整理

MySQL的查询过程 (一条sql语句在MySQL中如何执行)&#xff1a;客户端请求 ---> 连接器(验证用户身份&#xff0c;给予权限) ---> 查询缓存(存在缓存则直接返回&#xff0c;不存在则执行后续操作) ---> 分析器(对SQL进行词法分析和语法分析操作) ---> 优化器(主要对…

渗透思维导图

转载于:https://www.cnblogs.com/DonAndy/p/5914747.html

mysql数据库用户的创建_mysql创建用户及数据库

登陆mysql[rootdn210120 conf]# mysql -uroot创建用户及密码mysql> grant usage on *.* to hive14localhost identified by 123456 with grant option;创建数据库mysql> create database hive14 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;赋予新用户操作新数据…

【计算机视觉】论文笔记:Ten years of pedestrian detection, what have we learned?

最近正在研究行人检测&#xff0c;学习了一篇2014年发表在ECCV上的一篇综述性的文章&#xff0c;是对行人检测过去十年的一个回顾&#xff0c;从dataset&#xff0c;main approaches的角度分析了近10年的40多篇论文提出的方法&#xff0c;发现有三种方法&#xff08;DPM变体&am…

mysql命令导入导出数据库_MYSQL命令行导入导出数据库详解

Mysql命令行导入数据库&#xff1a;1&#xff0c;将要导入的.sql文件移至bin文件下&#xff0c;这样的路径比较方便2&#xff0c;同上面导出的第1步3&#xff0c;进入MySQL&#xff1a;mysql -u 用户名 -p如我输入的命令行:mysql -u root -p (输入同样后会让你输入MySQL的密码…

02-合并frame

进入IJKMediaPlayer工程--->--->选择release--->选择6s或者其他模拟器&#xff0c;Commandb编译--->选择真机版本&#xff0c;Commandb编译&#xff0c;查看finder&#xff0c;生成真机和模拟器两个版本的frameWork--->找到这个文件----> 真机和模拟器的IJKm…

recover 没有捕获异常_defer + recover 捕获所有异常

1)说明go的异常捕获需要延迟函数defer recover实现,在函数返回前,就可以捕获到, 这样其实比java的try catch更加优雅一点&#xff1b;比如: web服务器程序崩溃前,需要做一些清理,那么就可以这样搞定&#xff1b;还可以在捕获时&#xff0c;打印一些信息,继续panic,让错误往上抛…

sqoop从mysql导入hdfs_3.使用sqoop从mysql 导入数据到hdfs

使用sqoop从mysql 导入数据到hdfs注意&#xff1a;需要将mysql的jdbc驱动包放到lib目录下在conf目录中&#xff0c;执行cp sqoop-env-template.sh sqoop-env.sh#修改 ~/.bashrc&#xff0c;增加export HADOOP_CLASSPATH/opt/hadoop-2.6.0-cdh5.13.0/lib:/$HIVE_HOME/lib/*sourc…

JAVA微信开发:[17]如何获取所有关注用户

该方法获取所有关注公共账号的微信用户的openId集合&#xff0c; 再通过openId集合既可以获取所有的用户的信息。 /** * 获取所有的关注用户 * * return */ public List<String> getAllWeiXinUser() { GetExistAccessToken getExistAccessToken GetExistAccessToken…

JS中this的四种用法

1.在一般函数方法中使用 this 指代全局对象 function test(){this.x 1;alert(this.x);}test(); // 12.作为对象方法调用&#xff0c;this 指代上级对象 function test(){alert(this.x); } var o {}; o.x 1; o.m test; o.m(); // 1 3.作为构造函数调用&#xff0c;this 指代…

mysql lib 5.5.28_mysql5.5.28在Linux下的安装

mysql5.5.28在Linux下的安装1. 下载mysql2. 解压假如tar包在/home/zdw/software目录下#tar -xvf mysql-5.5.28-linux2.6-i686.tar.gz3. 移动到/usr/local/mysql#mv mysql-5.5.28-linux2.6-i686 /usr/local/添加快捷方式mysql指向mysql-5.5.28-linux2.6-i686#ln -s mysql-5.5.28…

mysql与缓存脏读_MySQL 事务的隔离级别问题 之 脏读

1. 脏读所谓的脏读就是指一个事务读取了另一个事务未提取的数据。试想一下&#xff1a;a账户要给b账户100元购买商品&#xff0c;如果a账户开启一个事务&#xff0c;执行下面的update语句做了如下转账的工作&#xff1a;update account set moneymoney-100 where namea;update …