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

一、为什么需要备份

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

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

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

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

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

二、备份方式分类

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. 关于tomcat-startup.bat启动失败或者一闪而过问题解决记录

    一.前言 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说 ...

  2. 跟着大彬读源码 - Redis 6 - 对象和数据类型(下)

    继续撸我们的对象和数据类型. 上节我们一起认识了字符串和列表,接下来还有哈希.集合和有序集合. 1 哈希对象 哈希对象的可选编码分别是:ziplist 和 hashtable. 1.1 ziplist ...

  3. angularjs compine和link的区别

    [译]ng指令中的compile与link函数解析 04 September 2014 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre ...

  4. linux下的FTP安装及调优

    前言: 在之前交换平台的开发中,FTP的各种操作算是核心功能点. 在FTP的开发中,遇到了不少坑. 如FTP需要设置被动模式,否则10M以上的包可能会上传失败. 如FTP需要设置囚牢模式,否则访问的文 ...

  5. spark streaming 接收kafka消息之五 -- spark streaming 和 kafka 的对接总结

    Spark streaming 和kafka 处理确保消息不丢失的总结 接入kafka 我们前面的1到4 都在说 spark streaming 接入 kafka 消息的事情.讲了两种接入方式,以及s ...

  6. 思路重要or技术重要?

    1,思路串通代码的重要性 前段时间,同事在工作上出现一点难题,在技术大佬中看起来算是微不足道的一点小事,由于没有思路,代码也无从下手,他在百度上条框上搜索自己想要的答案,却始终没有比较理想的,大部分的 ...

  7. poj 1131 Octal Fractions(高精度小数进制转换) Java

    虽然题目那么长其实就是把8进制的浮点数转换成10进制,为了练习Java Biginteger 类 我这里用的是Java,也可以用数组模拟. import java.math.BigDecimal; i ...

  8. 【python-Django开发】Django 配置MySQL数据库讲解!!!

    官方文档请阅读:https://docs.djangoproject.com/en/1.11/ref/databases/#mysql-db-api-drivers 配置MySQL数据库 1. 新建M ...

  9. 按需制作最小的本地yum源

    [需求背景] 有时候客户的环境里面只能离线安装文件,此时可以使用CentOS的ISO光盘作为本地源进行安装,或者是制作一个包含了YUM源服务的虚拟机. 无论上面的哪一种方式都不够轻量,我们自己的组件可 ...

  10. mysql新建用户及授权

    添加用户 CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; -- username : 自定义用户名 -- localhost ...