千家信息网

MySQL——全量,增量备份与恢复(实战篇!)

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,一,全量备份与恢复1,进入数据库,创建表,插入表数据[root@master2 ~]# mysql -uroot -p ##进入数据库Enter password: mysql> create d
千家信息网最后更新 2026年11月04日MySQL——全量,增量备份与恢复(实战篇!)

一,全量备份与恢复

1,进入数据库,创建表,插入表数据

[root@master2 ~]# mysql -uroot -p   ##进入数据库Enter password: mysql> create database school;    ##创建数据库Query OK, 1 row affected (0.01 sec)mysql> use school;   ##使用数据库Database changedmysql> create table info(    ##创建表        -> id int(3) not null primary key auto_increment,        -> name varchar(10) not null,        -> score decimal(4,1) not null);Query OK, 0 rows affected (0.02 sec)mysql> desc info;   ##查看表结构+-------+--------------+------+-----+---------+----------------+| Field | Type         | Null | Key | Default | Extra          |+-------+--------------+------+-----+---------+----------------+| id    | int(3)       | NO   | PRI | NULL    | auto_increment || name  | varchar(10)  | NO   |     | NULL    |                || score | decimal(4,1) | NO   |     | NULL    |                |+-------+--------------+------+-----+---------+----------------+3 rows in set (0.00 sec)mysql> insert into info (name,score) values ('stu01',88),('stu02',77);   ##插入表数据Query OK, 2 rows affected (0.02 sec)Records: 2  Duplicates: 0  Warnings: 0mysql> select * from info;   ##查看表内容+----+-------+-------+| id | name  | score |+----+-------+-------+|  1 | stu01 |  88.0 ||  2 | stu02 |  77.0 |+----+-------+-------+2 rows in set (0.01 sec)mysql> select * from info limit 1;   ##只显示表中的前1行+----+-------+-------+| id | name  | score |+----+-------+-------+|  1 | stu01 |  88.0 |+----+-------+-------+1 row in set (0.00 sec)

2,对数据库进行物理的完全备份

[root@master2 ~]# cd /usr/local/mysql/data/   ##切换到数据库的数据目录下[root@master2 data]# lsauto.cnf        ibdata1      ib_logfile1  mysql               school  testib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  sys[root@master2 data]# cd school/[root@master2 school]# ls   ##数据中的文件db.opt  info.frm  info.ibd[root@master2 school]# cd ..[root@master2 data]# tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/ ##用xz格式压缩[root@master2 data]# cd /opt/[root@master2 opt]# lsmysql-2019-11-26.tar.xz  mysql-5.7.20  rh

3,对单个数据库进行逻辑上的备份

[root@master2 opt]# mysqldump -uroot -p school > /opt/school.sql  ##逻辑备份单个数据库Enter password: [root@master2 opt]# lsmysql-2019-11-26.tar.xz  mysql-5.7.20  rh  school.sql[root@master2 opt]# vim school.sql  ##查看备份数据库脚本...CREATE TABLE `info` (    `id` int(3) NOT NULL AUTO_INCREMENT,    `name` varchar(10) NOT NULL,    `score` decimal(4,1) NOT NULL,    PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;...LOCK TABLES `info` WRITE;/*!40000 ALTER TABLE `info` DISABLE KEYS */;INSERT INTO `info` VALUES (1,'stu01',88.0),(2,'stu02',77.0);...

4,对多个数据库进行备份

[root@master2 opt]# mysqldump -uroot -p --databases school mysql > /opt/db_school_mysql.sql##备份多个数据库Enter password: [root@master2 opt]# lsdb_school_mysql.sql  mysql-2019-11-26.tar.xz  mysql-5.7.20  rh  school.sql

5,对数据库进行完全备份

[root@master2 opt]# mysqldump -uroot -p --opt --all-databases > /opt/all.sql ##完全备份Enter password: [root@master2 opt]# lsall.sql              mysql-2019-11-26.tar.xz  rhdb_school_mysql.sql  mysql-5.7.20             school.sql

6,对数据库中的表进行备份

