如果你要恢復(fù)的數(shù)據(jù)庫是包含授權(quán)表的mysql數(shù)據(jù)庫,您將需要使用--skip贈款-tables選項來運行服務(wù)器恢復(fù)整個數(shù)據(jù)庫
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比方正網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式方正網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋方正地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
- 首先,。否則,服務(wù)器會抱怨不能找到授權(quán)表?;謴?fù)表后,執(zhí)行mysqladmin沖水privileges告訴服務(wù)器裝載授權(quán)表,并用它們來啟動。數(shù)據(jù)庫目錄到其他地方的原始內(nèi)容
復(fù)制。例如,您可以使用它們在以后的事后分析檢查表(驗尸)的崩潰。
酒店與最新的數(shù)據(jù)庫備份文件重新加載。如果您打算使用mysqldump的所加載的文件,則需要輸入它們作為mysql的。如果您打算使用從數(shù)據(jù)庫文件直接拷貝(例如,使用tar或CP),它會復(fù)制他們直接回數(shù)據(jù)庫目錄中。然而,在這種情況下,你應(yīng)該在關(guān)閉之前,該服務(wù)器復(fù)制這些文件,然后重新啟動它。在備份過程中
重做日志,然后查詢更新數(shù)據(jù)庫表中。對于所有可用的更新日志,你可以使用它作為mysql的輸入。指定--one-database選項,因此MySQL只是要還原的數(shù)據(jù)庫執(zhí)行查詢。如果你意識到有必要使用所有的更新日志文件,可以使用包含以下命令日志的目錄:
%LS-TRL更新(0-9)* | xargs的貓| mysql--。一個數(shù)據(jù)庫DB_NAME
ls命令生成一個單獨的日志文件更新列表,更新日志文件根據(jù)服務(wù)器(你知道,如果你其中的任何文件,排序順序生成的順序進行排序會發(fā)生變化,這將導(dǎo)致在更新日志中以錯誤的順序使用)。有限公司您可能需要使用一些更新日志。例如,如果日志,因為命名update.392備份,pdate.393等產(chǎn)生的,可以在命令重新運行它們:
%的mysql - 一個數(shù)據(jù)庫DB_NAME 錄入。 392
%的mysql - 一個數(shù)據(jù)庫DB_NAME updata.393 ...
如果您正在運行的恢復(fù),并打算使用更新日志恢復(fù)由于失誤降數(shù)據(jù)的基礎(chǔ)上,DROPTABLE或DELETE語句和丟失的信息時,一定要在開始更新日志刪除這些語句。
恢復(fù)單個表
恢復(fù)單個表是非常困難的。如果是的mysqldump備份文件生成的,它只是不包含數(shù)據(jù),您需要一個表,你需要提取的相關(guān)線路,并利用它們作為mysql的輸入,這部分比較容易。困難的是,提取在該表的更新日志中使用的片段。你會發(fā)現(xiàn):mysql_find_rows工具在這方面有所幫助,它可以提取多行從更新日志查詢。另一種可能性是使用另一臺服務(wù)器
恢復(fù)整個數(shù)據(jù)庫,然后將該文件復(fù)制到表的原始數(shù)據(jù)庫。這其實很容易!當(dāng)文件被復(fù)制回數(shù)據(jù)庫目錄,確保原始數(shù)據(jù)庫服務(wù)器關(guān)閉。
簡單情況下:進入原來mysql安裝路徑下的data文件夾下,找到相應(yīng)的庫和ibdata1,進行copy,就可回復(fù)原來的數(shù)據(jù)。
復(fù)雜情況下:
從另一臺機上把MySQL數(shù)據(jù)庫的mysql文件夾拷貝到本地機上,目的是恢復(fù)本地機對數(shù)據(jù)的訪問和操作。經(jīng)過如下幾種情況的操作。
1.
在本地重裝MySQL(安裝目錄D:\Program
Files\MySQL\MySQL
Server
5.0),直接把mysql文件夾拷貝至D:\Program
Files\MySQL\MySQL
Server
5.0\。結(jié)果,失?。簲?shù)據(jù)庫連接錯誤。
2.
卸載后重裝MySQL,將D:\Program
Files\MySQL\MySQL
Server
5.0\下的數(shù)據(jù)備份,只把mysql\data文件夾全部內(nèi)容拷貝到D:\Program
Files\MySQL\MySQL
Server
5.0\data下。結(jié)果,失敗:數(shù)據(jù)庫連接錯誤。將備份的數(shù)據(jù)還完覆蓋。結(jié)果,失敗,還是連接不上數(shù)據(jù)庫。
3.
卸載后重裝MySQL,將mysql\data文件夾里的cf1,last文件夾(這兩個是原來MySQL里的數(shù)據(jù)庫)拷貝進D:\Program
Files\MySQL\MySQL
Server
5.0\data。連接成功,在Navicat
for
MySQL里看到數(shù)據(jù)庫cf1和last,但是不能訪問,因為數(shù)據(jù)全為零。明白了原來data里以數(shù)據(jù)庫命名的文件存儲的是數(shù)據(jù)庫的表結(jié)構(gòu),不是元數(shù)據(jù)。下一步,把data文件夾里的ibdata1文件(3.4G大,明顯存儲了元數(shù)據(jù))拷貝到D:\Program
Files\MySQL\MySQL
Server
5.0\data里,代替原來的ibdata1文件。重啟電腦,打開Navicat
for
MySQL,連接成功,數(shù)據(jù)可以訪問操作。
至此,操作終于成功。其實當(dāng)初在那臺機上把數(shù)據(jù)導(dǎo)出來,而不是現(xiàn)在直接把文件夾mysql復(fù)制過來會更容易恢復(fù)。但那臺機已經(jīng)重裝了系統(tǒng),也就是說MySQL失效了。
1 找個別的機百器安裝個同版本的mysql或從已安裝同版本的其他機器上(非同版本的度也可以試下):
拷貝 mysql/data/mysql 目錄到你的mysql/data/ 下吧
2 試著啟動mysql服務(wù),如果能啟動了,理論上應(yīng)該丟失的只有用戶、授權(quán)等一些知系統(tǒng)信息,不影響你的使用的數(shù)據(jù);
如果不能啟動,看錯誤日志,爭取啟動了。
3 趕緊把數(shù)據(jù)備份道一份出來,重內(nèi)新把所有庫(只是你后來創(chuàng)建的業(yè)務(wù)相關(guān)的庫,不包括mysql庫)都刪了,重新導(dǎo)入一遍。理論上不這樣也可以,但只是非容生產(chǎn)重要的環(huán)境下。
4 重新做用戶授權(quán)。
以上步驟參考一下,試一下
一、開啟binlog。
首先查看binlog是否開啟
?
1
2
3
4
5
6
7
mysql show variables like "log_bin";
+---------------+-------+
|Variable_name | Value
+---------------+-------+
| log_bin OFF
+---------------+-------+
1 row in set (0.00 sec)
值為OFF,需開啟,開啟binlog方式如下:
?
1
#vim /etc/my.cnf
在[mysqld]中加入
?
1
2
log-bin = mysql-bin
log-bin = /usr/local/mysql/log/mysql-bin.log
重啟mysql服務(wù)
?
1
2
#service mysqld stop
#service mysqld start
二、模擬數(shù)據(jù)寫入
建庫
?
1
create database backup;
建表
?
1
2
3
4
5
CREATE TABLE `number` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '編號',
`updatetime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
寫入數(shù)據(jù)
程序2-1
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#coding:utf8
#python2.7
import MySQLdb
import time
def connect_mysql(db_host="192.168.11.169",user="martin",passwd="martin",db="backup",charset="utf8"):
conn = MySQLdb.connect(host=db_host,user=user,passwd=passwd,db=db,charset=charset)
conn.autocommit(True)
return conn.cursor()
#數(shù)據(jù)插入
for i in range(0,10):
#time=time.strftime("%Y-%m-%d %H:%M:%S")
sql = 'insert into number(updatetime) values(%s)'
values = [(time.strftime("%Y-%m-%d %H:%M:%S"))]
db1 = connect_mysql()
print db1.executemany(sql,values)
查詢數(shù)據(jù)
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql select * from number;
+-------+------------------------+
| id | updatetime
+--------------------------------+
| 1 | 2016-06-29 23:27:15 |
| 2 | 2016-06-29 23:27:15 |
| 3 | 2016-06-29 23:27:15 |
| 4 | 2016-06-29 23:27:15 |
| 5 | 2016-06-29 23:27:15 |
| 6 | 2016-06-29 23:27:15 |
| 7 | 2016-06-29 23:27:15 |
| 8 | 2016-06-29 23:27:15 |
| 9 | 2016-06-29 23:27:15 |
| 10 | 2016-06-29 23:27:15 |
+-------+------------------------+
10 rows in set (0.00 sec)
三、全量備份
?
1
mysqldump -uroot -p -F --master-data=2 backup |gzip /martin/data/backup_$(date +%F).sql.gz
注:加-F能刷新binlog,方便恢復(fù)時操作。
四、模擬寫入增量數(shù)據(jù)
繼續(xù)執(zhí)行程序2-1。
查詢數(shù)據(jù)
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mysql select * from number;
+----+---------------------------+
| id | updatetime |
+----+---------------------------+
| 1 | 2016-06-29 23:27:15 |
| 2 | 2016-06-29 23:27:15 |
| 3 | 2016-06-29 23:27:15 |
| 4 | 2016-06-29 23:27:15 |
| 5 | 2016-06-29 23:27:15 |
| 6 | 2016-06-29 23:27:15 |
| 7 | 2016-06-29 23:27:15 |
| 8 | 2016-06-29 23:27:15 |
| 9 | 2016-06-29 23:27:15 |
| 10 | 2016-06-29 23:27:15 |
| 11 | 2016-06-29 23:31:03 |
| 12 | 2016-06-29 23:31:03 |
| 13 | 2016-06-29 23:31:03 |
| 14 | 2016-06-29 23:31:03 |
| 15 | 2016-06-29 23:31:03 |
| 16 | 2016-06-29 23:31:03 |
| 17 | 2016-06-29 23:31:03 |
| 18 | 2016-06-29 23:31:03 |
| 19 | 2016-06-29 23:31:03 |
| 20 | 2016-06-29 23:31:03 |
+-------+---------------------+
20 rows in set (0.00 sec)
五、增量備份
保留mysql-bin.000002及之后的binlog即可。
六、模擬誤操作
?
1
delete from number;
七、再次寫入增量數(shù)據(jù)
執(zhí)行程序2-1
select * from bumber;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+------+------------------------+
| id | updatetime |
+------+------------------------+
| 21 | 2016-06-29 23:41:06 |
| 22 | 2016-06-29 23:41:06 |
| 23 | 2016-06-29 23:41:06 |
| 24 | 2016-06-29 23:41:06 |
| 25 | 2016-06-29 23:41:06 |
| 26 | 2016-06-29 23:41:06 |
| 27 | 2016-06-29 23:41:06 |
| 28 | 2016-06-29 23:41:06 |
| 29 | 2016-06-29 23:41:06 |
| 30 | 2016-06-29 23:41:06 |
+------+------------------------+
10 rows in set (0.00 sec)
八、恢復(fù)
此時發(fā)現(xiàn)之前的delete操作為誤操作,急需恢復(fù),恢復(fù)過程如下
給該表加上讀鎖
?
1
lock table number read;
將全量備份的數(shù)據(jù)導(dǎo)入
?
1
2
3
4
#cd /martin/data/
#gzip -d number_2016-06-29.sql.gz
#grep -i "change" *.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=107;
刷新日志
?
1
2
3
4
5
6
#mysqladmin -uroot -p'martin' flush-logs
#cd /usr/local/mysql/log
#ls|grep mysql-bin|grep -v index
mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
可確定mysql-bin.000002為增量數(shù)據(jù)binlog
導(dǎo)入全量備份
?
1
2
3
4
5
#cd /martin/data/
#mysql -uroot -p backup number_2016-06-29.sql
#cp /usr/local/mysql/log/mysql-bin.000002 /martin/data/
#mysqlbinlog mysql-bin.000002 bin.sql
#vim bin.sql
在bin.sql找到之前的delete語句,刪除
?
1
mysql -uroot -p bin.sql
九、確認(rèn)已恢復(fù)數(shù)據(jù)
登錄mysql
?
1
2
#mysql -uroot -p'martin' backup
select * from number;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
+----+---------------------+
| id | updatetime |
+----+---------------------+
| 1 | 2016-06-29 23:27:15 |
| 2 | 2016-06-29 23:27:15 |
| 3 | 2016-06-29 23:27:15 |
| 4 | 2016-06-29 23:27:15 |
| 5 | 2016-06-29 23:27:15 |
| 6 | 2016-06-29 23:27:15 |
| 7 | 2016-06-29 23:27:15 |
| 8 | 2016-06-29 23:27:15 |
| 9 | 2016-06-29 23:27:15 |
| 10 | 2016-06-29 23:27:15 |
| 11 | 2016-06-29 23:31:03 |
| 12 | 2016-06-29 23:31:03 |
| 13 | 2016-06-29 23:31:03 |
| 14 | 2016-06-29 23:31:03 |
| 15 | 2016-06-29 23:31:03 |
| 16 | 2016-06-29 23:31:03 |
| 17 | 2016-06-29 23:31:03 |
| 18 | 2016-06-29 23:31:03 |
| 19 | 2016-06-29 23:31:03 |
| 20 | 2016-06-29 23:31:03 |
| 21 | 2016-06-29 23:41:06 |
| 22 | 2016-06-29 23:41:06 |
| 23 | 2016-06-29 23:41:06 |
| 24 | 2016-06-29 23:41:06 |
| 25 | 2016-06-29 23:41:06 |
| 26 | 2016-06-29 23:41:06 |
| 27 | 2016-06-29 23:41:06 |
| 28 | 2016-06-29 23:41:06 |
| 29 | 2016-06-29 23:41:06 |
| 30 | 2016-06-29 23:41:06 |
+----+---------------------+
30 rows in set (0.00 sec)
恢復(fù)完成
文章標(biāo)題:mysql操作怎么還原,mysql還原sql文件
標(biāo)題網(wǎng)址:http://chinadenli.net/article10/hdodgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、品牌網(wǎng)站設(shè)計、建站公司、外貿(mào)建站、手機網(wǎng)站建設(shè)、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)