Centos下mysql数据库备份与恢复的方法

一、mysqldump工具备份

mysqldump由于是mysql自带的备份工具,所以也是最常用的mysql数据库的备份工具。支持基于InnoDB的热备份。但由于是逻辑备份,所以速度不是很快,适合备份数据量比较小的场景。

mysqldump完全备份+二进制日志 —>实现时间点恢复

温备:

在使用MyISAM引擎中,只能使用温备份,这时候要防止数据的写入,所以先加上读锁

这时候可以进入数据库手动加读锁。这样比较麻烦,在mysqldump工具中直接有一个加锁的选项

mysqldump --databases mydatabase --lock-all-tables --flush-logs> /tmp/backup-`date +%F-%H-%M`.sql

如果是针对某张表备份,只要在数据库名称后面加上表名称就行了

这里注意,要实现时间点的恢复,加上--flush-logs选项,在使用备份文件恢复后,然后再基于二进制日志进行时间点的恢复

时间点的恢复方法

mysqlbinlog mysql-bin.000000x > /tmp/PointTime.sql

然后用mysql命令导入这个sql脚本就行了

热备:
如果使用的是InnoDB引擎,就不必进行对数据库加锁的操作,加一个选项既可以进行热备份:--single-transaction
mysqldump --databases mydb --single-transaction  --flush-logs --master-data=2 > /tmp/backup-`date +%F-%H-%M`.sql

注意点
恢复的时刻关闭二进制日志
mysql>set sql_log_bin=0;

例子:

# vim /usr/work/newsbackup.sh
# //填写以下内容
#!/bin/bash
# Program
# use mysqldump to Fully backup  news database data per week!
#History(版本)
#  2015-07-27 first
#path(定义目录)
BakDir=/usr/work/mysql/backup
Days=7  #DAYS=7代表删除7天前的备份,即只保留最近7天的备份
DelDate=` date -d -7day +%Y%m%d `   #删除ftp服务器空间7天前的备份
echo "You are in backup dir"
FileDate=$(date +%Y%m%d).sql.gz
echo $FileDate
cd $BakDir
File=$Date.sql
#简单的备份
#mysqldump -u root news > $FileDate
#如果使用的是InnoDB引擎,就不必进行对数据库加锁的操作,加一个选项既可以进行热备份:--single-transaction
#mysqldump -u root news  --single-transaction >$FileDate
#对备份的数据继续压缩
mysqldump -u root news  --single-transaction |gzip >/$BakDir/$FileDate
echo "Your database backup successfully completed"
#压缩有的数据进行传
echo FTP to FtpServer
ftp -ivn << EOF
#打开服务器连接
open 192.168.1.125
#用户 密码
user administrator zzf
#打开路径
cd   newsbackup
#放入文件
put  $FileDate
#把服务上7天前的数据进行删除
delete $DelDate.sql.tz $DelDate.sql.tz
#退出ftp服务器
bye
EOF

echo  delete $Days days ago files(删除ftp服务器上7天前的文件)
cd $BakDir

#删除7天前的备份文件(注意:{} \;中间有空格)
find $BakDir/ "*.sql.gz" -mtime +$Days -exec rm {} \;

 

二、基于LVM快照备份

在物理备份中 ,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令打包。但这些只能进行冷备份
不同的存储引擎能备份的级别也不一样,MyISAM能备份到表级别,而InnoDB不开启每表一文件的话就只能备份整个数据库。

下面就介绍下使用LVM的快照功能进行备份
为了安全 首先在数据库上施加读锁

mysql>FLUSH TABLES WITH READ LOCK;

刷新一下二进制日志,便于做时间点恢复

mysql>FLUSH LOGS;

然后创建快照卷

lvcreate –L 1G –s –n data-snap –p –r /dev/myvg/mydata

最后进入数据库释放读锁

UNLOCK TABLES;

挂载快照卷进行备份

mount –r /dev/myvg/data-snap /mnt/snap

然后对/mnt/snap下的文件进行打包备份
还原的时候,关闭mysqld,然后备份二进制日志后将原来备份的文件还原进去,然后通过二进制日志还原到出错的时间点(通过二进制还原时间点的时候不要忘了暂时关闭二进制日志)

时间: 2024-08-07 02:23:16

Centos下mysql数据库备份与恢复的方法的相关文章