[root@master2 opt]# mysqldump -uroot -p school info > /opt/school_info.sql ##对数据库中的表进行备份Enter password: [root@master2 opt]# lsall.sql              mysql-2019-11-26.tar.xz  rh               school.sqldb_school_mysql.sql  mysql-5.7.20             school_info.sql

7,对数据库中的表结构进行备份

[root@master2 opt]# mysqldump -uroot -p -d school info > /opt/school_info_desc.sql  ##对表结构进行备份Enter password: [root@master2 opt]# lsall.sql                  mysql-5.7.20          school_info.sqldb_school_mysql.sql      rh                    school.sqlmysql-2019-11-26.tar.xz  school_info_desc.sql

8,基于脚本恢复数据库

[root@master2 opt]# mysql -uroot -p     ##进入数据库Enter password: mysql> show databases;   ##查看数据库+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || school             || sys                || test               |+--------------------+6 rows in set (0.00 sec)mysql> use school;    ##使用数据库Database changedmysql> show tables;   ##查看表+------------------+| Tables_in_school |+------------------+| info             |+------------------+1 row in set (0.00 sec)mysql> drop table info;    ##删除表Query OK, 0 rows affected (0.01 sec)mysql> show tables;        ###查看表Empty set (0.00 sec)mysql> source /opt/school.sql  ##恢复数据库脚本文件mysql> show tables;    ##查看表+------------------+| Tables_in_school |+------------------+| info             |+------------------+1 row in set (0.00 sec)

9,基于外部MySQL命令恢复数据库

mysql> drop table info;   ##删除表Query OK, 0 rows affected (0.01 sec)mysql> show tables;   ##查看表Empty set (0.00 sec)mysql> quit   ##退出Bye[root@master2 opt]# mysql -uroot -p123123 school < /opt/school.sql   ##利用mysql命令进行恢复mysql: [Warning] Using a password on the command line interface can be insecure.[root@master2 opt]# mysql -uroot -p123123    ##进入数据库mysql: [Warning] Using a password on the command line interface can be insecure.mysql> use school;    ##使用数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> show tables;   ##查看表+------------------+| Tables_in_school |+------------------+| info             |+------------------+1 row in set (0.00 sec)

二,MySQL增量备份及恢复

1,开启二进制日志文件

[root@master2 opt]# vim /etc/my.cnf  ##开启二进制日志文件[mysqld]user = mysqlbasedir = /usr/local/mysqldatadir = /usr/local/mysql/dataport = 3306character_set_server=utf8pid-file = /usr/local/mysql/mysql.pidsocket = /usr/local/mysql/mysql.socklog-bin=mysql-bin   ##开启二进制日志文件server-id = 1[root@master2 opt]# systemctl restart mysqld.service   ##重启mysql服务[root@master2 opt]# cd /usr/local/mysql/data/   ##切换到mysql站点[root@master2 data]# ls     ##查看二进制日志文件auto.cnf        ib_logfile0  mysql             performance_schema  testib_buffer_pool  ib_logfile1  mysql-bin.000001  schoolibdata1         ibtmp1       mysql-bin.index   sys

2,进行完全备份

[root@master2 data]# mysqldump -uroot -p123123 school > /opt/school.sql ##一次完全备份mysqldump: [Warning] Using a password on the command line interface can be insecure.[root@master2 data]# lsauto.cnf        ib_logfile0  mysql             performance_schema  testib_buffer_pool  ib_logfile1  mysql-bin.000001  schoolibdata1         ibtmp1       mysql-bin.index   sys[root@master2 data]# mysqladmin -uroot -p123123 flush-logs  ##刷新二进制日志文件mysqladmin: [Warning] Using a password on the command line interface can be insecure.[root@master2 data]# ls     ##生成新的二进制日志文件,接下来的操作会保存在mysql-bin.000002中auto.cnf        ib_logfile0  mysql             mysql-bin.index     sysib_buffer_pool  ib_logfile1  mysql-bin.000001  performance_schema  testibdata1         ibtmp1       mysql-bin.000002  school

3,进入数据库,模拟误操作

