MySQL之备份和还原
在实际项目中对于数据库的安全是重中之重,为防万一我们需要做好备份工作。备份分为全量备份和增量备份,今天我们就来实践下备份和还原操作。
一、为什么需要备份
在生产环境中数据库可能会遭遇到各种各样的不测从而导致数据丢失, 大致上可以分为以下几种:
- 硬件故障
- 软件故障
- 自然灾害
- 黑客攻击
- 误操作 (占比最大)
所以, 为了在数据丢失之后能够有效地恢复数据, 我们就需要定期的备份数据。备份数据的策略需要根据不同的应用场景进行定制, 大致有如下几个参考事项:
- 备份需要锁定数据库资源多长时间?(是否影响业务)
- 备份所需要的时长?
- 备份时服务器的负载情况如何?
- 数据恢复所需要的时长?
我们可以根据这些参考事项定制符合特定环境中的数据备份策略。
二、备份方式分类
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之备份和还原的更多相关文章
- 转 MySQL 数据备份与还原
MySQL 数据备份与还原 原贴:http://www.cnblogs.com/kissdodog/p/4174421.html 一.数据备份 1.使用mysqldump命令备份 mysqldum ...
- Linux下MySQL的备份与还原
Linux下MySQL的备份与还原 1. 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [roo ...
- Mysql数据库备份和还原常用的命令
Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下 ...
- [转]MySQL数据库备份和还原的常用命令小结
MySQL数据库备份和还原的常用命令小结,学习mysql的朋友可以参考下: 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword datab ...
- MySQL的备份和还原
MySQL的备份和还原 备份:副本 RAID1,RAID10:保证硬件损坏而不会业务中止: DROP TABLE mydb.tb1; 备份类型: 热备份.温备份和冷备 ...
- mysql数据备份和还原命令
mysql数据库备份和还原 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfil ...
- MySQL的备份与还原
原文:MySQL的备份与还原 MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | c ...
- MySQL的备份与还原以及常用数据库查看命令
MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serv ...
- mysql数据库备份与还原(转)
MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Linux下MySQL的备份与还原 1.1 备份 [root@localhost ~]# cd /var/ ...
- MySQL 数据备份与还原的示例代码
MySQL 数据备份与还原的示例代码 这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 一.数据备份 1.使用 ...
随机推荐
- vijos p1484 ISBN号码
#include<iostream>#include<string>#include<cctype>using namespace std;int main() { ...
- Java EE产生的背景
为了满足开发多层体系结构的企业级应用的需求,Java公司的创始人Sun公司在早期的J2SE(Java 2 Platform Standard Edition)基础上,针对企业级应用的各种需求,提出了J ...
- linux初学者-iscsi篇
linux初学者-iscsi篇 之前介绍过网络文件共享系统NFS和CIFS.在系统中,设备也是可以共享的,这就是iSCSI,它可以用来建立和管理IP存储设备.主机和客户机等之间的相互 ...
- springboot集成activiti6.0多数据源的配置
最近公司开始开发springboot的项目,需要对工作流进行集成.目前activiti已经发布了7.0的版本,但是考虑到6.0版本还是比较新而且稳定的,决定还是选择activiti6.0的版本进行集成 ...
- Hadoop自学系列集(四) ---- Hadoop集群
久等了,近期公司比较忙,学习的时间都没有啊,到今日才有时间呢!!!好了,下面就跟着笔者开始配置Hadoop集群吧. hosts文件和SSH免密码登录配置好了之后,现在进入Hadoop安装目录,修改一些 ...
- ES 23 - 检索和过滤的区别 (query vs. filter)
目录 1 filter与query示例 1.1 准备测试数据 1.2 搜索测试 2 filter与query的区别 2.1 相关度处理上的不同 2.2 性能上的对比 2.3 对比结论 本文以 ES 6 ...
- SparkStreaming对接rabbitMQ
/** * SparkStreaming对接rabbitmq java代码 */public class SparkConsumerRabbit { public static void main(S ...
- Python版:Selenium2.0之WebDriver学习总结_实例1
Python版:Selenium2.0之WebDriver学习总结_实例1 快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 实属转载:本人看的原文地址 :http:/ ...
- ERROR 临时
ERROR ITMS-4238: "Redundant Binary Upload. There already exists a binary upload with build vers ...
- 命令用法习题,yum仓库的创建 chapter02 - 03 作业
1. 分别用cat \tac\nl三个命令查看文件/etc/ssh/sshd_config文件中的内容,并用自己的话总计出这三个文档操作命令的不同之处? [root@localhost /]# ca ...