你好!
咸豐網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,咸豐網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為咸豐上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的咸豐做網(wǎng)站的公司定做!
這個問題不是MYSQL數(shù)據(jù)庫方面的問題,而是如何從一個文本文件中取出需要的部分內(nèi)容的問題。 從數(shù)據(jù)庫角度來說,沒有什么好辦法,可以使用操作系統(tǒng)中的文本編輯處理工具來實現(xiàn)。例如,如果不是太大,幾百M可以用editplus,ultraedit等編輯工具打開找你需要sql拷貝出來導(dǎo)入。
如果是linux/unix,可參考如下方法:
1.使用 awk:
可以先到原數(shù)據(jù)庫中使用 'show tables;' 查看數(shù)據(jù)庫表的列表,注意,此列表已經(jīng)按照字母排序,例如:
table1
table2
table3
然后使用awk 來過濾sql語句,假設(shè)你要恢復(fù) table2 表,可以使用下面的語句:
awk ‘/^-- Table structure for table .table2./,/^-- Table structure for table .table3./{print}’ mydumpfile.sql /tmp/recovered_table.sql
2.使用sed:
與上面類似,假設(shè)你要恢復(fù) table2 表,可以使用下面的語句:
cat mydumpfile.sql | sed -n -e '/Table structure for table .test1./,/Table structure for table .test2./p' /tmp/extracted_table.sql
1、首先構(gòu)建測試環(huán)境數(shù)據(jù)create table t1(a varchar(10),b varchar(10));insert into t1 values('1','1');insert into t1 values('2','2');commit;。
2、模擬誤修改,將t1表中的b字段更新為錯誤數(shù)據(jù) "123456"update t1 set b='123456' where a='1';commit;select * from t1;。
3、將恢復(fù)工具上傳到服務(wù)器并進(jìn)行解壓。unzip binlog2sql-master.zip。
4、得到誤修改時的binlog文件(show binary logs;),實驗環(huán)境是mysql-bin.000011。
5、通過?binlog2sql.py 腳本的到所有 對表 t1 的修改操作。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011'。
6、得到了誤刪除的sql的準(zhǔn)確位置在1382-1615之間,使用 _**-B**_ 選項生成回滾sql。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011' --start-position=1382 --stop-position=1615 -B。
7、執(zhí)行得到的回滾語句進(jìn)行誤操作恢復(fù)。就完成了。
如果是整個數(shù)據(jù)庫恢復(fù)可以用 mysql -uroot -p123 user /17rumen_user_2009_5_29.sql
但是你要恢復(fù)某一張表
1、新建一個數(shù)據(jù)庫 tmp
2、把 /17rumen_user_2009_5_29.sql 用上面的命令導(dǎo)入 到該庫
mysql -uroot -p123 tmp /17rumen_user_2009_5_29.sql
3、mysqldump -uroot -p123 -t tmp --table 表名 /tmp.sql
4、再把 /tmp.sql 導(dǎo)入你現(xiàn)在表
mysql -uroot -p123 user /tmp.sql
1. 開啟了參數(shù)innodb_file_per_table
2. 安裝工具:mysql-utilities,其中mysqlfrm可以讀取表結(jié)構(gòu)。
yum install mysql-utilities -y
查看原表中的數(shù)據(jù):
mysql select * from yayun.t1;
+------+------+
| id | name |
+------+------+
| 1 | aa |
| 2 | bb |
| 3 | cc |
| 4 | dd |
+------+------+
4 rows in set (0.00 sec)
mysql
執(zhí)行備份:
innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --sock=/data/mysql/3306/mysqltmp/mysql.sock /data/
apply-log
innobackupex --defaults-file=/data/mysql/3306/my.cnf --apply-log /data/2017-03-22_16-13-00/
情況1、如果你有該庫的整體備份或?qū)@個表的單獨備份,那么也許可以恢復(fù)。可以將最新的備份恢復(fù)到一個備用的服務(wù)器上,導(dǎo)出那表的內(nèi)容,完成恢復(fù)
情況2、如果沒有任何備份,那就基本沒戲了。一般刪除表的操作是drop table,日志中不會記錄刪除具體行數(shù)的記錄。表所對應(yīng)目錄下的文件已經(jīng)被刪除(innodb獨立表空間,單表歸為一文件)。同樣的情況適用于myisam數(shù)據(jù)庫引擎,對應(yīng)的myd/myi/frm文件均被刪除。這不像windows還有垃圾箱,是不可逆的操作
你既然是導(dǎo)出了單個表,那恢復(fù)單個表也沒有問題啊。
假定你不用mysql管理客戶端工具,直接用命令行。
命令行登錄mysql,
use your_db
source 你導(dǎo)出的單個表文件(要帶上可訪問的絕對路徑,最后不用加分號)
即可。
如果你有phpmyadmin之類,那更好辦,打開你導(dǎo)出的內(nèi)容,直接執(zhí)行一下就行。