在实际项目中对于数据库的安全是重中之重,为防万一我们需要做好备份工作。备份分为全量备份和增量备份,今天我们就来实践下备份和还原操作。

一、为什么需要备份

在生产环境中数据库可能会遭遇到各种各样的不测从而导致数据丢失, 大致上可以分为以下几种:

  • 硬件故障
  • 软件故障
  • 自然灾害
  • 黑客攻击
  • 误操作 (占比最大)

所以, 为了在数据丢失之后能够有效地恢复数据, 我们就需要定期的备份数据。备份数据的策略需要根据不同的应用场景进行定制, 大致有如下几个参考事项:

  • 备份需要锁定数据库资源多长时间?(是否影响业务)
  • 备份所需要的时长?
  • 备份时服务器的负载情况如何?
  • 数据恢复所需要的时长?

我们可以根据这些参考事项定制符合特定环境中的数据备份策略。

二、备份方式分类

MySQL 的备份方式多种多样,可以根据备份手段、备份的数据范围及备份时数据服务是否在线等来划分。

2.1 备份手段

  • 物理备份

    是指备份时直接复制备份数据库的数据文件。
  • 逻辑备份

    是指备份时,是使用备份工具从数据库导出数据库的一个或多个备份文件。

2.2 备份的数据范围

  • 全量备份

    是指将整个数据库内容做完整的备份。
  • 增量备份

    是指仅备份自上一次完全备份或增量备份之后所增加的数据内容。
  • 差异备份

    是指仅备份自上一个完全备份之后所增加的内容。
  • 事务日志备份

    事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性(健壮和强壮的意思),推荐每小时甚至更频繁的备份事务日志。

2.3 备份时数据服务是否在线

  • 热备份

    是指在不停用数据库所提供的数据服务的读写操作下所做的备份。
  • 冷备份

    是指在停用数据库所提供的数据服务的读写操作下进行备份。
  • 温备份

    是指在停用数据库的写入操作,但不停用读取操作的情况下进行备份。

三、备份工具对比

备份方法 备份速度 恢复速度 便捷性 功能 使用场景 提供者
cp 一般、灵活性低 少量数据备份 liunx 系统提供
mysqldump 一般、可无视存储引擎的差异 一般 中小型数据量的备份 MySQL自带
xtrabackup 较快 较快 实现innodb热备、对存储引擎有要求 强大 较大规模的备份 percona提供

四、准备工作

4.1 查看 MySQL 运行状态:

[root@VM_0_15_centos tmp]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2019-07-09 08:40:19 CST; 1 months 11 days ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 2922 (mysqld)
Tasks: 36
Memory: 4.6M
CGroup: /system.slice/mysqld.service
└─2922 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid Jul 09 08:40:18 VM_0_15_centos systemd[1]: Starting MySQL Server...
Jul 09 08:40:19 VM_0_15_centos systemd[1]: Started MySQL Server.

4.2 进入mysql

[root@VM_0_15_centos etc]# mysql -uroot -p

4.3 查看当前数据库

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

4.4 新建数据库

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

4.5 新建表

mysql> use test;
Database changed
mysql> create table sys_user(id int ,name varchar(50));
Query OK, 0 rows affected (0.11 sec)

4.6 插入记录

mysql> insert into sys_user values(1,'a');
Query OK, 1 row affected (0.02 sec)

五、cp 方式备份

5.1 创建备份目录

[root@VM_0_15_centos mysql]# mkdir -p /backup/cp

5.2 拷贝源数据文件

[root@VM_0_15_centos cp]# cp -a /var/lib/mysql/test /backup/cp
[root@VM_0_15_centos cp]# ll
total 4
drwxr-x--- 2 mysql mysql 4096 Aug 20 15:20 test

5.3 模拟数据丢失(将文件删除)

[root@VM_0_15_centos cp]# rm -rf /var/lib/mysql/test

5.4 查看数据库列表

[root@VM_0_15_centos cp]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

可以看到 test 数据库已经不存在了。

5.5 将数据库文件还原并重启服务

[root@VM_0_15_centos cp]# cp -a /backup/cp/test /var/lib/mysql
[root@VM_0_15_centos cp]# systemctl restart mysqld

5.6 验证数据

[root@VM_0_15_centos cp]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec) mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> select * from sys_user;
+------+------+
| id | name |
+------+------+
| 1 | a |
+------+------+
1 row in set (0.00 sec)

可以看到 test 数据库还原成功

六、mysqldump 方式备份

6.1 创建备份目录

[root@VM_0_15_centos mysql]# mkdir -p /backup/mysqldump

6.2 备份数据库数据文件

[root@VM_0_15_centos mysqldump]# mysqldump -uroot -p test > /backup/mysqldump/test.sql
Enter password:
[root@VM_0_15_centos mysqldump]# ll
total 4
-rw-r--r-- 1 root root 1846 Aug 21 09:47 test.sql

6.3 模拟数据丢失(将文件删除,生产环境谨慎操作)

[root@VM_0_15_centos mysqldump]# rm -rf /var/lib/mysql/test

该步骤无效,导致之后还原操作有问题,我这边直接重新部署了全新的 MySQL 进行还原。

6.4 查看数据库列表

[root@VM_0_15_centos mysqldump]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

6.5 还原数据

[root@VM_0_15_centos mysqldump]# mysqladmin -uroot -p create test
Enter password:
[root@VM_0_15_centos ~]# mysql -uroot -p test < /backup/mysqldump/test.sql
Enter password:

