真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Mysql的數(shù)據(jù)備份和恢復(fù)

這篇文章主要介紹“MySQL的數(shù)據(jù)備份和恢復(fù)”,在日常操作中,相信很多人在Mysql的數(shù)據(jù)備份和恢復(fù)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Mysql的數(shù)據(jù)備份和恢復(fù)”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有天心免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

Mysql的備份分類:
mysql的數(shù)據(jù)備份:
 邏輯備份、物理備份
mysql按照數(shù)據(jù)集分類:
 完全備份
 增量備份
 差異備份
一般這幾種都是組合起來使用的,比如完全備份可以一周進(jìn)行一次,增量備
份和差異備份可以一天備份一次,但是這要根據(jù)企業(yè)的業(yè)務(wù)邏輯而定,所以
合適的選擇,將會(huì)在數(shù)據(jù)恢復(fù)的時(shí)候?qū)p失降到最低。
mysql按照服務(wù)器是否停機(jī)分類:
 冷備份:服務(wù)完全停止
 溫備份:服務(wù)不關(guān)閉,但是在備份的時(shí)候,其他的事務(wù)只有查詢的操作
 熱備份:服務(wù)在線,不影響讀寫(但是非事務(wù)存儲(chǔ)引擎的很難實(shí)現(xiàn)熱備,但
是可以使用LVM實(shí)現(xiàn)幾乎熱備的功能)
需要備份的東西:
 1.數(shù)據(jù)文件
 2.日志文件(事務(wù)日志,二進(jìn)制日志)
 3.存儲(chǔ)過程,存儲(chǔ)函數(shù),觸發(fā)器
 4.配置文件
日志分類:
 1.事務(wù)日志:
   隨機(jī)IO轉(zhuǎn)換成順序IO
   事件重放(撤銷)提供基礎(chǔ)
 2.事件事務(wù):
   記錄歷史時(shí)間
MySQL的日志文件
  1.the error log 錯(cuò)誤日志
     錯(cuò)誤信息,服務(wù)器進(jìn)程啟動(dòng)或停止產(chǎn)生的信息,主從中添加復(fù)制的時(shí)
候,也會(huì)記錄
     主配置文件啟動(dòng)錯(cuò)誤日志,
     log_error=/var/log/mysqld.err(確保對(duì)mysqld有寫的權(quán)限)
  2.the binary log 二進(jìn)制日志
     提供增量備份
     基于時(shí)間點(diǎn)的恢復(fù)
     復(fù)制架構(gòu)提供基礎(chǔ)
     log_bin=/data/logs/binary/changelog (默認(rèn)在數(shù)據(jù)文件中)
     log_bin_index=/data/logs/relay/binarylog 定義二進(jìn)制文件的索引
位置
  3.the general query log  平時(shí)建議不開
      general_log=ON|OFF
      general_log_file=/PATH
  4.the slow query log 慢查詢?nèi)罩?br/>       slow_query_log=ON
      slow_query_log_file=/PATH
      long_query_time=NUM 定義超時(shí)時(shí)間
  5.relay log 中繼日志
  默認(rèn)Mysql不開啟任何日志,但在mysqld腳本中開啟了錯(cuò)誤日志(the
error log)

mysql常用的備份工具:
mysqldump
SELECT INTO OUTFILE
mk-parallel-backup
ibbackup
mysqlhostcopy (MyISAM存儲(chǔ)引擎的幾乎冷備份,看著名字像是熱備)
 
接下來我將借助我的一個(gè)簡單的進(jìn)行演示數(shù)據(jù)的備份和還原的過程:
1.使用dump來備份
 mysqldump的備份是一個(gè)邏輯備份;
 備份的格式如下;
 #mysqldump db_name [table_name] > /PATH
 當(dāng)然mysqldump的備份還有很多選項(xiàng):
  --all-databases 備份所有的數(shù)據(jù)庫
  --events 備份事件
  --routines 備份存儲(chǔ)函數(shù)
  --triggers 備份觸發(fā)器
  --extended-insert  備份擴(kuò)展的插入
  --skip-extended-insert  關(guān)閉備份擴(kuò)展的插入
  --lock-all-tables 加鎖,這個(gè)是必須的
  --flush-logs 刷新日志文件到磁盤中去,也是必須的
  --master-data=n{0|1|2} 做復(fù)制的時(shí)候用到(2)
  --no-data 只備份數(shù)據(jù)庫中的表結(jié)構(gòu)
  --where  "WHERE CLAUSE" 備份指定的數(shù)據(jù)
