(四)Mysql 数据库备份恢复全攻略

一、数据库备份

  1. 数据库备份目的和数据库故障类型

    • 目的
      • 当发生故障时,将损失降到最低。
      • 保证能够快速从备份数据中恢复,确保数据稳定运行。
    • 故障类型
      • 程序错误:Mysql 服务器端程序故障无法使用。
      • 人为误操作:权限过大误删除数据。
      • 运算错误:数据增删改查询 sql 语句错误。
      • 磁盘故障:磁盘物理损坏存储数据无法读取。
      • 不可抗力自然灾害:地震、海啸、山洪、台风、火灾等。
  2. 物理逻辑角度备份

    • 物理备份
      • 冷备份:停止数据库服务,对数据存储位置进行备份,如/usr/local/mysql/data/
      • 热备份:两地三中心数据备份,包括主从复制、主主复制、MHA、MGR 等方式。
      • 温和备份:禁止写入数据允许读取,对数据库进行备份,最大限度保证数据的完整性。
    • 数据库备份策略
      • 完整备份:第一次使用备份时间长、速度慢、占用空间大。
      • 差异备份:在做完整备份后,对产生的数据使用差异备份,速度快、占用空间小。
    • 增量备份:针对数据库日志文件进行备份。
  3. 备份常见的方式

    • 冷备份:可以使用tarcp等命令。
    • 专用工具:MysqldumpMysqlhotcopy等。
    • 第三方工具:PXBXtrabackupinnobackupexxbstream等。
    • 二进制日志:方便将数据恢复到指定的日志或者指定时间范围内。

