MySQL的备份及还原

[复制链接]
发表于 2025-5-20 16:56:44 | 显示全部楼层 |阅读模式
备份范例

   热备份、温备份、冷备份 (根据服务器状态)
    热备份:读、写不受影响;
    温备份:仅可以实行读操作;
    冷备份:离线备份;读、写操作均中断;
  
  物理备份与逻辑备份 (从对象来分)
    物理备份:复制数据文件;
    逻辑备份:将数据导出至文本文件中;
  
  完全备份、增量备份、差异备份 (从数据网络来分)
    完全备份:备份全部数据;
    增量备份:仅备份前次完全备份或增量备份以后变化的数据;
    差异备份:仅备份前次完全备份以来变化的数据;;
  
备份案例

1、mysqldump+binlog实现完全+增量备份

提前准备一个表
   完全备份
  1. mysqldump  -u root -pabc123   school > /root/mysql_bak/school.sql
复制代码
模仿数据故障:  mysql>  drop database school;
     刷新日志日志并保存 :  mysql> flush logs;
  

  立马备份binlog.0000
  1. [root@localhost mysqlbak]# cp /var/lib/mysql/binlog.000001 /mysqlbak
  2. # 查看二进制日志日志
  3. 使用mysqlbinlog,insert语句已经加密,默认看不到。查看时加上选项 --base64-output=DECODE-ROWS -vv
  4. #250117 11:34:22 server id 1 end log_pos 2862 CRC32 0x5102374d
  5. ### INSERT INTO )school'.'Student
  6. 生## SET
  7. @1=5 /* INT meta=0 nullable=o is null=0 */
  8. ### 02='xumubin' /* VARSTRING(64) meta=64 nullable=o is null=0 */
  9. (3='男’/* STRING(8) meta=65032 nullable=0 is nul1=0 */
  10. 4=29 /* TINYINT meta=o nullable=e is null=o /
  11. 05='中文专业’/* VARSTRING(64) meta=64 nullable=1 is null=0 */
  12. INSERT INTO ‘school’.'Student
  13. #排# SET
  14. Q1=6 /* INT mFta=0 nullable=o is null=0 */
  15. a2='wangzhao""/* VARSTRING(64) meta=64 nutlable=o is null=0 */
  16. a3='男/* STRING(8) meta=65032 nullable=e is null=0 */
  17. 04=21 /* TINYINT meta=0 nullable=e is null=0 天/
  18. ##井 @5='导弹专业’/* VARSTRING(64) meta=64 nullable=i is null=e */
  19. # at 2862
  20. *250117 11:34:22 server id 1 end log_pos 2893 CRC32 0x07cf07af COMIT/*!*/;
  21. at 2893
  22. #250117 11:34:57 server id 1 end log_pos 2972 CRC32 Ox9eb12b07
  23. 1、基于时间点增量恢复
  24. [root@localhost mysqlbak]# mysqlbinlog binlog.000005 --start-datetime="2024-02-19 11:34:53" --stop-datetime="2024-02-19 11:34:57" -r time1.sql
  25. #还原完全备份
  26. mysql> source /mysqlbak/school.sql
  27. mysql> select * from school.Student;
  28. +-----+--------+------+------+-----------------+
  29. | Sno | Sname  | Ssex | Sage | Sdept           |
  30. +-----+--------+------+------+-----------------+
  31. |   1 | 陆亚   | 男   |   24 | 计算机网络      |
  32. |   2 | tom    | 男   |   26 | 英语            |
  33. |   3 | 张阳   | 男   |   21 | 物流管理        |
  34. |   4 | alex   | 女   |   22 | 电子商务        |
  35. +-----+--------+------+------+-----------------+
  36. #还原增量备份
  37. mysql> source /mysqlbak/time1.sql
  38. mysql> select * from school.Student;
  39. +-----+----------+------+------+-----------------+
  40. | Sno | Sname    | Ssex | Sage | Sdept           |
  41. +-----+----------+------+------+-----------------+
  42. |   1 | 陆亚     | 男   |   24 | 计算机网络      |
  43. |   2 | tom      | 男   |   26 | 英语            |
  44. |   3 | 张阳     | 男   |   21 | 物流管理        |
  45. |   4 | alex     | 女   |   22 | 电子商务        |
  46. |   5 | xumubin  | 男   |   29 | 中文专业        |
  47. |   6 | wangzhao | 男   |   21 | 导弹专业        |
  48. +-----+----------+------+------+-----------------+
复制代码
2、mydumper备份数据库

--host-h毗连的MySQL数据库服务器
--user-u毗连数据库的用户
--password-p毗连数据库用户的密码
--ask-password-a提示输入用户的密码
--port-PMySQL数据库端口
--compress-protocol-C对 MySQL 毗连使用压缩
--database-B需要备份的数据库
--no-schemas-m不备份表布局,(数据和触发器)
--all-tablespaces-Y备份所有表空间
--no-data-d不备份表的数据
--triggers-G备份触发器,默认情况下不备份
--events-E备份变乱,默认情况下不备份
--routines-R备份存储过程和函数,默认情况下不备份
--partition-regex按分区名称过滤的正则表达式
--ignore-engines-i要忽略的存储引擎的列表 ,逗号分隔
备份例子

1、备份全库
   mydumper -u root -p 123456 -o /backup
  2、备份指定数据库
   mydumper -u root -p 123456 -G -R -E -B school -o /backup
   3、导出指定表
   mydumper -u root -p 123456  -T school -o /backup
   4、只导出表布局,不导出表数据
   mydumper -u root -p 123456 -B zs -d -o /backup
  主要原理:

  •  主线程 FLUSH TABLES WITH READ LOCK ,将脏页刷新到磁盘并施加全局只读锁,以阻止 DML 语句写入,包管数据的一致性;
  • 读取当前时间点的二进制日志日志文件名和日志写入的位置并记载在 metadata 文件中,以供即时点规复使用;
  •  START TRANSACTION WITH CONSISTENT SNAPSHOT 并获取一致性快照
  • 创建子历程被分配任务,导出表
  • 主线程 UNLOCK TABLES ,释放全局只读锁;
规复例子 

   myloader -u root -p 123456 -o -d /backup
  3、 xtrabackup备份

准备
   mysql> CREATE USER 'lee'@'%' IDENTIFIED with mysql_native_password  BY '123';
mysql> GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'lee'@'%';
mysql> GRANT SELECT ON performance_schema.log_status TO 'lee'@'%';
mysql> GRANT SELECT ON performance_schema.keyring_component_status TO lee@'%';
mysql> GRANT SELECT ON performance_schema.replication_group_members TO lee@'%';
  mysql> FLUSH PRIVILEGES;
    完全备份:
  [root@localhost ~]# xtrabackup --backup --target-dir=/data/backups/ -u lee -p'123' -H172.16.100.21 -S /var/lib/mysql/mysql.sock
  
  增量备份:
  
[root@localhost ~]#  usr/bin/xtrabackup --backup --target-dir=/data/incr1/ -u lee -p'123'  --incremental-basedir=/data/backups/  -S  /var/lib/mysql/mysql.sock
   还原例子

   [root@localhost ~]#  xtrabackup --prepare --apply-log-only --target-dir=/data/backups/ 
  [root@localhost ~]#  xtrabackup --prepare --apply-log-only --target-dir=/data/backups/ --incremental-dir=/data/incr1/
  
  xtrabackup --prepare --target-dir=/data/backups/
  [root@node1 ~]# systemctl stop mysqld
[root@node1 ~]# rm -rf /var/lib/mysql/*
[root@node1 ~]# xtrabackup --copy-back --target-dir=/data/backups/
  [root@node1 ~]# chown -R mysql:mysql /var/lib/mysql
[root@node1 ~]# systemctl start mysqld
   
4、mysqlbackup 备份还原

1、备份image

   mysqlbackup --user=mysqlbackup --password=MySQL@123
  --socket=/var/lib/mysql/mysql.sock \
--backup-image=my_full_bak.mbi  \
--backup-dir=/data/backup \
--show-progress \
--compress \
--with-timestamp \
backup-to-image
  
  注释解释
  

  • –backup-image:生成的备份image名称
  • –backup-dir:生成的备份image所在目录
  • –show-progress:显示备份进度[可选项]
  • –compress:对备份image进行压缩节省空间[可选项]
  • –with-timestamp:在backup-dir目录下生成’年-月-日-时-分-秒’的目录存储备份image以及别的相干文件
  • backup-to-image:声明这是备份为image的备份
  可以通过list-image检察备份image中的文件内容  
   [root@localhost ~]# mysqlbackup --backup-image=/data/back/2025-03-28_18-45-32/my_full_bak.mbi list-image
  2、还原image

   还原数据库备份之前必须做完成以下前提:
  

  • 关闭mysqld服务
  • 清空mysql的datadir目录
     [root@localhost 2025-03-28_18-45-32]#  mysqlbackup --datadir=/var/lib/mysql  --backup-image=/data/back/2025-03-28_18-45-32/my_full_bak.mbi --backup-dir=/data/back/2025-03-28_18-45-32/tmp --uncompress copy-back-and-apply-log 
  
  解释:
  

  • –datadir : mysql server的数据库datadir,数据将还原至此
  • –backup-image:image备份的路径与名称
  • –backup-dir: image临时工作目录用于释放image都此目录,必须为空
  • –uncompress[可选项]  解压
  • copy-back-and-apply-log:应用redolog并且copy datafile至datadir
  
  权限有问题,修改权限
  chown  -R mysql.mysql /var/lib/mysql
   3、datafile备份

   mysqlbackup --user=mysqlbackup --password=MySQL@123
  --socket=/var/lib/mysql/mysql.sock
  --backup-dir=/data/backup
  --show-progress
  --compress
  --with-timestamp
  backup 
  5、还原datafile

分步还原
   分布还原
  1、apply-log
  mysqlbackup --backup-dir=/data/backup/2022-04-13_17-32-49 --uncompress  apply-log 
  2、copy-back
  mysqlbackup --datadir=/data/mysql/data --backup-dir=/data/backup/2022-04-13_17-32-49  copy-back
  
  归并还原
  mysqlbackup --datadir=/var/lib/mysql/ --backup-dir=/data/backup/2022-04-13_17-32-49 --uncompress --show-progess --show-progess 
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表