6.6 验证数据

[root@VM_0_15_centos ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.27 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.01 sec) mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> select * from sys_user;
+------+------+
| id | name |
+------+------+
| 1 | a |
+------+------+
1 row in set (0.00 sec)

可以看到数据已还原。

七、xtrabackup 方式备份

7.1 创建备份

[root@VM_0_15_centos backup]# xtrabackup --uroot -p123456 --databases=test --backup --target-dir=/backup/xtrabackup/

如果目标目录不存在,xtrabackup 会创建它。xtrabackup不会覆盖现有文件,如果目标文件已存在它会因操作系统错误17而失败。

7.2 准备备份

xtrabackup --prepare --target-dir=/backup/xtrabackup/

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处理不一致状态。--prepare参数实现通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。

7.3 修改数据

[root@VM_0_15_centos xtrabackup]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec) mysql> drop database test;
Query OK, 1 row affected (0.11 sec) mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

7.4 恢复备份

[root@VM_0_15_centos xtrabackup]# systemctl stop mysqld # 关闭 MySQL 服务
[root@VM_0_15_centos xtrabackup]# rsync -avrP /backup/xtrabackup/ /var/lib/mysql/ # 还原数据
[root@VM_0_15_centos xtrabackup]# chown -R mysql:mysql /var/lib/mysql
[root@VM_0_15_centos xtrabackup]# systemctl start mysqld # 重启 MySQL 服务

7.5 验证数据

[root@VM_0_15_centos xtrabackup]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.27 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.01 sec) mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> select * from sys_user;
+------+------+
| id | name |
+------+------+
| 1 | a |
+------+------+
1 row in set (0.00 sec)

可以看到数据已还原。

MySQL之备份和还原的更多相关文章

  1. 转 MySQL 数据备份与还原

    MySQL 数据备份与还原 原贴:http://www.cnblogs.com/kissdodog/p/4174421.html   一.数据备份 1.使用mysqldump命令备份 mysqldum ...

  2. Linux下MySQL的备份与还原

    Linux下MySQL的备份与还原 1. 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [roo ...

  3. Mysql数据库备份和还原常用的命令

    Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下 ...

  4. [转]MySQL数据库备份和还原的常用命令小结

    MySQL数据库备份和还原的常用命令小结,学习mysql的朋友可以参考下: 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword datab ...

  5. MySQL的备份和还原

    MySQL的备份和还原 备份:副本    RAID1,RAID10:保证硬件损坏而不会业务中止:        DROP TABLE mydb.tb1; 备份类型:        热备份.温备份和冷备 ...

  6. mysql数据备份和还原命令

    mysql数据库备份和还原   备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfil ...

  7. MySQL的备份与还原

    原文:MySQL的备份与还原 MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | c ...

  8. MySQL的备份与还原以及常用数据库查看命令

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serv ...

  9. mysql数据库备份与还原(转)

    MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Linux下MySQL的备份与还原 1.1 备份 [root@localhost ~]# cd /var/ ...

  10. MySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码 这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 一.数据备份 1.使用 ...

随机推荐

  1. 在工作中常用的Linux命令

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 之前写过一篇 < 在公司做的项目和自己在学校做 ...

  2. C#编程.异常处理(Exception Handling Statements)

    C#语言包含结构化异常处理(Structured Exception Handling,SEH). throw The throw statement is used to signal the oc ...

  3. 准备开始,选好第一个C#的封装库

    如今C#做工业图像处理和开发,最多资料和例子的就是Emgu.不过现在人家开始商业收费了,对于我们这些小企业就不是很好了.这里,我要介绍和推荐的是另外一个也同样牛逼的C#封装Opnecv的库,叫做Ope ...

  4. 爬虫之解析库pyquery

    初始化 安装: pip install pyquery 字符串的形式初始化 html = """ <html lang="en"> < ...

  5. jsp数据交互(一).2

    01.什么是JSP内置对象(jsp核心)? Java 内置对象 Java  作用域 解析:jsp内置对象是web容器创建的一组对象.我们都知道tomcat这款软件可以看成是一种web容器,所以我们可以 ...

  6. Spring 源码注解

    一.@Retention可以用来修饰注解,是注解的注解,称为元注解.     Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolic ...

  7. HC-08 BLE资料

    1.1 特点简介 HC-08蓝牙串口通信模块是新一代的基于Bluetooth Specification V4.0 BLE蓝牙协议的数传模块.无线工作频段为 2.4GHz ISM,调制方式是 GFSK ...

  8. c#小灶——使用visual studio编写第一个程序

    虽然,写程序有文本编辑器和编译器就已经足够,但是,我们为了增加工作效率还是要使用IDE. 我们接下来所有的教程都将会在visual studio中实现,visual studio简称vs,是微软开发的 ...

  9. CSS3 filter 模糊滤镜的应用

    CSS3 filter 模糊滤镜的应用   在segmentfault上回答过的一个问题,如何将网页CSS背景图高斯模糊且全屏显示当时没有深入了解,只觉得滤镜应该只是应用于图片上的.而且各大网站的de ...

  10. Java性能权威指南读书笔记--之二

    新生代填满时,垃圾收集器会暂停所有的应用线程,回收新生代空间.这种操作被称为Minor GC. 老年代被填满时,垃圾收集器会暂停所有应用线程,对其进行回收,接着对堆空间进行整理.这个过程被称为Full ...