二、Mysql 数据库备份恢复

  1. Mysql 数据库冷备份

    • 停止数据库服务,使用命令[root@centos01 ~]# systemctl stop mysqld
    • 备份数据,使用命令[root@centos01 ~]# tar zcf /opt/2024_09_12_mysql_data.tar.gz /usr/local/mysql/data
    • 模拟误删除数据,使用命令[root@centos01 ~]# rm -rf /usr/local/mysql/data/*
    • 解压恢复数据,使用命令[root@centos01 ~]# tar zxf /opt/2024_09_12_mysql_data.tar.gz -C /opt/
    • 恢复数据,使用命令[root@centos01 ~]# cp -r /opt/usr/local/mysql/data/* /usr/local/mysql/data/将备份的数据恢复到 Mysql 数据根目录,然后使用[root@centos01 ~]# ls /usr/local/mysql/data/查看数据目录,最后使用[root@centos01 ~]# chown -R mysql:mysql /usr/local/mysql/data/修改数据所有者。
    • 启动服务,使用命令[root@centos01 ~]# systemctl start mysql
    • 查询恢复数据,使用命令[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from hb3066.student;';
  2. mysqldump 备份

    • mysqldump选项:
      • --databases:备份数据库。
      • --all-database:备份所有数据库。
    • 备份指定的 hb3066 数据库的 student 表,使用命令[root@centos01 ~]# mysqldump -uroot -ppwd@123 hb3066 student >./student.sql,然后使用[root@centos01 ~]# less./student.sql查看备份文件。
    • 将 student 表恢复到 benet 数据库中,使用命令[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'create database benet;';创建数据库 benet,使用[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'show databases;';查看创建的 benet 数据库,然后使用[root@centos01 ~]# mysql -uroot -ppwd@123 benet <./student.sql恢复数据到 benet 数据库,最后使用[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.student;';查询恢复到 benet 数据库的 student 表。
    • 对数据库进行备份和恢复,使用命令[root@centos01 ~]# mysqldump -uroot -ppwd@123 --databases benet >./benet.sql备份 benet 数据库,使用[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop database benet;';模拟删除 benet 数据库,使用[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'show databases;';确认删除 benet 数据库,最后使用[root@centos01 ~]# mysql -uroot -ppwd@123 <./benet.sql恢复误删除的数据库 benet,并使用[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.student;';查询 benet 数据库的 student 表。
    • 备份所有数据库,使用命令[root@centos01 ~]# mysqldump -uroot -ppwd@123 --all-databases >./all_database.sql,然后使用[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop database benet;';模拟删除 benet 数据库,使用[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'show databases;';确认删除,最后使用[root@centos01 ~]# mysql -uroot -ppwd@123 <./all_database.sql恢复数据库。
  3. 增量备份恢复作用和特点

    • 作用:对 Mysql 的数据库日志进行备份,发生误操作时通过日志实现数据恢复。
    • 特点:灵活性强,恢复简单方便。
    • 配置注意事项开启二进制日志 :使用命令[root@centos01 ~]# vim /etc/my.cnf,在文件中添加[mysqld]log-bin=mysql-bin设置二进制日志文件名字。
    • 阅读二进制日志,使用命令[root@centos01 ~]# mysqlbinlog /usr/local/mysql/data/mysql-bin.000004
    • 切割日志生成新的二进制日志,使用命令[root@centos01 ~]# mysqladmin -uroot -ppwd@123 flush-logs
    • 插入最新数据,使用命令[root@centos01 ~]# mysql -uroot -ppwd@123进入 Mysql 命令行,然后使用mysql> insert into benet.student values ('张三','男',16,'333333333333333333');mysql> insert into benet.student values ('张四','男',16,'335555533333333333');mysql> insert into benet.student values ('张五','男',19,'335999999333355555');插入数据。
    • 备份二进制日志,使用命令[root@centos01 ~]# cp /usr/local/mysql/data/mysql-bin.000005./
  4. 增量恢二进制日志恢复

    • 模拟删除数据,使用命令[root@centos01 ~]# mysql -uroot -ppwd@123 benet <./student.sql
    • 根据二进制日志文件恢复数据,使用命令[root@centos01 ~]# mysqlbinlog --no-defaults./mysql-bin.000005 | mysql -uroot -ppwd@123
  5. 增量二进制日志基于位置恢复数据

    • 位置选项
      • --stop-position:结束位置往前恢复。
      • --start-position:从前往后恢复。
    • 模拟删除数据,使用命令[root@centos01 ~]# mysql -uroot -ppwd@123 benet <./student.sql
    • 模拟从前往后恢复数据,使用命令[root@centos01 ~]# mysqlbinlog./mysql-bin.000005 | more读取二进制日志,然后使用[root@centos01 ~]# mysqlbinlog --start-position 4./mysql-bin.000005 | mysql -uroot -ppwd@123从前往后恢复。
    • 模拟从后往前恢复数据,再次模拟删除数据后,使用命令[root@centos01 ~]# mysqlbinlog --stop-position 620./mysql-bin.000005 | mysql -uroot -ppwd@123
  6. 增量二进制日志基于时间恢复数据

    • 时间选项
      • --start-datetime:起始时间往后恢复。
      • --stop-datetime:结束时间往前恢复。
    • 起始时间往后恢复数据,模拟删除数据后,使用命令[root@centos01 ~]# mysqlbinlog --start-datetime='2024-09-12 19:22:01'./mysql-bin.000005 | mysql -uroot -ppwd@123
    • 结束时间往前恢复数据,模拟删除数据后,使用命令[root@centos01 ~]# mysqlbinlog --stop-datetime='2024-09-12 19:29:07'./mysql-bin.000005 | mysql -uroot -ppwd@123

通过以上各种备份恢复方式,我们可以在不同的情况下有效地保护和恢复 Mysql 数据库中的数据,确保数据的安全性和可用性。

相关推荐
时差9531 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
秋意钟1 小时前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102162 小时前
python下载pdf
数据库·python·pdf
ac-er88882 小时前
MySQL如何实现PHP输入安全
mysql·安全·php
桀桀桀桀桀桀3 小时前
数据库中的用户管理和权限管理
数据库·mysql
superman超哥4 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452004 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
engchina5 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina5 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j