MySQL完全备份与恢复

MySQL完全备份与恢复

技能目标

  • 掌握使用nysqldump进行备份方法
  • 掌握mysql数据恢复的方法

MySQL完全备份

1、数据库备份的重要性

(1)提高系统的高可用性和灾难可恢复性,在数据库崩溃时没有备份就无法找回以前的数据
(2)使用数据库备份还原数据库,是数据库崩溃时提供数据恢复的最小代价
(3)备份数据库是一种防范灾难的重要手段

2:数据库奔溃错误的几种原因

(1)程序错误:指对数据库操作程序出现错误造成数据丢失
(2)人为错误:指有人为原因造成的数据丢失和破坏
(3)计算机失败:指运行数据库服务器操作或软件损坏
(4)磁盘失败:指硬盘等存储数据的硬件设备,因长时间运行后造成的损坏而造成的数据丢失
(5)灾难(入火灾,地震)和偷窃:指发生自然灾害后造成的大量数据丢失

2、数据库备份的分类

(1)物理备份:指对数据库操作系统的物理文件(入数据文件、日志文件)的备份
冷备份:在数据库关闭状态下进行操作
热备份:在数据库运行状态下进行备份
(2)逻辑备份:指对数据逻辑组件(如表、数据库等对象)的备份

从备份角度可分为完全备份,差异备份,增量备份

(1)完全备份:每次对数据进行完整的备份
(2)差异备份:在完全备份后下面进行的操作进行备份但这个可能会造成重复备份
(3)增量备份:在完全备份后操作一次备份一次不会出现重复备份

mysql备份演练

物理备份

用tar打包的文件夹备份
#数据库文件都在/usr/local/mysql/data文件夹里
[root@localhost ~]# cd /usr/local/mysql/data/
[root@localhost data] ls #整个data文件夹进行备份
@94f6@884c@5ba2@6237@8868  ib_buffer_pool  ib_logfile0  ibtmp1  performance_schema  sys
auto.cnf                   ibdata1         ib_logfile1  mysql   shcool
[root@localhost ~] tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/
[root@localhost ~] cd /opt/
[root@localhost opt] ls #会压缩成tar.xz格式的压缩包
mysql-2018-07-02.tar.xz
[root@localhost opt] du -sh /usr/local/mysql/data/
134M    /usr/local/mysql/data/
[root@localhost opt] du -sh  #用du -sh查看包的大小节省了很多空间现在把data的文件夹删除都没事 /opt/mysql-2018-07-02.tar.xz 
704K    /opt/mysql-2018-07-02.tar.xz
#解压缩恢复数据文件
[root@localhost opt] tar Jxvf /opt/mysql-2018-07-02.tar.xz /usr/local/mysql/data/

逻辑备份

用mysqldump工具备份
格式
mysqldump -u 用户 -p [数据库名或表名] > /备份路径/备份文件名.sql #以.sql结尾
演示实例
mysql> show databases;  #对shcool数据库进行完全备份
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ×××表         |
| mysql              |
| performance_schema |
| shcool             |
| sys                |
+--------------------+
6 rows in set (0.00 sec)
[root@localhost opt]# mysqldump -u root -p shcool > /opt/shcool.sql #-p后面跟密码可以免交互
Enter password: 
[root@localhost opt]# ls
shcool.sql
对shcool数据库中info表进行备份
mysql> show tables;
+------------------+
| Tables_in_shcool |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)
[root@localhost opt] mysqldump -u root -p shcool info > /opt/info.sql
对多个数据库进行备份
格式
mysqldump -u root -p --databases [数据库] [数据库] > /备份路径/备份名
mysql> show databases;  #对shcool数据库和mysql数据库进行备份
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ×××表         |
| mysql              |
| performance_schema |
| shcool             |
| sys                |
+--------------------+
[root@localhost ~] mysqldump -u root -p --databases shcool mysql > /opt/shcool-mysql.sql
[root@localhost ~] cd /opt/
[root@localhost opt] ls
shcool-mysql.sql
对所有数据库进行备份
格式
mysqldump -u root -p --all-databases > /备份路径/备份名
[root@localhost opt] mysqldump -u root -p --all-databases > /opt/all.sql
Enter password:
[root@localhost opt] ls
all.sql        
备份表结构(因为有时候我们不需要表里面的数据只想要表的结构如果用create tables 创建表的话会很麻烦)下面就有一个只针对表结构进行备份
格式
mysqldump -u root -p -d [数据库名] [表名] > /备份路径/备份名
[root@localhost opt] mysqldump -u root -p -d mysql usr > /opt/usr.sql
Enter password: 
[root@localhost opt] ls
usr.sql

有备份就有恢复,恢复两种方法

1:source 在mysql数据库里进行操作
格式:mysql>source /备份的路径
2:mysql 不登陆数据库在Linux模式下操作
格式:[root@localhost ~] mysql -u root -p [恢复的数据库名] < /备份路径/备份的名

实例

source应用
#把备份的shcool数据库恢复(注数据库是由表构成的所以要恢复数据要先创建chcool的数据库进入数据库用source恢复)
mysql> show databases;  #这边没有shcool数据库先创建
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ×××表         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database shcool;  #创建数据库
Query OK, 1 row affected (0.00 sec)

mysql> show databases;         #已经有这个数据库了
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ×××表         |
| mysql              |
| performance_schema |
| shcool             |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> use shcool;  #进入数据库看有没有表
Database changed
mysql> show tables;  #里面没有任何表
Empty set (0.00 sec)
mysql> source /opt/shcool.sql
Query OK, 0 rows affected (0.00 sec)  #执行成功

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
mysql> show tables;    #数据库恢复成功
+------------------+
| Tables_in_shcool |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)

用mysql在linux模式下恢复数据库

#同样先创建同名数据库
[root@localhost opt] mysql -u root -p shcool < /opt/shcool.sql 
Enter password: 
[root@localhost opt] mysql -u root -p 
Enter password: 
mysql> show tables;   #恢复完成
+------------------+
| Tables_in_shcool |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)
总结一下:
恢复数据库,恢复数据库必须要有一个同名数据库才能恢复数据库里面的表不管用mysql命令还是source命令都是一样的

猜你喜欢

转载自blog.51cto.com/13645280/2135049