iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Linux运维 | mysql数据库的备份与恢复
  • 730
分享到

Linux运维 | mysql数据库的备份与恢复

Linux运维|mysql数据库的备份与恢复 2021-02-10 20:02:47 730人浏览 猪猪侠
摘要

特点 备份的数据全面而且最为完整 数据量大的时候备份时间长 备份数据会存在大量重复信息 增量备份 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一

Linux运维 | mysql数据库的备份与恢复

特点

  • 备份的数据全面而且最为完整
  • 数据量大的时候备份时间长
  • 备份数据会存在大量重复信息

增量备份

增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,如此类推。

特点

  • 与全量备份相比,没有重复的备份数据
  • 备份数据量不大,备份恢复的时间短
  • 数据恢复麻烦,必须具有上一次全备份和所有增量备份磁带,并且需要按照全量备份到增量备份的顺序反推进行恢复

差异备份

差异备份是指在一次全备份后到进行差异备份的这段时间内,对那些增加或者修改文件的备份。

特点

  • 备份时间短,节省磁盘空间
  • 恢复所需的磁带少,恢复时间短

比较
数据备份的数据量(大>>小):
全量备份>差异备份>增量备份

数据的恢复时间(快>>慢):
全量备份->差异备份->增量备份

Mysql数据库备份工具

mysqldump工具

mysqldump是一款mysql逻辑备份的工具,它将数据库里面的对象(表)导出作为SQL脚本文件。它是mysql备份常用的备份方法,适合于不同版本mysql之间的升级、迁移等,不过在数据库比较大的时候,效率不高。

下面是mysqldump命令的常见用法:

# 备份单个的数据库,如备份db1这个数据库
mysqldump -uroot -p123456 db1 > /backup/db1_`date +%F`.sql

# 备份所有数据库,-A参数
mysqldump -uroot -p123456 -A > /backup/all_db.sql

# 备份远程主机的数据库,-h指定IP地址,-P(大写P)指定端口
mysqldump -uroot -p123456 -h192.168.30.4 -P3306 db1 > /backup/db1.sql

# 只备份表结构,不备份数据,使用-d参数
mysqldump -uroot -p123456 -d db1 > /backup/db1.sql

# 只备份数据,不备份表结构,使用-t参数
mysqldump -uroot -p123456 -t db1 > /backup/db1.sql 

# 备份指定的多个库,-B参数
mysqldump -uroot -p123456 -B db1 db2 db3 > /backup/db123.sql

# 备份指定的表,如备份db1库里面的stu表
mysqldump -uroot -p123456 db1 stu > /backup/db1_stu.sql

# 备份多个表
mysqldump -uroot -p123456 库1123... > db_tables.sql

# 恢复数据
mysqldump -uroot -p123456 dbname < xxx.sql
#或者
mysqldump -uroot -p123456 < xxx.sql

其他参数:

参数 说明
-R, --routines 备份存储过程和函数数据
--triggers 备份触发器数据
--master-data={1或者2} 告诉你备份后时刻的binlog位置,如果等于1,则将其打印为CHANGE MASTER命令; 如果等于2,那么该命令将以注释符号为前缀。
--single-transaction 对innodb引擎进行热备

一条完整的备份语句(适用innodb引擎):

mysqldump -A -R --triggers --master-data=2 --single-transaction | gzip >/backup/all_$(date +%F).sql.gz

适用多引擎混合的一条完整备份语句:

mysqldump -A -R --triggers --master-data=2 |gzip >/backup/all_$(date +%F).sql.gz

备份脚本
日常可以根据需求进行备份工作,常见是使用shell脚本结合任务计划,下面是一个mysql数据库备份脚本示例,mysql_backup.sh脚本内容如下:

#!/bin/bash 
bakdir=/data/backup # 定义备份文件存放目录
d=`date +%F` # 以日期为命名格式

# 备份三个数据库bbs,blog,db2
for db in bbs blog db2
do
    mysqldump -uroot -p123456 $db > $bakdir/$db\_$d.sql
done
cd $bakdir
# 对备份文件进行压缩
gzip *_$d.sql
# 对备份时间超过一个月的文件进行删除
find ./ -name "*.gz" -mtime +30 |xargs rm

添加任务计划:

[root@moli_linux1 data]$ chmod +x /usr/local/sbin/mysql_backup.sh
[root@moli_linux1 data]$ crontab  -e
# 添加内容
30 3 * * * /bin/bash /usr/local/sbin/mysql_backup.sh >/tmp/mysql_backup.log 2>/tmp/mysql_backup.log
# 任务计划内容是:
# 每天凌晨3点30分执行备份脚本,并将正确与错误输出写进mysql_backup.log文件

xtrabackup备份工具

Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份,也支持MyISAM表和服务器的其他部分。

mysqldump对于导出几个G的数据库或几个表,还是不错的,速度并不慢。一旦数据量达到几十上百G,
无论是对原库的压力还是导出的性能,mysqldump就力不从心了。Percona-Xtrabackup备份工具,
是实现MySQL在线热备工作的不二选择,可进行全量、增量、单表备份和还原

xtrabackup的安装

环境说明:Centos Linux release 7.5.1804 (Core) IP=192.168.30.3

安装xtrabackup2.4版本:

# 添加yum源
wget -O /etc/yum.repos.d/epel.repo Http://mirrors.aliyun.com/repo/epel-6.repo
# 安装依赖包
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
# 下载rpm包
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
# 安装
yum -y install percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm

Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupexxtrabackup:

  1. .xtrabackup只能备份InnoDB和XtraDB 两种数据表(在2.4版本之后支持备份MyISAM)
  2. .innobackupex是一个封装xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读

innobackupex的全量备份

innobackupex做全量备份的命令是:

innobackupex --defaults-file=/etc/my.cnf  --host=192.168.30.3  --port=3306 
--user=root --passWord=123456  /data/backup/mysql

说明:

  • --defaults-file指定mysql的配置文件,要从配置文件找到datadir的路径;
  • --host指定IP, --port指定端口;
  • --user指定用户,--password指定用户密码;
  • /data/backup/mysql是备份文件所在的目录,使用绝对路径。

备份的数据会存放在指定的目录里,并且自动生成一个以当前日期、时间为名字的目录,例如2019-06-01_15-05-31

[root@moli_linux1 mysql]$ pwd
/data/backup/mysql
[root@moli_linux1 mysql]$ ll
总用量 0
drwxr-x--- 2 root root   6 6月   1 15:03 2019-06-01_15-03-22
drwxr-x--- 6 root root 188 6月   1 15:05 2019-06-01_15-05-31
[root@moli_linux1 mysql]# 

关于备份用户

使用xtrabackup备份可以直接使用root用户,但是生产环境中是很少见的不符合安全规则,因此可以创建一个备份用户进行数据备份的工作,这个备份用户拥有reload, lock tables, replication client, process, super等权限。

mysql  -uroot  -p123456
> grant reload,lock tables,replication client on *.* to "backupuser"@"localhost"  identified  by  "123456";
> flush  privileges;

创建后,后续的备份工作都使用这个备份用户,mysqldump也可以类似地使用非root用户。

innobackupex全量备份的恢复

innobackupex全量备份的恢复:

# 1.预备恢复:
innobackupex --apply-log /data/backup/mysql/2019-06-01_15-05-31 --user-memroy=2G

# 2.停止MySQL/MariaDB,将datadir目录里面的数据清空(或者挪走)
/etc/init.d/mysql stop
mv /data/mysql /data/mysql_bak

# 3.恢复
innobackupex --defaults-file=/etc/my.cnf  --copy-back  /data/backup/mysql/2019-06-01_15-05-31

# 4.改权限,这个/data/mysql是my.cnf里datadir的目录
chown -R mysql:mysql /data/msyql

#5.启动MySQL/MariaDB
/etc/init.d/mysql start

innobackupex的增量备份

innobackupex --host=192.168.30.3  --port=3306 --user=bakuser --password=your_pass 
 --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/last-backup-file

说明:

  • --incremental :表示本次备份是一个增量备份(若针对的上次备份为一个全量备份,这里也可以认为是个差异备份)
  • --incremental-basedir:指定本次增量备份针对的哪一个备份(可以是上个增量,也可以是上个全量) 增量备份可以一环扣一环,比如可以周一做一个全量备份,然后周二做周一的增量,周三做周二的增量...

innobackupex增量备份的恢复
准备阶段:
第一步:停止数据库服务
第二步:删除或者备份datadir里面的数据
第三步:准备全量备份恢复:

