Mysql备份恢复
- 基础备份参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # -A备份所有数据库 [root@db01 backup] # mysqldump -uroot -p123 -A >/backup/full.sql # -B指定数据库备份 [root@db01 backup] # mysqldump -uroot -p123 -B world oldguo wordpress >/backup/db.sql # 指定数据库下的表备份,world数据库下的city和country表 [root@db01 backup] # mysqldump -uroot -p123 world city country > /backup/tab.sql # -d只导出表结构 不导出数据 [root@db01 backup] # mysqldump -d -u root -p 123 数据库名> xxx.sql # 导出数据不导出结构 [root@db01 backup] # mysqldump -t 数据库名 -uroot -p > xxx.sql # 导出指定表的结构 [root@db01 backup] # mysqldump -uroot -p123 -B 数据库名 --tables 表名 -d > xxx.sql # --ignore-table备份时排除某张表或多张表 [root@db01 backup] # mysqldump -uroot -p123 数据库名称 --ignore-table=数据库名.表名1 --ignore-table=数据库名.表名2 > 自定义名字.sql |
- 常用备份
1 2 3 4 5 | # 常用不锁表,压缩备份 [root@db01 backup] # mysqldump --databases 数据库名称 -uroot -p'tst-cloud@088~' --single-transaction --master-data=2 | gzip > /data/mysql_backup/数据库名称.sql.gz # 常用压缩恢复 [root@db01 backup] # gunzip < backupfile.sql.gz | mysql -uroot -p123 数据库名 |
- 特殊备份参数
1 2 3 4 5 6 7 8 9 10 11 12 | -R:备份存储过程和函数 -E:备份事件 --triggers:备份 触发器 --master-data=2 ***** (1) 记录备份时刻的binlog信息 (2) 自动锁表 不加--single-transaction ,温备份 加了--single-transaction,对于InnoDB表不锁表备份(快照备份) --single-transaction ***** 对于InnoDB的表,进行一致性快照备份,不锁表. |
- 恢复案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | 4. 恢复案例 4.1 背景环境: 正在运行的网站系统,mysql-5.7.20 数据库,数据量50G,日业务增量1-5M。 4.2 备份策略: 每天23:00点,计划任务调用mysqldump执行全备脚本 4.3 故障时间点: 年底故障演练:模拟周三上午10点误删除数据库. 4.4 思路: 1、停业务,挂维护页,避免数据的二次伤害 2、找一个临时库,恢复周二23:00全备 3、截取周二23:00 --- 周三10点误删除之间的binlog,恢复到临时库 4、测试可用性和完整性 5、 5.1 方法一:直接使用临时库顶替原生产库,前端应用割接到新库 5.2 方法二:将误删除的表导出,导入到原生产库 6、开启业务 处理结果:经过20分钟的处理,最终业务恢复正常 4.5 故障模拟演练 4.5.1 准备数据 create database backup; use backup create table t1 ( id int); insert into t1 values(1),(2),(3); commit; rm -rf /backup/ * 4.5.2 周二 23:00全备 mysqldump -uroot -p123 -A -R --triggers -- set -gtid-purged=OFF --master-data=2 --single-transaction| gzip > /backup/full_ $( date +%F).sql.gz 4.5.3 模拟周二 23:00到周三 10点之间数据变化 use backup insert into t1 values(11),(22),(33); commit; create table t2 ( id int); insert into t2 values(11),(22),(33); commit; 4.5.4 模拟故障,删除表(只是模拟,不代表生产操作) drop database backup; 4.6 恢复过程 4.6.1 准备临时数据库(多实例3307) systemctl start mysqld3307 4.6.2 准备备份 (1)准备全备: cd /backup gunzip full_2018-10-14.sql.gz (2)截取二进制日志 -- CHANGE MASTER TO MASTER_LOG_FILE= 'mysql-bin.000002' , MASTER_LOG_POS=753; 753 1519 mysqlbinlog --skip-gtids --start-position=753 --stop-position=1519 /data/binlog/mysql-bin .000002 > /backup/bin .sql 4.6.3 恢复备份到临时库 mysql -S /data/3307/mysql .sock set sql_log_bin=0; source /backup/full_2019-07-15 .sql source /backup/bin .sql 4.6.4 将故障表导出并恢复到生产 mysqldump -S /data/3307/mysql .sock -B backup > /backup/bak .sql mysql -uroot -p123 set sql_log_bin=0 source /backup/bak .sql; 5. 练习: 1、创建一个数据库 oldboy 2、在oldboy下创建一张表t1 3、插入5行任意数据 4、全备 5、插入两行数据,任意修改3行数据,删除1行数据 6、删除所有数据 7、再t1中又插入5行新数据,修改3行数据 需求,跳过第六步恢复表数据 6. 扩展参数 *** 在构建主从时,使用AUTO /ON -- set -gtid-purged=AUTO /ON 仅是做普通的本机备份恢复时,可以添加 -- set -gtid-purged=OFF SET @@GLOBAL.GTID_PURGED= 'aa648280-a6a6-11e9-949f-000c294a1b3b:1-11' ; --max_allowed_packet=128M 控制的是备份时传输数据包的大小. mysqldump -uroot -p123 -A -R --max_allowed_packet=128M --triggers -- set -gtid-purged=OFF --master-data=2 --single-transaction| gzip > /backup/full_ $( date +%F).sql.gz 7. 物理备份-XBK 7.1 安装依赖包: wget -O /etc/yum .repos.d /epel .repo http: //mirrors .aliyun.com /repo/epel-7 .repo yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev 7.2 下载软件并安装 wget https: //www .percona.com /downloads/XtraBackup/Percona-XtraBackup-2 .4.12 /binary/redhat/7/x86_64/percona-xtrabackup-24-2 .4.12-1.el7.x86_64.rpm 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.el7.x86_64.rpm 7.3 innobackupex 使用 7.3.1 备份核心理念 1. 针对非InnoDB,进行锁表备份,copy所有的非innoDB表文件 2. 针对InnoDB表,立即触发CKPT,copy所有InnoDB表相关的文件(ibdata1,ibd,frm). 并且将备份过程中产生,新的数据变化的部分redo一起备份走 3. 在恢复时,xbk会调用InnoDB引擎的CSR过程,将数据和redo的LSN追平,然后进行一致性恢复. 7.3.2 备份过程 (1) 全备 [root@db01 backup] # innobackupex --user=root --password=123 --no-timestamp /backup/full (2) 利用全备进行恢复 1. [root@db01 ~] # pkill mysqld 2. [root@db01 ~] # \rm -rf /data/mysql/data/* 3. ***** [root@db01 ~] # innobackupex --apply-log /backup/full/ 4. [root@db01 full] # cp -a /backup/full/* /data/mysql/data/ 5. [root@db01 full] # chown -R mysql.mysql /data/mysql/data/* 6. [root@db01 full] # /etc/init.d/mysqld start |
初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能