多种方法备份Mysql数据库

前言:Mysql数据库的备份是重中之重,在生产过程中,数据库会因硬件故障,软件故障,黑客攻击,误操作等造成数据丢失,但经过精密的备份,完全能把数据恢复过来.

一,备份工具

这里介绍几种常用的备份方式

cp:物理备份工具, 适用于所有的存储引擎, 冷备、完全备份、部分备份

mysqldump:逻辑备份工具, 适用于所有的存储引擎, 支持温备、完全备份、部分备份、对于InnoDB存储引擎支持热备

xtrabackup:一款非常强大的InnoDB/XtraDB热备工具, 支持完全备份、增量备份,

二,cp备份与恢复

先查看数据,我们用test库里的student表实验

mysql> select * from test.student;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

拷贝mysql数据到指定目录

mkdir  /backup
cp -a /var/lib/mysql/*  /backup

模拟丢失数据,删除mysql数据

rm -rf /var/lib/mysql/*

重启数据库,发现数据丢失(这里是yum安装能直接重启数据库,如果是编译安装还需要初始化)

service  mysqld restart

mysql> select * from test.student;
ERROR 1146 (42S02): Table ‘test.student‘ doesn‘t exist
mysql>

把备份的数据还原到数据目录

cp -a /backup/*  /var/lib/mysql/

登录数据库,发现数据已经还原回来了

mysql> select * from test.student;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

mysql>

三,mysqldump备份与恢复

先查看数据,我们用test库里的student表实验

mysql> select * from test.student;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
|    2 | b    |
+------+------+
2 rows in set (0.00 sec)

修改my.cnf,添加log_bin,重启数据库

vim /etc/my.cnf
[mysqld]
log_bin=mysql-bin

service  mysqld  restart

利用Mysqldump备份数据,及参数说明

mysqldump  -uroot   -A  --events   --master-data=2  --single-transaction   >/opt/all.sql
-A  全备,恢复时不需要创建库
--events  备份时间调度器
--master-data  记录时刻点
--single-transaction 锁表备份

插入新的数据

mysql> use  test;
mysql> insert into student values(3,‘c‘);
Query OK, 1 row affected (0.00 sec)

mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
|    2 | b    |
|    3 | c    |
+------+------+
3 rows in set (0.00 sec)

模拟数据丢失,误操作

mysql> drop database test;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.00 sec)

开始恢复,利用mysqldump的全备加上增量备份

1,关闭日志记录

set  global  sql_log_bin=0;

2,恢复全备,检查数据情况

mysql -uroot < /opt/all.sql
mysql> select * from test.student;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
|    2 | b    |
+------+------+
2 rows in set (0.00 sec)

3,利用时刻点恢复增量恢复,查看/opt/all.sql的开始时刻点,在文件里有类似如下字符串

-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000018‘, MASTER_LOG_POS=705

在看误操作的时刻点

mysqlbinlog  /var/lib/mysql/mysql-bin.000018 
# at 869
#161102 18:36:09 server id 1  end_log_pos 896 	Xid = 4088
COMMIT/*!*/;
# at 896
#161102 18:36:25 server id 1  end_log_pos 977 	Query	thread_id=41	exec_time=0	error_code=0
SET TIMESTAMP=1478082985/*!*/;
drop database test

根据开始时刻点和结束时刻点恢复

mysqlbinlog  /var/lib/mysql/mysql-bin.000018 --start-position=705 --stop-position=896 | mysql -uroot

4,恢复完成,查看数据

mysql> select * from test.student;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
|    2 | b    |
|    3 | c    |
+------+------+
3 rows in set (0.00 sec)

四,xtrabackup备份与恢复之全量

1,下载工具,幷安装

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.4/binary/redhat/6/x86_64/percona-xtrabackup-2.3.4-1.el6.x86_64.rpm
yum install percona-xtrabackup-2.3.4-1.el6.x86_64.rpm

2,创建备份目录,幷备份

mkdir /exbackup
innobackupex --user=root /exbackup/
innobackupex --apply-log /exbackup/2016-11-02_20-14-08/

3,查看备份文件

