网站分几种类型,厦门网站建设公司电话,做网站不知道做什么内容的,上海开发公司文章目录 备份类型备份内容备份工具mysqldump备份 实战案例#xff1a;恢复误删除的表准备工作2:30完全备份完全备份后更新数据表10:00误删students表需要恢复还原的状态开始还原恢复 为什么要备份#xff1f; 备份是为了#xff1a;灾难恢复#xff1a;硬件故障、软件故障… 文章目录 备份类型备份内容备份工具mysqldump备份 实战案例恢复误删除的表准备工作2:30完全备份完全备份后更新数据表10:00误删students表需要恢复还原的状态开始还原恢复 为什么要备份 备份是为了灾难恢复硬件故障、软件故障、自然灾害、黑客攻击、误操作等数据丢失场景。备份类型
完全备份整个数据集
部分备份只备份数据子集如部分库或表
增量备份仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据备份加快还原复杂
差异备份仅备份最近一次完全备份以来变化的数据备份较慢还原简单。冷备份读写操作均不可进行数据库停止服务
温备份读操作可执行但写操作不可执行
热备份读写操作均可执行MyISAM: 温备不支持热备
InnoDB: 都支持物理备份直接复制数据文件进行备份与存储引擎有关占用较多的空间速度快
逻辑备份从数据库中“导出”数据另存而进行备份与存储引擎无关占用空间少速度慢可能丢失精度。注意二进制日志文件不应该与数据文件放在同一磁盘。
备份内容
备份什么1.数据2.二进制日志、InnoDB的事务日志3.用户账号权限设置程序代码(存储过程、函数、触发器事件调度器)4.服务器的配置文件备份工具
mysqldump备份
命令格式
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]实战案例恢复误删除的表
案例说明每天凌晨2:30做完全备份早上10:00误删除了students表10:10才发现故障现在需要将数据库还原到10:10的状态且恢复被删除的students表。准备工作
恢复数据之前的准备工作1.准备数据库和数据表2.确保二进制日志已经开启现有hellodb数据库中的students、teachers…等数据表
mysql use hellodb;
Database changedmysql show tables;
-------------------
| Tables_in_hellodb |
-------------------
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
-------------------
7 rows in set (0.01 sec)现students、teachers表中有如下数据
mysql select * from students;
-------------------------------------------------------
| StuID | Name | Age | Gender | ClassID | TeacherID |
-------------------------------------------------------
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |......
| 24 | Xu Xian | 27 | M | NULL | NULL |
| 25 | Sun Dasheng | 100 | M | NULL | NULL |
-------------------------------------------------------
25 rows in set (0.00 sec)mysql select * from teachers;
---------------------------------
| TID | Name | Age | Gender |
---------------------------------
| 1 | Song Jiang | 45 | M |
......
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
---------------------------------
4 rows in set (0.01 sec)确认二进制日志是否开启
#确认log_bin和sql_log_bin这两个变量是否为1mysql select log_bin;
-----------
| log_bin |
-----------
| 1 |
-----------mysql select sql_log_bin;
---------------
| sql_log_bin |
---------------
| 1 |
---------------目前二进制日志文件的位置
mysql show master logs;
-------------------------------------
| Log_name | File_size | Encrypted |
-------------------------------------
| binlog.000001 | 10753 | No |
-------------------------------------
# 执行备份之前二进制日志文件文件名为binlog.000001文件大小(File_size)在10753处2:30完全备份
[rootrocky ~]# mysqldump -uroot -F -A --single-transaction --master-data2 /data/full_date %F.sql
WARNING: --master-data is deprecated and will be removed in a future version. Use --source-data instead.
[rootrocky ~]# mysqldump -uroot -F -A --single-transaction --source-data2 /data/full_date %F.sql
[rootrocky ~]# master-data参数mysql8.0.26以后的版本改为source-data了上面的WARNING中有提示我的这个是8.0.32版本的full_2024-03-29.sql中记录着二进制日志文件的位置,如下截图
完全备份后更新数据表 在完全备份之后系统可能做了很多的数据库操作更多的操作会导致越来越多的二进制文件生成binlog.000004、binlog.000005…等等
我们可以使用flush log来模拟下生成了多个二进制日志文件
mysql flush logs;
Query OK, 0 rows affected (0.03 sec)mysql show master logs;
-------------------------------------
| Log_name | File_size | Encrypted |
-------------------------------------
| binlog.000001 | 10797 | No |
| binlog.000002 | 201 | No |
| binlog.000003 | 809 | No |
| binlog.000004 | 157 | No |
-------------------------------------
4 rows in set (0.00 sec)mysql insert students (name,age,gender) values(leilei,20,F);
Query OK, 1 row affected (0.00 sec)mysql insert students (name,age,gender) values(mengm,18,M);
Query OK, 1 row affected (0.00 sec)mysql show master logs;
-------------------------------------
| Log_name | File_size | Encrypted |
-------------------------------------
| binlog.000001 | 10797 | No |
| binlog.000002 | 201 | No |
| binlog.000003 | 809 | No |
| binlog.000004 | 768 | No |
-------------------------------------
4 rows in set (0.00 sec)10:00误删students表
mysql drop table students;
Query OK, 0 rows affected (0.01 sec)
students表误删后teachers表还在持续更新中
mysql drop table students;
Query OK, 0 rows affected (0.01 sec)mysql insert teachers (name,age,gender) values(wang,30,M);
Query OK, 1 row affected (0.00 sec)mysql insert teachers (name,age,gender) values(mage,28,M);
Query OK, 1 row affected (0.01 sec)mysql select * from teachers;
---------------------------------
| TID | Name | Age | Gender |
---------------------------------
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | wang | 30 | M |
| 6 | mage | 28 | M |
---------------------------------
6 rows in set (0.00 sec)需要恢复还原的状态
此时继2:30的完全备份后我们需要恢复还原哪些数据
继2:30的完全备份后我们需要恢复1.students表更新的4条记录2.十点钟误删的students表3.teachers表更新的2条记录开始还原恢复
在做数据的恢复还原之前有几句心得不知当讲不当讲
还是讲吧“不要拿生产做测试啊”这是领导怼我的原话。懂我意思吧能感受到语气的气浪吗记住哥们就算你再有把握恢复也请单独拿一个测试机出来真正恢复出来了再上生产切记切记切记程序数据这玩意儿你还真得信邪搞不好生产环境被你弄成一锅粥还不如不恢复
我们将备份出来的sql拷贝到另一个远程主机上做测试
2:30的完全备份后的数据跟新是从二进制日志文件的开始的所以完全备份之后的更新数据是之后的所有内容 将二进制备份出来的内容导入到一个sql文件中
[rootrocky ~]# mysqlbinlog --start-position157 /var/lib/mysql/binlog.000003 /data/inc.sql
[rootrocky ~]# mysqlbinlog /var/lib/mysql/binlog.000004 /data/inc.sql
[rootrocky ~]#已经将2:30的数据完全备份(full_2024-03-29.sql)和10:00更新的数据(inc.sql)都备份出相应的sql文件了。 因为inc.sql中有drop table students的语句所以我们要找到这个误删除的语句搞掉这个drop语句之后再恢复还原。
[rootrocky data]# grep -i drop inc.sql
DROP TABLE students /* generated by server */
[rootrocky data]# sed -n /DROP TABLE students/p inc.sql
DROP TABLE students /* generated by server */
[rootrocky data]# sed -i /DROP TABLE students/d inc.sql
[rootrocky data]# sed -n /DROP TABLE students/p inc.sql
[rootrocky data]#将备份出来的sql文件拷贝到另一台远程主机10.0.0.206的data目录下先在206这台机器上做测试还原没问题了再在原来的主机上还原恢复。
[rootrocky data]# scp /data/* 10.0.0.206:/data
The authenticity of host 10.0.0.206 (10.0.0.206) cant be established.
ECDSA key fingerprint is SHA256:jXjzWTy4SJ9SVHPzyzO0XRP60n9QAWDC5kwQBX/tc0U.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 10.0.0.206 (ECDSA) to the list of known hosts.
root10.0.0.206s password:
full_2024-03-29.sql 100% 1262KB 106.0MB/s 00:00
inc.sql 100% 12KB 14.7MB/s 00:00
[rootrocky data]# 执行远程拷贝过来的sql原文件
mysql source /data/full_2024-03-29.sql;mysql source /data/inc.sql;如下图已经将2:30分的完全备份和2:30到10:00之前的新增数据都还原恢复了