centos下mysql 数据库安装、调试

博主是一个linux的初学者,决定记录学习过程中的点滴,当做一个成长记录也好,当做后来人学习的参考也罢,总之,博客就在那里,我们各取所需,只是不要让他孤独就好. 首先,持久化数据是一个程序必备的模块,恰逢博主的项目中也需要在centos操作系统上部署,所以就以安装mysql数据库开始吧.可能你觉得内容比较简单,但无所谓吧,会者谓之简单:不会者谓之难.博主只求用最简单的描述,满足“不会者”的好学. 主要分为两种方式,一种是下载安装包,然后安装:一种是通过yum命令.博主觉得通过yum命令比较简单,

CentOS下MySQL数据库安装

前辈们总是说,要边学边记录,要总结.所以,开始把每天学到的内容一点一点记录. 复杂的理论不懂,只会目前安装,安好后就开始玩咯! 1.在官网下载相应的rpm安装包 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 比如:我只下载了这三个. 2.鄙人就用rpm命令安装(相对较熟悉) 其实,这是应该是第3步 #rpm -ivh MySQL-client-5.6.19-1.el6.i686.rpm #rpm -ivh MySQL-d

CentOS下MYSQL数据库的安装

关于在Centos系统下安装MYSQL数据库,网络上资料有很多,在此主要感谢该文章的博主:http://www.cnblogs.com/zhoulf/archive/2013/01/25/zhoulf.html,因为相对来说,该篇文章具有很强的操作性.此文将在汇集众多资料的基础上,记录本人安装MYSQL的全过程. 一.配置环境与软件版本: 1.Centos版本:6.3版32位系统: 2.CMake版本:cmake-2.8.4.tar.gz: 3.Mysql版本:mysql-5.5.11.tar.

linux centos下mysql数据库的主从复制环境搭建

有两台MySQL数据库服务器Master和slave,Master为主服务器,slave为从服务器,初始状态时,Master和slave中的数据信息相同,当Master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的. 原理图如下: 简单来说,mysql的主从复制的原理就是slave把master上面执行的 update,insert这些会使数据发生改变的sql语句从master上面同步过来,然后在自己的机器上再执行一遍,那么这两台数

CentOS下mysql数据库常用命令总结

mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆mysql服务器 mysql -uroot -p -h192.168.137.10 -P3306 3.查询数据库 show databases; 4.进入某个数据库 use databasename; 5.列出数据库中的表 show tables; 6.查看某个表全部字段 desc slow_log

CentOS下MySQL数据库服务器的构建方法

用root登陆,安装mysql yum -y install mysql-server  ← 安装MySQLSetting up Install Process yum -y install php-mysql  ← 安装php-mysqlSetting up Install Process 然后,配置MySQL http://www.91ri.org/2835.html

Linux环境下mysql数据库导入导出方法

导出整个数据库中的所有数据 1.在linux命令行下输入: mysqldump -u userName -p  dabaseName  > fileName.sql fileName.sql最好加上路径名 导出数据库中的某个表的数据 mysqldump -u userName -p  dabaseName tableName > fileName.sql 导出整个数据库中的所有的表结构 在linux命令行下输入: mysqldump -u userName -p -d dabaseName  

CentOS下mysql数据库data目录迁移

公司新上线一个资讯网站,独立主机,raid5,lamp架构.由于资讯网是面向小行业,初步估计一两年内访问量压力不大,故,在做服务器系统搭建的时候,只是简单分出一个独立的data区作为数据库和网站程序的专区,其他按照linux的默认分区.apache,mysql,php均使用yum安装(也尝试过独立编译安装,但现实使用中,发现不如yum方便快捷,当然如果是大型应用型网站,估计就不是简单的yum了) 由于yum安装mysql的时候,数据库的data目录默认是在/var/lib下,出于数据安全性的考虑

CentOS下mysql数据库data目录迁移和配置优化

目录迁移 关闭数据库服务 service mysqld stop 复制数据库 mv /var/lib/mysql /data/mysql # 或者使用cp -a复制 # 这两个命令都会带权限到新目录去 修改配置文件 /etc/my.cnf [mysqld] #datadir=/var/lib/mysql ------原系统默认路径 datadir=/data/mysql ------现有路径 #socket=/var/lib/mysql/mysql.sock ------原socket路径现 s