mysql> CREATE DATABASE luowei;
mysql> SHOW DATABASES;//查看所有的數(shù)據(jù)庫
+--------------------+
| Database           |
+--------------------+
| information_schema |
| luowei             |
| mysql              |
| ndodb              |
| test               |
+--------------------+
mysql> USE luowei;
mysql> CREATE TABLE st (
    -> ID INT UNIQUE AUTO_INCREMENT,
    -> Name VARCHAR(30) );
mysql> SHOW TABLES; //查看表
+------------------+
| Tables_in_luowei |
+------------------+
| st               |
+------------------+
mysql> INSERT INTO st  (Name) VALUE ('a'),('b'),('c');
mysql> SELECT * FROM st; //顯示表中的數(shù)據(jù)
+----+------+
| ID | Name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
+----+------+
這是我的數(shù)據(jù)庫中原始的信息,因?yàn)榈葧?huì)要?jiǎng)h掉數(shù)據(jù)庫和表,所以先看一下
里面的數(shù)據(jù),方便等會(huì)驗(yàn)證;
[root@nfs ~]# mysqldump -uroot -p luowei st > /root/st.sql  //開始
備份表st,這里沒有使用任何參數(shù)的
Enter password:
OK,這個(gè)時(shí)候備份完了,由于mysqldump使用的是邏輯備份,所以備份下來
的是一些create、insert語句
我們可以打開看一下
[root@nfs ~]# cat /root/luoweidb | grep -v "^/" | grep -v  "^$"
-- MySQL dump 10.11
--
-- Host: localhost    Database: luowei
-- ------------------------------------------------------
-- Server version 5.0.77
--
-- Current Database: `luowei`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `luowei` /*!40100 DEFAULT
CHARACTER SET latin1 */;
USE `luowei`;
--
-- Table structure for table `st`
--
DROP TABLE IF EXISTS `st`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `st` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` varchar(30) default NULL,
  UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;
--
-- Dumping data for table `st`
--
LOCK TABLES `st` WRITE;
INSERT INTO `st` VALUES (1,'a'),(2,'b'),(3,'c');
UNLOCK TABLES;
-- Dump completed on 2011-09-05  8:00:08
看到了吧,這里面是整個(gè)我剛做過的創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表,插入數(shù)據(jù)的語句

接下來,我們做一下數(shù)據(jù)庫恢復(fù):
[root@nfs ~]# mysql -uroot -e   "DROP DATABASE luowei;" -p //刪除
數(shù)據(jù)庫
Enter password:
[root@nfs ~]# mysql -uroot -e   "SHOW DATABASES;" -p //查看刪除后
的數(shù)據(jù)庫
Enter password:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ndodb              |
| test               |
+--------------------+
我把luowei的數(shù)據(jù)庫給刪除了,現(xiàn)在將進(jìn)行數(shù)據(jù)庫的恢復(fù)
[root@nfs ~]# mysql -uroot -p < /root/luoweidb
Enter password:
[root@nfs ~]# mysql -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| luowei             |
| mysql              |
| ndodb              |
| test               |
+--------------------+
OK ,數(shù)據(jù)庫是恢復(fù)過來了,接下來就是查看表中的信息是否完整了
[root@nfs ~]# mysql -e "SELECT * FROM luowei.st" -uroot -p
Enter password:
+----+------+
| ID | Name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
+----+------+
Ok,一起安好,呵呵,當(dāng)然其他的參數(shù)就不做詳細(xì)介紹了,需要用到的話,
可以使用HELP命令尋求幫助。
下面介紹一個(gè)本機(jī)不用輸入Mysql密碼的方法:
#vim /root/.my.cnf
 [client]
 user = root
 password = redhat
保存起來,下次對(duì)數(shù)據(jù)庫的操作就直接使用mysql命令了,不用在輸入密碼
了;
接下來的實(shí)驗(yàn)我也就不輸入密碼了;

2.使用SELECT INTO OUTFILE 的方法進(jìn)行備份
還是用上面的表,
[root@nfs ~]# mysql -e "SELECT * FROM luowei.st"
+----+------+
| ID | Name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
+----+------+
如果想把ID小于等于2的備份出來,就可以使用這種方法備份了
mysql> SELECT * INTO OUTFILE '/tmp/st.bak' FROM st WHERE ID <=2;
[root@nfs ~]# cat /tmp/st.bak
1 a
2 b
我們可以看到一個(gè)文本文件,類似于表,但是這種方法只備份數(shù)據(jù)本身,不
備份表結(jié)構(gòu),所以恢復(fù)的時(shí)候,就需要按照結(jié)構(gòu)重新建立一個(gè)新表,然后在
恢復(fù)
mysql> CREATE TABLE mt LIKE st; //我這里新創(chuàng)建一個(gè)基于st表格式的新
表mt,然后把剛備份的數(shù)據(jù)恢復(fù)到新表mt中,這也類是與恢復(fù)到原表了,呵
呵,小偷懶一下?。?!
mysql> LOAD DATA INFILE '/tmp/st.bak' INTO TABLE mt;
mysql> SELECT * FROM mt;
+----+------+
| ID | Name |
+----+------+
|  1 | a    |
|  2 | b    |
+----+------+
ok了,我們現(xiàn)在來總結(jié)一下這兩種方法,首先使用mysqldump備份的數(shù)據(jù)使
用邏輯備份的方式,備份的是一些對(duì)數(shù)據(jù)庫的操作的語句,恢復(fù)簡單;而使
用SELECT INTO OUTFILE這種可以備份指定的數(shù)據(jù),有選擇性的備份數(shù)據(jù),
但是在恢復(fù)的時(shí)候就要麻煩一點(diǎn),還要?jiǎng)?chuàng)建表。

3.基于LVM的快照備份:
操作步驟:
 a.確保數(shù)據(jù)文件在LV上
 b.對(duì)數(shù)據(jù)庫中的表施加讀鎖
 c.對(duì)數(shù)據(jù)所在的LV做快照
 d.釋放數(shù)據(jù)庫的讀鎖
 e.掛載快照卷,備份數(shù)據(jù)文件(對(duì)于InnoDB存儲(chǔ)引擎,同時(shí)備份事務(wù)日志
文件)
 f.刪除快照
使用LVM做快照備份的條件是:
  >SHOW VARIABLES LIKE 'log_binlog';處于ON
  >SHOW VARIABLES LIKE 'sync_binlog'改為1
  >SHOW VARIABLES LIKE 'innodb_support_xa' 處于ON的狀態(tài)
LV快照備份 
#mysql
>FLUSH TABLES WITH READ LOCK; //加上讀鎖
# lvcreate -L 50M -n mysnap -s /dev/myvg/mydata  //創(chuàng)建快照
>UNLOCK TABLES; //解鎖
#mount /dev/myvg/mysnap /mnt  //掛載快照卷
#cd /mnt/data
#tar -jcf /root/mysql.tar.bz2 luowei/ ibdata1 ib_logfile* mysql-
bin.*  //備份數(shù)據(jù)并壓縮
#umount /mnt  //卸載快照
#lvremove --force /dev/myvg/mysnap  //移除快照
 
LV恢復(fù)
cd /usr/local/mysql
#chown -R mysql:mysql . //修改權(quán)限
#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/  //
重新生成
#chown -R root .
#killall mysqld  //殺掉所有關(guān)于mysql的進(jìn)程
#cd /mydata/data
#tar xf /root/mysql.tar.bz2 -C ./  //把備份恢復(fù)到mysql的數(shù)據(jù)文件中
然后我們?cè)诘卿浀組ysql,就會(huì)發(fā)現(xiàn)原來的數(shù)據(jù)仍然存在了

4.使用binary日志文件實(shí)現(xiàn)時(shí)間點(diǎn)的恢復(fù)
顯示當(dāng)前正在使用的事務(wù)文件
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      330 |              |                  |
+------------------+----------+--------------+------------------+
mysql> FLUSH LOGS; //滾動(dòng)日志文件
再查看正在使用的事務(wù)文件,然后記錄下這個(gè)Position就行了
由于二進(jìn)制日志文件只記錄數(shù)據(jù)修改的信息,所以每次的修改對(duì)應(yīng)的
Position都會(huì)改變
現(xiàn)在我向表中插入一行數(shù)據(jù)
mysql> INSERT INTO st (Name) VALUE ('d');
mysql> INSERT INTO st (Name) VALUE ('E');
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |      553 |              |                  |
+------------------+----------+--------------+------------------+
由于我們前面已經(jīng)做了一個(gè)完全備份,所有我們現(xiàn)在可以備份從330開始的
數(shù)據(jù)了
# mysqlbinlog --start-position 330 mysql-bin.000007
>/root/mysql.incr.sql //備份增加的二進(jìn)制文件
然后我們這個(gè)時(shí)候登錄到mysql
mysql>DROP DATABASE luowei;
然后恢復(fù)該數(shù)據(jù)庫
# service mysqld stop
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
# cd /mydata/data/
# tar xf /root/mysql.incr.sql -C .
# mysql < /root/mysql.incr.sql
# service mysqld start
登錄到數(shù)據(jù)庫,
就會(huì)發(fā)現(xiàn)有數(shù)據(jù)恢復(fù)正常

到此,關(guān)于“Mysql的數(shù)據(jù)備份和恢復(fù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!


網(wǎng)頁名稱:Mysql的數(shù)據(jù)備份和恢復(fù)
鏈接分享:http://weahome.cn/article/iphejj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部