数据备份与恢复

数据备份与恢复

问题

本案例要求熟悉MySQL的备份与恢复,完成以下任务操作:
1)使用mysqldump备份数据库
2)使用mysql 恢复数据库

步骤

实现此案例需要按照如下步骤进行。
步骤一:使用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*/ `mydb` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `mydb`;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysql` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `mysql`;
DROP TABLE IF EXISTS `columns_priv`;
CREATE TABLE `columns_priv` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Column_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
  PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`,`Column_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Column privileges';
.. ..

注意:若数据库都使用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 `userlist`;
CREATE TABLE `userlist` (
  `sn` int(4) NOT NULL AUTO_INCREMENT,
  `username` varchar(24) NOT NULL,
  `password` varchar(48) DEFAULT 'x',
  `uid` int(5) NOT NULL,
  `gid` int(5) NOT NULL,
  `fullname` varchar(48) DEFAULT NULL,
  `homedir` varchar(64) NOT NULL,
  `shell` varchar(24) NOT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;
LOCK TABLES `userlist` WRITE;
.. ..

3)同时备份指定的多个库
同时备份mysql、test、userdb库,保存为mysql+test+userdb.sql文件:

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

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

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

步骤二:使用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 | abrt          | 173 | 173 | /etc/abrt              |
|  2 | adm           |   3 |   4 | /var/adm               |
|  3 | apache        |  48 |  48 | /var/www               |
|  4 | avahi-autoipd | 170 | 170 | /var/lib/avahi-autoipd |
|  5 | bin           |   1 |   1 | /bin                   |
|  6 | daemon        |   2 |   2 | /sbin                  |
|  7 | dbus          |  81 |  81 | /                      |
|  8 | ftp           |  14 |  50 | /var/ftp               |
|  9 | games         |  12 | 100 | /usr/games             |
| 10 | gdm           |  42 |  42 | /var/lib/gdm           |
+----+---------------+-----+-----+------------------------+
10 rows in set (0.00 sec)

4)废弃或删除旧库

mysql> DROP DATABASE userdb;
Query OK, 2 rows affected (0.09 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值