数据备份是数据库管理员非常重要的工作。系统意外崩溃、磁盘损坏等都有可能导致数据丢失,所以要定期的备份数据库。现有三种方法备份数据库。
要想保持备份的一致性,备份前要对相关表执行LOCK TABLES操作,然后对表执行FLUSH TABLES。FLUSH TABLES语句来确保开始将所有激活的索引页写入磁盘。
一、使用mysqldump命令备份数据库
备份单个数据库中所有的表
例如备份mysql数据库
mysqldump -h localhost -u root -p mysql > mysql_db_20141011_1412.sql
可以打开mysql_db.sql查看一下内容如下:
-- MySQL dump 10.13 Distrib 5.5.38, for debian-linux-gnu (i686) -- -- Host: localhost Database: mysql -- ------------------------------------------------------ -- Server version5.5.38-0ubuntu0.12.04.1 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE=‘+00:00‘ */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=‘NO_AUTO_VALUE_ON_ZERO‘ */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `columns_priv` -- DROP TABLE IF EXISTS `columns_priv`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; 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‘; /*!40101 SET character_set_client = @saved_cs_client */;备份单个数据库中单个数据表例如备份数据库mysql下的user表 mysqldump -h localhost -u root -p mysql user > mysql_user_20141011_1412.sql备份多个数据库备份数据库mysql 和 test, 使用参数--databases
mysqldump -h localhost -u root -p --databases mysql test > mysql_test_db_20141011_1412.sql
使用--databases后必须指定至少一个数据库,多个数据库之间用空格分开。另外可以用--all-databases参数备份系统中所有的数据库。
二、直接复制整个数据库目录
linux下数据库的目录位置通常为/var/lib/mysql。直接备份数据库目录,这是一种简单、快速、有效的备份方式,但这不是最好的方法,因为这样方法对InnoDB的存储引擎的表不适用。使用这种方法备份的数据库容易遇到版本兼容问题。
三、使用mysqlhotcopy工具快速备份
mysqlhotcopy是一个perl脚本。他是用LOCK TABLES,FLUSH TABLES和cp或scp来快速备份数据库,是备份数据库和单个表的最快途径,但他只能运行在数据库目录所在的机器上,并只能备份MyISAM类型的表。mysqlhotcopy在Unix系统中运行。mysqlhotcopy语法格式如下:
mysqlhotcopy db_name_1、db_name_2......db_name_n /path/to/new_directory.
例如备份数据库test到/usr/backup目录下。
mysqlhotcopy -u root -p test /usr/backup
本文出自 “人自强,梦不息” 博客,请务必保留此出处http://yongbird.blog.51cto.com/7554149/1562530