[root@master2 data]# mysql -uroot -p123123  ##进入数据库mysql: [Warning] Using a password on the command line interface can be insecure.mysql> use school;    ##使用数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from info;  ##查看表+----+------+-------+| id | name | score |+----+------+-------+|  1 | st01 |  88.0 ||  2 | st02 |  77.0 |+----+------+-------+2 rows in set (0.00 sec)mysql> insert into info (name,score) values ('by01',66);   ##正确操作Query OK, 1 row affected (0.00 sec)mysql> select * from info;+----+------+-------+| id | name | score |+----+------+-------+|  1 | st01 |  88.0 ||  2 | st02 |  77.0 ||  3 | by01 |  66.0 |+----+------+-------+3 rows in set (0.00 sec)mysql> delete from info where name='st01';   ##错误操作Query OK, 1 row affected (0.00 sec)mysql> insert into info (name,score) values ('by02',99); ##正确操作Query OK, 1 row affected (0.00 sec)mysql> select * from info;+----+------+-------+| id | name | score |+----+------+-------+|  2 | st02 |  77.0 ||  3 | by01 |  66.0 ||  4 | by02 |  99.0 |+----+------+-------+3 rows in set (0.00 sec)[root@master2 data]# mysqladmin -uroot -p123123 flush-logs    ##刷新二进制日志文件        mysqladmin: [Warning] Using a password on the command line interface can be insecure.[root@master2 data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 > /opt/bak.txt##用64位解码器查看二进制日志文件,并生成一个文件[root@master2 data]# cd /opt/[root@master2 opt]# lsbak.txt  mysql-5.7.20  rh  school.sql[root@master2 opt]# vim bak.txt    ##查看二进制日志文件# at 1084#191127 20:14:01 server id 1  end_log_pos 1132 CRC32 0xdcc90eb5         Write_rows: table id 221 flags: STMT_END_F### INSERT INTO `school`.`info`   ##第一次正确操作的时间和位置### SET###   @1=3###   @2='by01'###   @3=66.0...# at 1302   ##停止位置点#191127 20:14:46 server id 1  end_log_pos 1357 CRC32 0x6648509a         Table_map: `school`.`info` mapped to number 221# at 1357#191127 20:14:46 server id 1  end_log_pos 1405 CRC32 0x1eeb752b         Delete_rows: table id 221 flags: STMT_END_F### DELETE FROM `school`.`info`   ##第二次执行错误操作的时间和位置191127 20:14:46### WHERE###   @1=1###   @2='st01'###   @3=88.0# at 1405  ##开始位置点#191127 20:14:46 server id 1  end_log_pos 1436 CRC32 0xf1c8d903         Xid = 54...# at 1630#191127 20:15:16 server id 1  end_log_pos 1678 CRC32 0x08d9b0f4         Write_rows: table id 221 flags: STMT_END_F### INSERT INTO `school`.`info`   ##第二次正确操作的时间和位置191127 20:15:16### SET###   @1=4###   @2='by02'###   @3=99.0

4,基于时间点进行断点恢复

[root@master2 opt]# mysql -uroot -p123123   ##进入数据库mysql: [Warning] Using a password on the command line interface can be insecure.mysql> use school;  ##使用数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> drop table info;   ##删除数据库Query OK, 0 rows affected (0.01 sec)mysql> select * from info;   ##查看表ERROR 1146 (42S02): Table 'school.info' doesn't existmysql> source /opt/school.sql   ##恢复完全备份数据库脚本...mysql> show tables;   ##查看表+------------------+| Tables_in_school |+------------------+| info             |+------------------+1 row in set (0.00 sec)mysql> select * from info;  ##查看表数据+----+------+-------+| id | name | score |+----+------+-------+|  1 | st01 |  88.0 ||  2 | st02 |  77.0 |+----+------+-------+2 rows in set (0.00 sec)[root@master2 opt]# mysqlbinlog --no-defaults --stop-datetime='2019-11-27 20:14:46' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123##恢复bin.000002中前一个正确的执行语句(从第二个错误语句时间点停止)mysql: [Warning] Using a password on the command line interface can be insecure.[root@master2 opt]# mysql -uroot -p123123   ##进入数据库mysql: [Warning] Using a password on the command line interface can be insecure.mysql> use school;  ##使用数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from info;   ##查看表数据,恢复了第一次正确操作+----+------+-------+| id | name | score |+----+------+-------+|  1 | st01 |  88.0 ||  2 | st02 |  77.0 ||  3 | by01 |  66.0 |+----+------+-------+3 rows in set (0.00 sec)[root@master2 opt]# mysqlbinlog --no-defaults --start-datetime='2019-11-27 20:15:16' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123   ##跳过错误节点,恢复最后一个正确的操作(从最后一个正确的操作时间点开始)mysql: [Warning] Using a password on the command line interface can be insecure.[root@master2 opt]# mysql -uroot -p123123  ##进入数据库mysql: [Warning] Using a password on the command line interface can be insecure.mysql> use school;   ##使用数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from info;    ##查看表数据,恢复了第二次正确操作,跳过了错误的操作+----+------+-------+| id | name | score |+----+------+-------+|  1 | st01 |  88.0 ||  2 | st02 |  77.0 ||  3 | by01 |  66.0 ||  4 | by02 |  99.0 |+----+------+-------+4 rows in set (0.00 sec)

