• 逻辑备份工具 mysqldump
• 使用mysql 恢复数据库
步骤一:使用mysqldump进行逻辑备份
1)备份MySQL服务器上的所有库
将所有的库备份为mysql-all.sql文件:
[root@zhangyx ~]# mysqldump -u root -p --all-databases > /root/alldb.sqlEnter password: //验证口令[root@zhangyx ~]# file /root/alldb.sql //确认备份文件类型/root/alldb.sql: UTF-8 Unicode text, with very long lines
查看备份文件alldb.sql的部分内容:
[root@zhangyx ~]# grep -vE \'^/|^-|^$\' /root/alldb.sql | head -15CREATE 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@zhangyx ~]# mysqldump -u root -p userdb > userdb.sqlEnter password: //验证口令
查看备份文件userdb.sql的部分内容:
[root@zhangyx ~]# grep -vE \'^/|^-|^$\' /root/userdb.sqlDROP 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@zhangyx ~]# mysqldump -u root -p -B mysql userdb > mysql+test+userdb.sqlEnter password: //验证口令
查看备份文件userdb.sql的部分内容:
[root@zhangyx ~]# grep \'^CREATE DATA\' /root/mysql+userdb.sqlCREATE 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@zhangyx ~]# mysql -u root -p userdb2 < /root/userdb.sqlEnter password: //验证口令
3)确认新库正常,启用新库
mysql> USE userdb2; //切换到新库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> 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)