数据备份

备份概述

 

数据备份方式

物理备份

-冷备:cp、tar、.. ..·

逻辑备份

- mysqldump  //备份命令

- mysql    //恢复命令


物理备份及恢复

·备份操作
- cp   -r  /var/lib/mysql 备份目录/mysql.bak

- tar    -zcvf    /root/mysql.tar.gz        /var/lib/mysql/*

 

·恢复操作

- cp      -r   备份目录/mysql.bak  /var/lib/mysql/

- tar   -zxvf   /root/mysql.tar.gz    -C     /var/lib/mysqI/

- chown    -R      mysql:mysql          /var/lib/mysql


逻辑备份

数据备份策略

·完全备份
-备份所有数据

·增量备份
-备份上次备份后,所有新产生的数据

·差异备份
-备份完全备份后,所有新产生的数据


完全备份及恢复

·完全备份
]#mysqldump    -uroot      -p密码          库名>目录/xxx.sql

·完全恢复
]#mysql   -uroot    -p密码          [库名]<目录/xxx.sql

·备份时库名表示方式

- --all-databases或-A  //所有库

-数据库名    //单个库

一数据库名表名      //单张表

_ -B数据库1数据库2      //多个库

·注意事项
-无论备份还是恢复,都要验证用户权限!!!

 

·应用示例1

-将所有的库备份为allbak.sql文件

- 将db3库备份为db3.sql文件

[root@dbsvr1 ~]# mysqldump   -uroot   -p密码  -A   >allbak.sql

[root@dbsvr1 ~]# mysqldump   -uroot  -p密码  db3 > db3.sql

[root@dbsvr1 ~]# ls -lh *.sql
-rw-r--r--.1 root root 595K 1月2 13:54 allbak.sql

-rw-r--r--.1 root root 4.1K 1月2 13:55 db3.sql

应用示例2

-从备份文件db3.sql重建db3库实现思路
-先建空库,再执行恢复

·应用示例3

具体要求如下:

  • 练习mysqldump命令的使用
  • 使用 mysql 命令恢复删除的数据

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:练习mysqldump命令的使用

1)备份MySQL服务器上的所有库

将所有的库备份为mysql-all.sql文件:

[root@dbsvr1 ~]# mysqldump -u root -p --all-databases > /root/alldb.sql
Enter password:  								//验证口令
[root@dbsvr1 mysql]# file /root/alldb.sql  		//确认备份文件类型
/root/alldb.sql: UTF-8 Unicode English text, with very long lines

查看备份文件alldb.sql的部分内容:

[root@dbsvr1 ~]# grep -vE '^/|^-|^$' /root/alldb.sql | head -15
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `home` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `home`;
DROP TABLE IF EXISTS `biao01`;
CREATE TABLE `biao01` (
  `id` int(2) NOT NULL,
  `name` varchar(8) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOCK TABLES `biao01` WRITE;
UNLOCK TABLES;
DROP TABLE IF EXISTS `biao02`;
CREATE TABLE `biao02` (
  `id` int(4) NOT NULL,
  `name` varchar(8) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
.. ..

注意:若数据库都使用MyISAM存储引擎,可以采用冷备份的方式,直接复制对应的数据库目录即可;恢复时重新复制回来就行。

2)只备份指定的某一个库

将userdb库备份为userdb.sql文件:

[root@dbsvr1 ~]# mysqldump -u root -p userdb > userdb.sql
Enter password:  								//验证口令

查看备份文件userdb.sql的部分内容:

[root@dbsvr1 ~]# grep -vE '^/|^-|^$' /root/userdb.sql
DROP TABLE IF EXISTS `stu_info`;
CREATE TABLE `stu_info` (
  `name` varchar(12) NOT NULL,
  `gender` enum('boy','girl') DEFAULT 'boy',
  `age` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOCK TABLES `stu_info` WRITE;
.. ..

3)同时备份指定的多个库

同时备份mysql、userdb库,保存为mysql+userdb.sql文件:

[root@dbsvr1 ~]# mysqldump -u root -p -B mysql  userdb > mysql+test+userdb.sql
Enter password:  								//验证口令

查看备份文件userdb.sql的部分内容:

[root@dbsvr1 ~]# grep '^CREATE DATA' /root/mysql+userdb.sql
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `userdb` /*!40100 DEFAULT CHARACTER SET latin1 */;

步骤二:使用mysql 命令恢复删除的数据

以恢复userdb库为例,可参考下列操作。通常不建议直接覆盖旧库,而是采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃或删除旧库。

1)创建名为userdb2的新库

mysql> CREATE DATABASE userdb2;
Query OK, 1 row affected (0.00 sec)

2)导入备份文件,在新库中重建表及数据

[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql
Enter password:  								//验证口令

3)确认新库正常,启用新库

mysql> USE userdb2;  							//切换到新库
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 sn,username,uid,gid,homedir  		//查询数据,确认可用
    -> FROM userlist LIMIT 10;
+----+----------+-----+-----+-----------------+
| sn | username | uid | gid | homedir         |
+----+----------+-----+-----+-----------------+
|  1 | root     |   0 |   0 | /root           |
|  2 | bin      |   1 |   1 | /bin            |
|  3 | daemon   |   2 |   2 | /sbin           |
|  4 | adm      |   3 |   4 | /var/adm        |
|  5 | lp       |   4 |   7 | /var/spool/lpd  |
|  6 | sync     |   5 |   0 | /sbin           |
|  7 | shutdown |   6 |   0 | /sbin           |
|  8 | halt     |   7 |   0 | /sbin           |
|  9 | mail     |   8 |  12 | /var/spool/mail |
| 10 | operator |  11 |   0 | /root           |
+----+----------+-----+-----+-----------------+
10 rows in set (0.00 sec)

4)废弃或删除旧库

mysql> DROP DATABASE userdb;
Query OK, 2 rows affected (0.09 sec)

 

5 简述备份策略的类型。

参考答案

完全备份:备份所有数据。

差异备份:备份自完全备份后所有新产生的数据。

增量备份:备份上一次备份后所有新产生的数据。

posted @ 2022-02-23 13:19  东山有耳  阅读(363)  评论(0)    收藏  举报