Mysql备份恢复利用主从_MySQL之备份还原,主从复制,主主复制。

数据库作为我们的日常工作中不可缺少的部分,那它内部数据的重要性显而易见,所以数据安全至关重要。确保数据的安全,我们就必须做好数据备份。简单说几个MySQL常用的备份工具以及如何利用这些工具实现数据的备份。

一:MySQL自带的工具---mysqldump,相信大家应该还有映像:# ls /usr/local/mysql/bi我们会看到此命令。

362f4bf09579566afe63665ecdc0771e.png

用法:mysqldump [options] [db_name [tbl_name ...]]

常用选项:

--databases --备份数据库,后面可以跟某个数据库的名称

--all-databases ---备份所有数据库

--lock-all-tables --->请求锁定所有表再备份,写操作会被阻塞

--lock-tables --->锁定某张表

--single-transaction --->能够对innodb存储引擎实现热备 可以不用--lock-all-tables.对MyISAM、Aria做温备

--events --->备份事件调度器代码

--routines --->备份存储过程,存储函数

--triggers --->备份触发器

--flush-logs --->备份前、请求到锁之后滚动日志

--master-data=[0|1|2] 记录二进制日志文件名及事件发生时所处的位置。0:表示不记录,1:记录为change master语句,2:记录为注释change master语句

2:利用mysqldum实现备份机制:

首先:请求锁定要备份的部分,如果使用--single-transaction可以不用请求锁

其次:滚动二进制日志

然后:选择要备份的库

记录二进制日志文件的内容,记录开始备份的二进制日志的文件名,以及其备份到那个位置结束的。

3:具体实施步骤:先做一次完全备份。

先看看原始数据库

3e7857329795cb1ac21075bce6cb1a44.png

备份:   # mysqldump --all-databases --lock-all-tables --flush-logs --master-data=2 > /tmp/mysql.sql

2655748fed7d2cd402f457ba47ef94e0.png

删除数据库:

fbfc37923042bcaae41689e1c5f06ae4.png

恢复数据库

f3c5131b9627aa5621a5e372eb099f12.png

其实部分数据库的备份也是如此只是命令稍作修改

--all-databases 换作--databases 后面跟上你要备份的数据库名,多个数据库名之间空格隔开。 例如: # mysqldump --databases --lock-all-tables mydb test --flush-logs --master-data=2 > /tmp/mysql.sql

如果我们的数据库使用的存储引擎是innoDB那么我们可以不使用--lock-all-tables这个选项,锁表,只是为了不让我们在备份的时候别人正在修改数据数据。导致我们的备份出现变化。而是使用--single-transaction。这样我们在备份的时候别人也可以做写操作,而且还不影响我们的数据备份。

# mysqldump --databases --single-transaction mydb test --flush-logs --master-data=2 > /tmp/mysql.sql

--fulsh-logs:滚动日子的目的是为了记录备份以后到下次备份之间数据改变的操作,以便我们在某一时刻数据库损坏还原的时候可以还原到最后一次数据改变的那个时刻。

我们可以演示一下mysqldump+二进制日志文件,做即时点还原数据。

数据库的还原我们已经做过,在此基础上我们做基于二进制日志文件的即时点还原数据。

首先:查看当前二进制日志文件的文件名称及其位置:

0096fc54086925514fadd12fc832cce6.png

其次:我们做一些修改数据的操作

MariaDB [hellodb]> CREATE DATABASE Linux;

MariaDB [hellodb]> use Linux;

MariaDB [Linux]> CREATE TABLE student (Name char(30), Age int);

6f08c194924345e8eff0f90fcdd483c8.png

接着:我们手动滚动下二进制日志

c41c2e99ad7f44c158f7c31a2e95620d.png

模拟:数据库损坏,我们删除刚创建的数据库文件

7dac8ba0789ba5715749d91dc4618808.png

导出,刚才我们在做数据修改之后到删除数据库之前的二进制日志文件内容,因为我们在数据库删除之前滚动了二进制日志,所有者使用mysqlbinlog命令的时候不需要指定结束位置,只需要指定开始位置即可

# mysqlbinlog --start-position=525815 /mydata/master/master-bin.000004 > /tmp/000004bin.sql

9a1c4ed9baa9db274d239072a996dead.png

最后:我们开始还原数据:

6930c2f4a4db7ebaf87cce3170931274.png

fbfa6ddc96014f02663aea585af5bf39.png

我们在恢复数据的时候也会产生二进制日志文件,但是这些是没有必要记录在二进制日志文件中的,所以我们在恢复数据的时候最好是先手动关掉二进制日志文件,然后再进行备份还原,还原完成后再启动二进制日志。

set session sql_log_bin=0;

set session sql_log_bin=1;

注意:在利用mysqldump备份单个数据库的时候可以不使用--database 选项,如果不使用,在还原的时候如果你还原的数据库文件不存在,就需要手动创建此数据库文件。

二:lvm-snapshot:基于LVM快照的备份,但是这有个前提,事务日志与数据文件必须在同一卷上。这样我们做快照的时候可以让数据文件跟日志文件的快照基于同一时刻。

基于快照实现备份还原的思路:

首先:我们也是先要做请求全局锁,禁止用户的写操作,防止数据改变。

其次:锁定表以后,我们要滚动二进制日志,为了便于实现即时点还原

然后:做二进制日志文件的名称和位置标记

接着:做快照

最后:释放全局锁

有了这些思路,那我们来实操演练:

1:请求全局锁 MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;

2:手动滚动二进制日志文件 MariaDB [(none)]> flush logs;

3:记录二进制日志文件名及其当前事件所处的位置

c32b3ecf8822687194e750ba5b17c9bb.png

# mysql -e 'show master status;' > /tmp/000004.sql

4:创建快照 lvcreate -L 100M -s -n mydata-snap -p r /dev/mydb/mydata

1a8c86df95830172ff27263fc4512294.png

5:释放全局锁 MariaDB [(none)]> UNLOCK TABLES;

6:挂载快照,并备份数据

mount /dev/myvg/mydata-snap /mnt -o ro

cp /mnt/* /tmp/mydb.back -a

7:卸载挂载,并删除快照。

8:停止服务并模拟数据库损坏

5a92dac9c20ab82327da585119892d82.png

9:还原数据并启动mysql服务

8b8c72bce8aee93f65341d0441cbe5c4.png

10:基于二进制日志文件的即时点还原与mysqldump一致。我们就不再做演示。

三:基于Xtrabackup进行MySQL备份

yum安装Xtrabackup软件,因为有依赖关系。

使用innobackupex备份需要注意以下两点:

1:要使用高级的备份机制,必须使用独立的表空间结构,所以需要在配置文件中定义启动独立表空间。

# vim /etc/my.cnf

1de45d999cd3b9a6165ac10b8136b769.png

2:innobackupex只支持对innoDB做热备,MyISAM只是复制

实操演练:

首先:创建备份文件存放目录

# mkdir /mybackup

其次:出于安全考虑创建只具有备份权限的账号

d6f80dd081187fe23d529d4b9f34b2f7.png

e6a997e2d3c4241a414f49519cb06ff0.png

然后:开始备份

da2deb4efe57d320646c81d94c1454ec.png

b982f40796bb46d1ce53d978f0643fc8.png

最后:还原

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值