5,基于位置点进行断点恢复

mysql> delete from info where name='by01';    ##为实验方便直接删除Query OK, 1 row affected (0.01 sec)mysql> delete from info where name='by02';    ##删除Query OK, 1 row affected (0.00 sec)mysql> select * from info;  ##完全备份的初始状态+----+------+-------+| id | name | score |+----+------+-------+|  1 | st01 |  88.0 ||  2 | st02 |  77.0 |+----+------+-------+2 rows in set (0.00 sec)mysql> quitBye[root@master2 opt]# mysqlbinlog --no-defaults --stop-position='1302' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123                           ##跳过错误操作的位置点从上一个位置点开始[root@master2 opt]# mysql -uroot -p123123   ##进入数据库mysql: [Warning] Using a password on the command line interface can be insecure.mysql> use school;    ##使用数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from info;   ##查看表数据,恢复了第一次正确的操作+----+------+-------+| id | name | score |+----+------+-------+|  1 | st01 |  88.0 ||  2 | st02 |  77.0 ||  3 | by01 |  66.0 |+----+------+-------+3 rows in set (0.00 sec)mysql> quitBye[root@master2 opt]# mysqlbinlog --no-defaults --start-position='1405' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123   ##从错误的位置后一个位置点开始,跳过错误操作的位置点[root@master2 opt]# mysql -uroot -p123123   ##进入数据库mysql: [Warning] Using a password on the command line interface can be insecure.mysql> use school;   ##使用数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from info;    ##查看表数据,跳过错误操作,恢复第二次正确操作数据+----+------+-------+| id | name | score |+----+------+-------+|  1 | st01 |  88.0 ||  2 | st02 |  77.0 ||  3 | by01 |  66.0 ||  4 | by02 |  99.0 |+----+------+-------+4 rows in set (0.00 sec)

6,对于增量备份全部恢复

[root@master2 opt]# mysqlbinlog --no-defaults  /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123##全部增量恢复

谢谢阅读!

数据 数据库 备份 文件 位置 二进制 日志 时间 错误 脚本 过错 增量 第一次 结构 单个 多个 断点 语句 逻辑 切换 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 易通互联网络科技有限公司 友谊互联网络科技 深圳天众互联网科技公司 狮子座互联网科技培训 长亮科技 互联网金融 科技互联网创业计划书 佰商互联网科技有限公司 深圳卡尔迅互联网科技有限公司怎么样 哈尔滨秒房互联网科技有限公司 随着互联网科技发展 武汉健翔互联网络科技有限公司 晓花互联网科技有限公司网址 深圳市优智互联网科技有限公司 浙南科技城互联网大厦建设工程 如何创新互联网科技 用友工业互联网科技发展 互联网科技如何创业 杭州披云加互联网科技有限公司 下一代互联网重大应用科技园 宁波允成互联网科技有限公司 互联网科技公司的优势 期待互联网科技 有马互联网科技 南京欣网互联网科技 苏州大垚互联网科技 湖南诚度互联网科技有限公司 互联网科技商业 黑科技 体验场景 互联网大会 图游互联网科技 扫呗互联网科技有限公司
0