[[email protected] 3306]# ll /exbackup/2016-11-02_20-14-08/
总用量 30760
drwx------. 2 root root     4096 11月  2 20:49 2016-11-02_20-49-56
-rw-r-----. 1 root root      386 11月  2 20:14 backup-my.cnf
-rw-r-----. 1 root root 18874368 11月  2 20:21 ibdata1
-rw-r--r--. 1 root root  5242880 11月  2 20:21 ib_logfile0
-rw-r--r--. 1 root root  5242880 11月  2 20:21 ib_logfile1
drwx------. 2 root root     4096 11月  2 20:14 mysql
drwx------. 2 root root     4096 11月  2 20:14 oldboy
drwx------. 2 root root     4096 11月  2 20:14 performance_schema
drwx------. 2 root root     4096 11月  2 20:14 test
-rw-r-----. 1 root root       21 11月  2 20:14 xtrabackup_binlog_info
-rw-r--r--. 1 root root       23 11月  2 20:21 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root      113 11月  2 20:21 xtrabackup_checkpoints
-rw-r-----. 1 root root      511 11月  2 20:14 xtrabackup_info
-rw-r-----. 1 root root  2097152 11月  2 20:21 xtrabackup_logfile

4,模拟数据丢失,进行恢复

rm -rf /data/*
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)

5,利用备份文件,恢复数据,重启数据库,查看数据

innobackupex --copy-back /exbackup/2016-11-02_20-14-08/ 
chown -R  mysql:mysql /data/*
service mysqld restart

mysql> show databases;
+------------------------------+
| Database                     |
+------------------------------+
| information_schema           |
| #mysql50#2016-11-02_20-49-56 |
| mysql                        |
| oldboy                       |
| performance_schema           |
| test                         |
+------------------------------+
6 rows in set (0.00 sec)

五,xtrabackup备份与恢复之增量

1,上面我们已经做了全备,我们新添数据做增量备份实验

mysql> show databases;
+------------------------------+
| Database                     |
+------------------------------+
| information_schema           |
| #mysql50#2016-11-02_20-49-56 |
| mysql                        |
| oldboy                       |
| performance_schema           |
| t1                           |
| t2                           |
| test                         |
+------------------------------+

2,进行增量备份,注意:下一次增量 --incremental-basedir=最近的增量备份路径

 innobackupex --incremental /exbackup/ --incremental-basedir=/exbackup/2016-11-02_20-14-08/
 innobackupex --apply-log --redo-only /exbackup/2016-11-02_20-14-08/ 
 innobackupex --apply-log --redo-only /exbackup/2016-11-02_20-14-08/ --incremental-basedir=/exbackup/2016-11-02_21-31-50/

3,查看增量备份

[[email protected] exbackup]# ll /exbackup/
总用量 8
drwx------. 7 root root 4096 11月  2 20:49 2016-11-02_20-14-08
drwx------. 9 root root 4096 11月  2 21:32 2016-11-02_21-31-50

4,模拟数据丢失,进行恢复

rm -rf /data/*
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)

5,利用备份文件,恢复数据,重启数据库,查看数据

innobackupex --copy-back /exbackup/2016-11-02_20-14-08/  #直接通过全量进行增量的恢复
chown -R  mysql:mysql /data/*
service mysqld restart

mysql> show databases;
+------------------------------+
| Database                     |
+------------------------------+
| information_schema           |
| #mysql50#2016-11-02_20-49-56 |
| mysql                        |
| oldboy                       |
| performance_schema           |
| t1                           |
| t2                           |
| test                         |
+------------------------------+
8 rows in set (0.01 sec)

六,xtrabackup备份与恢复 多实例

1,步骤基本一样,只是多加一些参数

innobackupex   --defaults-file=/data/3306/my.cnf --user=root  /exbackup
innobackupex   --apply-log /exbackup/2016-11-02_20-14-08/ 
innobackupex   --defaults-file=/data/3306/my.cnf --copy-back /exbackup/2016-11-02_20-14-08/

2,增量

innobackupex   --defaults-file=/data/3306/my.cnf --user=root  --incremental /exbackup/ --incremental-basedir=/exbackup/2016-11-02_20-14-08/
innobackupex   --apply-log --redo-only /exbackup/2016-11-02_20-14-08/  
innobackupex   --apply-log --redo-only /exbackup/2016-11-02_20-14-08/ --incremental-dir=/exbackup/2016-11-02_21-31-50/
innobackupex   --defaults-file=/data/3306/my.cnf --copy-back /exbackup/2016-11-02_20-14-08/

总结:只是多了配置文件的参数,其他步骤完全一致,这里就不花篇幅这些操作了,大家可以进行测试,本文没有过多的原理解释,全是干货操作,想了解这些备份方法的原理,参数的网友就见谅了

时间: 2024-10-16 04:47:54

多种方法备份Mysql数据库的相关文章

Linux 每天自动备份mysql数据库的方法

Linux 每天自动备份mysql数据库的方法 作者: 字体:[增加 减小] 类型:转载 linux下为了安全有时候需要自动备份mysql数据库,下面是具体的实现步骤. /usr/bin为mysql安装目录 建备份文件夹: mkdir mysql_data_bak 建脚本文件: touch autobackupmysql.sh 打开文件 vi autobackupmysql.sh 在脚本中加入如下内容: filename=`date +%Y%m%d` /usr/bin/mysqldump -op

Navicat备份mysql数据库的方法

使用软件备份mysql数据库(以Navicat为例) 1)打开Navicat---连接---Mysql2)填写mysql数据库连接信息 3)备份mysql数据库文件双击打开创建的连接---选择数据库---右键点击---选择"转储SQL文件",即可将数据库导出成.sql文件 4)还原mysql数据库文件双击打开创建的连接---选择数据库---右键点击---选择"运行SQL文件"指定数据库备份文件以和备份文件的编码,默认选择的编码为65001 (UTF-8).GBK编码

自动备份mysql数据库并发送到Email方法

一个博客,一个网站最重要的就是数据库,所以经常备份数据是必须的.尽管 WordPress 有定时备份数据的插件,但只能备份当前的博客,不够灵活.适合个人小小博客,对于一些网站来说,就不适合了.现在很多人都拥有多个网站,showfom 同学就有几个网站.每个网站都装个插件就比较麻烦了.况且不是每个网站都是 WordPress 的 . 所以写了个自动备份mysql数据库的脚本,再加上gmail这个G级邮箱,备份多少数据都可以了...下面是代码: mysqldump -uuser -ppassword

C#使用MysqlBackup.Net 备份MySQL数据库

首先 声明这篇博文没有什么技术水平  希望各位大神口下留情 好的  咱们进入主题 开场介绍一下这个MysqlBackup.Net dll 是国外开源的作品  官方网站 https://mysqlbackupnet.codeplex.com/ 我这里提供目前官方最新版本 2.0.9.2   解压缩后里面会有两个文件夹   binaries里面是类库 里面分各个.net版本    source code里面是源代码 有兴趣的同学可自行下载研究其代码 点击下载MysqlBackup.Net 因为我项目

一个自动备份mysql数据库的bat文件内容

自动备份mysql数据库,并已当前的日期时间为目录 copy过去, xcopy将近15年没有用dos命令,还是这么亲切 另 本方法是备份数据库文件,不是dump导出,然后再计划任务中使用,我用的是wamp,其他的环境类似的改改即可 ====dbback.bat============ NET STOP wampapacheNET STOP wampmysqldset /a t1=(1%time:~0,2%-100)*1if %t1% LSS 10 set t1=0%t1%set ymd_hms=

Linux下定时备份MySQL数据库的Shell脚本

Linux下定时备份MySQL数据库的Shell脚本 对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间和精力,还灰常不专业的说.于是,有了下面这段脚本的出现.参考了网上的很多教程,外加自己的测试,以下脚本经测试可用.#!/bin/bash#Shell Command For Backup MySQL Database Everyday Automatically By Crontab#Author :

使用XtraBackup 备份MySQL数据库

本次测试使用XtraBackup备份MySQL数据库 版本:XtraBackup2.4.5+MySQL5.7.16 下载地址:https://www.percona.com/downloads/XtraBackup/ 1.安装XtraBackup 本次为了方便,使用解压版本进行安装,直接解压就可以用了. 使用过程中可能会遇到缺少perl依赖包的问题,我的方法是直接操作把镜像包里的perl都安装了,yum install -y perl* 2.简介 XtraBackup主要包括两个备份工具xtra

linux下远程备份mysql数据库

本次环境主要是远程备份mysql数据库的一种常见方法,对于其他知识不做太多讲解. 环境需求: 两台linux:一台mysql数据库服务器,另一台当作客户端用来做备份. 环境目标: 实现mysql数据库的远程备份 例子: (A为服务端ip为192.168.1.1    B为客户端ip为192.168.1.2) 1.首先你得在A上建立一个数据库(建立数据库名称我以 xianyu 为例) create database xianyu;   (建立数据库xianyu) 2.在A上建立一个数据库用户用来做

学会用各种姿势备份MySQL数据库

学会用各种姿势备份MySQL数据库 大纲 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么比数据跟更为重要.