数据备份
备份概述
数据备份方式
物理备份
-冷备: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 简述备份策略的类型。
参考答案
完全备份:备份所有数据。
差异备份:备份自完全备份后所有新产生的数据。
增量备份:备份上一次备份后所有新产生的数据。

浙公网安备 33010602011771号