MySQL(三)-数据备份和恢复

做一下SQL基础教程的课后作业,发现有一个删除表数据后的恢复操作,书中并没有提及相关的操作,查询实操一下,先写一下MySQL数据备份和恢复。

MySQL常用的三种备用方法,物理备份xtrabackup、逻辑备份mysqldump和 binlog备份。

一、xtrabackup物理备份

1.xtrabackup安装

Percona-xtrabackup是一款用于MySQL数据库物理热备的备份工具,下载地址如下

https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

我下载的是rpm包安装,测试机我已经安装了MySQL-8.0.23,可能有一部分依赖包已经被安装,我只把这次安装的依赖包放出来,环境不一样的,有缺失的库文件请自行安装。

yum install mysql-community-libs-compat-8.0.23-1.el7.x86_64.rpm \
libev-4.15-3.el7.x86_64.rpm \
percona-xtrabackup-80-8.0.22-15.1.el7.x86_64.rpm \
percona-xtrabackup-test-80-8.0.22-15.1.el7.x86_64.rpm \
percona-xtrabackup-80-debuginfo-8.0.22-15.1.el7.x86_64.rpm -y

2.全量备份和增量备份

xtrabackup有两个工具,xtrabackup和innobackupex,前者用于热备innodb和xtradb表的工具,后者是进行封装的perl脚本,备份myisam表工具。

xtrabackup \
--user=root \
--password='password' \
--host=localhost \
--backup \
--target-dir=/root/db-bak/base \
--datadir=/var/lib/mysql \
--no-server-version-check
# --target-dir是备份文件所在目录
# --datadir是MySQL的文件位置,默认目录是/var/lib/mysql
# --no-server-version-check这里有xtrabackup与MySQL的版本适用问题,这个参数可以不检测Server版本,有风险,最好选用支持的版本

以上就是全量备份的过程,下面是在全量备份的基础上做增量备份。

#在第一次全量备份的基础上进行一次增量备份
xtrabackup --user=root --password='password' --host=localhost --backup --target-dir=/root/db-bak/inc1 --incremental-basedir=/root/db-bak/base/ --datadir=/var/lib/mysql --no-server-version-check
#在第一次增量备份的基础上进行二次增量备份
xtrabackup --user=root --password='password' --host=localhost --backup --target-dir=/root/db-bak/inc2 --incremental-basedir=/root/db-bak/inc1/ --datadir=/var/lib/mysql --no-server-version-check

3.预恢复

以上的操作都是参考man xtrabackup进行的,在进行预恢复阶段,提到了--prepare和--apply-log-only参数,前者就代表预恢复操作,后者代表不要回滚事物,增量备份的恢复时一步一步进行的,在没有进行到所有增量备份都恢复之前都需要加这个参数,在最后一步恢复的时候去掉该参数。

是的,遇到BUG了,8.0.22的xtrabackup和8.0.23的MySQL搭配有问题的,又要花时间重新安装MySQL-8.0.22,后面再继续分享。

我又回来了,MySQL-8.0.22的安装和8.0.23的安装没有啥太大的区别,和我之前介绍的差不多,这一次进行上述备份操作的时候不需要再加--no-server-version-check参数了,备份操作没有错误信息,下面继续预恢复。

xtrabackup --prepare --apply-log-only --target-dir=/root/database-backup/base/ //全量预回复
xtrabackup --prepare --apply-log-only --target-dir=/root/database-backup/base/ --incremental-dir=/root/database-backup/inc1/ //第一次增量恢复到全量备份中
xtrabackup --prepare --target-dir=/root/database-backup/base/ --incremental-dir=/root/database-backup/inc2 //第二次增量备份恢复到全量备份中
systemctl stop mysqld //停掉mysqld服务
cd /var/lib/mysql
rm ./* -rf //好吧这个命令慎用,一点之差全局完蛋!!!!!!,这时候数据库的数据已经被清空了

4.恢复

xtrabackup --copy-back --target-dir=/root/database-backup/base/
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld

这时候再打开/var/lib/mysql数据库就有数据了,这时候我们再进行查询一下。

use product;
select id,product_name,product_price from price;
+----+--------------+---------------+
| id | product_name | product_price |
+----+--------------+---------------+
|  1 | 面包         |             5 |
|  2 | 香肠         |           3.5 |
|  3 | 方便面       |             3 |
|  4 | 牛奶         |           8.3 |
+----+--------------+---------------+

好了,大功告成,其实在删除文件之前,我已经用delete删除了这个表的内容,还是恢复了,以上操作完全经过实操,可以参考,下面整个邮件服务器,然后再搞个定期全备,增量备份的自动化脚本,里面加一些备份信息发邮件的设置就ok了,继续加油!

二、mysqldump逻辑备份

mysqldump之所以成为逻辑备份,是因为它不复制数据,而是将需要备份的数据查询出来,转化成insert语句,这种备份方式在备份速度、恢复速度和物理备份工具相比较慢,而且mysqldump的备份是串行的,不会并行备份,数据量大的时候,效率低,一般不用。支持innodb热备,支持myisam温备,会锁表。

 

评论

  1. 博主
    4 年前
    2021-2-25 11:00:08

    测试一下啊

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