mysql 數據庫備份

數據備份是數據庫管理員非常重要的工作。系統意外崩潰、磁盤損壞等都有可能導致數據丟失,所以要定期的備份數據庫。現有三種方法備份數據庫。

要想保持備份的一致性,備份前要對相關表執行LOCK TABLES操作,然後對錶執行FLUSH TABLES。FLUSH TABLES語句來確保開始將所有激活的索引頁寫入磁盤。

一、使用mysqldump命令備份數據庫

  1. 備份單個數據庫中所有的表

    例如備份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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章