MySQL数据库的备份和恢复

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库的备份和恢复相关的知识,希望对你有一定的参考价值。

意义

  • 数据库备份后一定要测试
  • 写灾备和还原技术文档
  • 通过二进制日志结合完全备份和增量备份做到数据损失到最小

备份类型

  • 完全备份
    速度最慢,最完整
  • 部分备份
    备份特定的数据
  • 增量备份
    基于完全备份,备份速度最快,还原麻烦
  • 差异备份
    基于完全备份,备份速度越来越慢越来越大,还原简单
    增量备份和差异备份

备份的形式

冷热备份

  • 冷备:读、写操作均不可进行,数据库停止服务
  • 温备:读操作可执行;但写操作不可执行
    MyISAM:温备,因不支持事务所以不支持热备,
  • 热备:读、写操作均可执行
    InnoDB:都支持 由事务支持

物理逻辑备份

  • 物理备份 拷贝数据库文件和配置文件

  • 数据库导出另存

数据库备份内容

  • 数据
  • 二进制日志、InnoDB的事务日志
  • 用户帐号,权限设置,程序代码(存储过程、函数、触发器、事件调度器)
  • 数据库服务器的配置文件

备份工具

  • cp, tar等复制归档工具:物理备份工具,适用所有存储引擎;只支持冷备;完全和部分备份
  • LVM的快照:先加读锁,做快照后解锁,几乎热备;借助文件系统工具进行备份
  • mysqldump:逻辑备份工具,适用所有存储引擎,对MyISAM存储引擎进行温备;支持完全或部分备份;对InnoDB存储引擎支持热备,结合binlog的增量备份
  • xtrabackup:由Percona提供支持对InnoDB做热备(物理备份)的工具,支持完全备份、增量备份
  • MariaDB Backup: 从MariaDB 10.1.26开始集成,基于Percona XtraBackup 2.3.8实现
  • mysqlbackup:热备份, MySQL Enterprise Edition 组件
  • mysqlhotcopy:PERL 语言实现,几乎冷备,仅适用于MyISAM存储引擎,使用LOCK TABLES、
  • FLUSH TABLES和cp或scp来快速备份数据库

基于逻辑卷LVM 的快照备份

  • 请求锁定所有表
    mysql> FLUSH TABLES WITH READ LOCK;
  • 记录二进制日志文件及事件位置
mysql> FLUSH LOGS;
mysql> SHOW MASTER STATUS;
mysql -e 'SHOW MASTER STATUS'
> /PATH/TO/SOMEFILE
  • 创建快照
    lvcreate -L # -s -p r -n NAME /DEV/VG_NAME/LV_NAME
  • 释放锁
    mysql> UNLOCK TABLES;
  • 挂载快照卷,执行数据备份
  • 备份完成后,删除快照卷
  • 制定好策略,通过原卷备份二进制日志

数据库冷备份和还原

  • 停服务 不停服务会造成数据丢失和文件冲突
  • 把所有数据库相关数据都拷走
  • 拷贝是要注意权限问题
  • 先把数据库装上,版本要一致
  • 再把备份过的数据库文件拷贝到指定文件夹
#在目标服务器(10.0.0.18)安装mariadb-server,不启动服务
[root@centos8 ~]#dnf install mariadb-server
#在源主机(10.0.0.8)执行
[root@centos8 ~]# systemctl stop mariadb
#复制相关文件
[root@centos8 ~]# scp -r /var/lib/mysql/* 10.0.0.18:/var/lib/mysql/
[root@centos8 ~]# scp /etc/my.cnf.d/mariadb-server.cnf 10.0.0.18:/etc/my.cnf.d/
[root@centos8 ~]# scp -r /data/logbin/ 10.0.0.18:/data/ #10.0.0.18须事先存
在/data/目录
#复制相关文件并保留属性:可以用rsync
[root@centos8 ~]#rsync /etc/my.cnf.d/mariadb-server.cnf 10.0.0.18:/etc/my.cnf.d/
[root@centos8 ~]#rsync -av /var/lib/mysql/ 10.0.0.18:/var/lib/mysql/
[root@centos8 ~]#rsync -av/data/logbin/ 10.0.0.18:/data/ #10.0.0.18 须事先存
在/data/目录
#在目标主机(10.0.0.18)执行
[root@centos8 ~]#chown -R mysql.mysql /var/lib/mysql/
[root@centos8 ~]#chown -R mysql.mysql /data/logbin/
[root@centos8 ~]#systemctl start mariadb
  • rsync -a 保留属性
    加/复制数据和目录本身
    不加/只复制目录下的数据
  • 冷备份再还原,可以理解为数据库迁移的一种方式
  • 备份时配置文件和二进制文件都需要拷贝

使用mysqldump 备份

后详……

使用xtrabackup 备份

后详……

以上是关于MySQL数据库的备份和恢复的主要内容,如果未能解决你的问题,请参考以下文章

mysql备份和恢复

mysql备份和恢复

如何用mysql命令备份和恢复

Mysql完全备份和恢复

MySQL数据库备份和恢复

MySQL数据库的物理备份逻辑备份和恢复