innobackupex --apply-log --redo-only  /PATH/TO/全量备份目录

第四步:准备增量备份恢复1:

innobackupex --apply-log --redo-only  /PATH/TO/全量备份目录 --incremental-dir=/PATH/TO/第一次增量备份目录

第五步:准备增量备份恢复2:

innobackupex --apply-log --redo-only /PATH/TO/全量备份目录  --incremental-dir=/PATH/TO/第二次增量备份目录

......
第N步:准备最后一个增量备份恢复:

innobackupex --apply-log /PATH/TO/全量备份目录  --incremental-dir=/PATH/TO/最后一次增量备份目录

准备阶段的最后一步,再次准备全量:

innobackupex --apply-log   /PATH/TO/全量备份目录   #(这次不用加--redo-only了)

恢复阶段:

  1. innobackupex --copy-back /PATH/TO/全量备份目录
  2. 改权限:chown -R mysql:mysql /PATH/TO/datadir
  3. 启动MySQL/MariaDB
说明:--redo-only:表示进行准备(应用日志)工作时,只进行redo操作,只会重做已提交但未应用的事务,不会回滚未提交的事务。原因是后面还有个增量备份,未提交的可能在后面增量备份时进行提交。需要注意的是,最后一个增量备份不需要加这个选型。

mariadb10.3.x以上版本进行备份恢复

MariaDB10.3.x及以上的版本用Percona XtraBackup工具会有问题。
原因可能是MariaDB10.3以上版本的redo日志格式和之前不同了。
解决方案是,使用mariabackup,它是MariaDB提供的一个开源工具,用于对InnoDB,Aria和MyISAM表进行物理在线备份。
这个工具是基于Percona的XtraBackup(版本2.3.8)的解决方案:

全量备份:
mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-06-01

全量恢复:
停止数据库
清空datadir
mariabackup --prepare --target-dir /data/backup/2019-06-01/ 
mariabackup --copy-back --target-dir /data/backup/2019-06-01/
改属主、属组
启动

增量备份:
mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-06-01
第一个增量:mariabackup --backup --user=xxx --password=xxx  --target-dir /data/backup/2019-06-01_inc1 --incremental-basedir /data/backup/2019-06-01
第二个增量:mariabackup --backup --user=xxx --password=xxx  --target-dir /data/backup/2019-06-01_inc2 --incremental-basedir /data/backup/2019-06-01_inc1

增量恢复:
先准备全备
mariabackup --prepare --target-dir /data/backup/2019-06-01 --apply-log-only
准备第一个增量:
cd /data/backup
mariabackup --prepare --target-dir ./2019-06-01 --incremental-dir ./2019-02-21_inc1 --apply-log-only
准备第二个增量:
mariabackup --prepare --target-dir .2019-06-01 --incremental-dir ./2019-02-21_inc2 --apply-log-only
恢复:
mariabackup --copy-back  --target-dir ./2019-06-01

参考资料

  • 惨绿少年. Mysql 备份恢复与xtrabackup备份.
  • zhangguangzhi. innobackex工具备份mysql数据.
  • Percona XtraBackup. 官方文档.
您可能感兴趣的文档:

--结束END--

本文标题: Linux运维 | mysql数据库的备份与恢复

本文链接: https://www.lsjlt.com/news/4716.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL数据库的备份与恢复
    一、数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因: 程序错误人为操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃 二、数据库备份...
    99+
    2023-10-27
    数据库
  • 数据库备份与恢复
    数据库备份与恢复 一、物理备份和逻辑备份二、mysqldump实现逻辑备份2.1 备份一个数据库2.2 备份全部数据库2.3 备份部分数据库2.4 备份部分表2.5 备份单表的部分数据2.6 排除某些表的备份2.7 只备份结构或只备...
    99+
    2023-08-18
    数据库 mysql sql
  • Mysql数据库的备份与恢复方法
    这篇文章主要介绍“Mysql数据库的备份与恢复方法”,在日常操作中,相信很多人在Mysql数据库的备份与恢复方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql数据库...
    99+
    2024-04-02
  • MySQL数据库如何备份与恢复
    这篇“MySQL数据库如何备份与恢复”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQ...
    99+
    2024-04-02
  • DB2数据库的备份与恢复
              一、    查看数据库 [db2inst1@localhost ~]$ db2 list db...
    99+
    2024-04-02
  • Oracle数据库的备份与恢复
    本篇内容介绍了“Oracle数据库的备份与恢复”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、备份与恢复...
    99+
    2024-04-02
  • PHP与Memcached数据库备份与恢复
    随着互联网的快速发展,大规模MySQL数据库备份和恢复成为各大企业和网站必备的技能之一。而随着Memcached的广泛应用,如何备份和恢复Memcached也成为了一个重要的问题。PHP作为Web开发的主力语言之一,在处理备份和恢复MySQ...
    99+
    2023-05-15
    PHP memcached 数据库备份
  • PHP与MongoDB数据库备份与恢复
    随着大数据时代的到来,数据备份和恢复变得越来越重要。在这个过程中,很多网站都会使用PHP和MongoDB数据库来备份数据。本文将介绍如何使用PHP编写MongoDB数据库备份和恢复脚本。一、MongoDB数据库备份MongoDB数据库备份分...
    99+
    2023-05-15
    PHP MongoDB 备份与恢复
  • 一文学会Mysql数据库备份与恢复
    目录数据库备份的分类从数据库的备份策略角度,备份可分为常见的备份方法Mysql完全备份完全备份分类冷备份方法实现恢复数据库mysqldump备份与恢复Mysql完全恢复Mysql 日...
    99+
    2024-04-02
  • mysql怎么恢复备份数据库
    要恢复MySQL备份数据库,可以按照以下步骤进行操作: 将备份文件复制到MySQL数据库服务器上的合适位置。确保备份文件的权限设...
    99+
    2024-04-02
  • Mysql数据库之备份和恢复
     一、为什么要数据备份?   备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因: 程序错误人为,操作错误,运算错误,磁盘故障灾难(如火灾、地震)和盗窃. 二、...
    99+
    2023-09-15
    数据库 mysql
  • mysql怎么备份与恢复数据
    本篇内容介绍了“mysql怎么备份与恢复数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、直接物理文件...
    99+
    2024-04-02
  • 数据库运维的制胜法宝:全面解析备份与恢复策略
    一、数据库备份的重要性 数据库备份是保护数据安全和可用的重要措施,可以有效防止数据丢失、损坏等事故的发生。备份可以将数据库中的数据定期复制到其他存储介质上,以便在需要时能够快速恢复数据。 二、数据库备份策略 数据库备份策略是指备份数据库...
    99+
    2024-02-10
    数据库备份 数据库恢复 数据安全 数据可用性 备份策略 恢复策略
  • PHP怎么实现MySQL数据库备份与恢复
    这篇“PHP怎么实现MySQL数据库备份与恢复”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP怎么实现MySQL数据库备...
    99+
    2023-07-06
  • Oracle数据库怎么备份与恢复
    本篇内容主要讲解“Oracle数据库怎么备份与恢复”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle数据库怎么备份与恢复”吧!在Oracle数据库的使用过程中,备份与恢复是经常遇到的操作...
    99+
    2023-06-21
  • 怎么备份与恢复MongoDB数据库
    这期内容当中小编将会给大家带来有关怎么备份与恢复MongoDB数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Mongodump工具在MongoDB中,mongodump工具通常用来做备份使用。它有如...
    99+
    2023-06-14
  • MySQL数据库中怎么实现备份与恢复
    MySQL数据库中怎么实现备份与恢复,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、数据库备份的一些概念1.造成数据丢失的原...
    99+
    2024-04-02
  • 怎么备份和恢复MySQL数据库
    这篇文章主要介绍“怎么备份和恢复MySQL数据库”,在日常操作中,相信很多人在怎么备份和恢复MySQL数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么备份和恢复MyS...
    99+
    2024-04-02
  • 如何备份和恢复MySQL数据库
    备份和恢复MySQL数据库可以通过多种方式实现,以下是其中一种常用的方法: 备份MySQL数据库: 使用命令行工具备份数据库: ...
    99+
    2024-04-09
    MySQL
  • Mysql的数据备份和恢复
    这篇文章主要介绍“Mysql的数据备份和恢复”,在日常操作中,相信很多人在Mysql的数据备份和恢复问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql的数据备份和恢复”...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作