通用規(guī)律只有使用 --all-databases (-A) 會(huì) ERROR 1356,那就看看他到底備份了什么東西。于是喊上同事一起 less 看了下,上下掃了兩眼。突然發(fā)現(xiàn):1. 備份 SQL 文件里 DROP 掉了 mysql.proc;2. 后CREATE了一個(gè)新的 mysql.proc;3. LOCK TABLES 和 UNLOCK TABLES 中間居然沒有備份 CREATE ROUTINE 任何數(shù)據(jù)?這不就是相當(dāng)于每次導(dǎo)入全備都給我一個(gè)沒有任何 sys schema routines 的全新 mysql.proc 表?那這不就異常的尷尬?
成都創(chuàng)新互聯(lián)公司是一家專注于做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),昌平網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:昌平等地區(qū)。昌平做網(wǎng)站價(jià)格咨詢:18980820575
---- Table structure for table `proc`--
---- Dumping data for table `proc`-
真相大白在官方文檔【sys-schema-usage】官方文檔明確的告訴我們不會(huì)備份 sys 庫(kù)。但在使用 mysqldump 在執(zhí)行 --all-databases 會(huì)清空 mysql.proc 導(dǎo)致 sys 無法正常使用;這是一個(gè) BUG,并且只存在于 MySQL 5.7.x !
1、mysql_upgrade install or upgrade sys schema
這個(gè)方案適用于 sys 庫(kù)已經(jīng)因?yàn)?mysqldump 導(dǎo)入而損壞的情況下使用。
注意:mysql_upgrade 在修理 sys 庫(kù)的同時(shí),還修理 mysql 庫(kù)和用戶庫(kù)表(期間加鎖且速度一般),有極小可能會(huì)誤傷;使用 mysql_upgrade 的時(shí)候要加上 --upgrade-system-tables,不然會(huì)掃描用戶庫(kù)表。
2、全備時(shí)同時(shí)備份 sys 庫(kù)
這個(gè)方案適用于需要還原的數(shù)據(jù)庫(kù),sys 庫(kù)也不太正常的情況下使用;在全備后額外再備份一份 sys 庫(kù)用于修復(fù)。
注意:不適用于做主從時(shí)使用它。
3、使用 databases 全備
這個(gè)方案適用于所有場(chǎng)景的全備需求,100% 安全。
4、使用 mysql-sys 開源代碼
如果你的數(shù)據(jù)庫(kù) sys 全部中招了,又是生產(chǎn)庫(kù)。那你只能用這個(gè)方法;
mysql-sys:
中記錄了 sys 庫(kù)的創(chuàng)建語句將文件下載到本地,然后根據(jù)數(shù)據(jù)庫(kù)版本,執(zhí)行以下命令即可。
MySQL數(shù)據(jù)庫(kù)備份與還原
備份和恢復(fù)數(shù)據(jù)
生成SQL腳本
在控制臺(tái)使用mysqldump命令可以用來生成指定數(shù)據(jù)庫(kù)的腳本文本,但要注意,腳本文本中只包含數(shù)據(jù)庫(kù)的內(nèi)容,而不會(huì)存在創(chuàng)建數(shù)據(jù)庫(kù)的語句!所以在恢復(fù)數(shù)據(jù)時(shí),還需要自已手動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)之后再去恢復(fù)數(shù)據(jù)。
mysqldump –u用戶名 –p密碼 數(shù)據(jù)庫(kù)名生成的腳本文件路徑
現(xiàn)在可以在C盤下找到mydb1.sql文件了!
注意,mysqldump命令是在Windows控制臺(tái)下執(zhí)行,無需登錄mysql!??!
執(zhí)行SQL腳本
執(zhí)行SQL腳本需要登錄mysql,然后進(jìn)入指定數(shù)據(jù)庫(kù),才可以執(zhí)行SQL腳本?。?!
執(zhí)行SQL腳本不只是用來恢復(fù)數(shù)據(jù)庫(kù),也可以在平時(shí)編寫SQL腳本,然后使用執(zhí)行SQL 腳本來操作數(shù)據(jù)庫(kù)!大家都知道,在黑屏下編寫SQL語句時(shí),就算發(fā)現(xiàn)了錯(cuò)誤,可能也不能修改了。所以我建議大家使用腳本文件來編寫SQL代碼,然后執(zhí)行之!
SOURCE C:\mydb1.sql
注意,在執(zhí)行腳本時(shí)需要先行核查當(dāng)前數(shù)據(jù)庫(kù)中的表是否與腳本文件中的語句有沖突!例如在腳本文件中存在create table a的語句,而當(dāng)前數(shù)據(jù)庫(kù)中已經(jīng)存在了a表,那么就會(huì)出錯(cuò)!
還可以通過下面的方式來執(zhí)行腳本文件:
mysql -uroot -p123 mydb1c:\mydb1.sql
mysql –u用戶名 –p密碼 數(shù)據(jù)庫(kù)要執(zhí)行腳本文件路徑
這種方式無需登錄mysql!
1:官方百萬級(jí)別的測(cè)試數(shù)據(jù)庫(kù):
官方測(cè)試數(shù)據(jù)庫(kù)github網(wǎng)址:
下載到目錄,解壓即可,運(yùn)行命令:
2:自己創(chuàng)建簡(jiǎn)單測(cè)試數(shù)據(jù)庫(kù):
快速隨機(jī)生成測(cè)試語言的網(wǎng)站:
選擇sql和想生成的字段,點(diǎn)擊生成Generate!生成即可。
在MySQL輸入生成的語句即可。
3:測(cè)試備份還原時(shí)用到的命令
刪庫(kù)跑路測(cè)試(先備份好)
還原后查詢庫(kù)的表數(shù)據(jù)是否完整。
采用復(fù)制整個(gè)數(shù)據(jù)存放目錄
1:查看數(shù)據(jù)庫(kù)數(shù)據(jù)存放位置
有兩種方法:
1):在數(shù)據(jù)庫(kù)中用命令 show variables like 'datadir'; 查看
2):在配置文件中查看,配置了 datadir 目錄的可查看。沒有配置的默認(rèn)為 /var/lib/mysql/ 位置
Linux中查看配置文件
2:復(fù)制目錄或者目錄下某個(gè)數(shù)據(jù)庫(kù)名
3:還原時(shí)直接復(fù)制文件夾到數(shù)據(jù)庫(kù)目錄即可
mysqldump又可叫做全量備份。
參數(shù) --databases 同 -B ,單獨(dú)一個(gè)庫(kù),也可省略。
1、備份命令mysqldump格式
格式:mysqldump -h主機(jī)名 -P端口 -u用戶名 -p密碼 database 數(shù)據(jù)庫(kù)名 文件名.sql
備份testDatabase數(shù)據(jù)庫(kù)
2、備份MySQL數(shù)據(jù)庫(kù)為帶刪除表的格式
備份MySQL數(shù)據(jù)庫(kù)為帶刪除表的格式,能夠讓該備份覆蓋已有數(shù)據(jù)庫(kù)而不需要手動(dòng)刪除原有數(shù)據(jù)庫(kù)。
3、直接將MySQL數(shù)據(jù)庫(kù)壓縮備份
備份并壓縮
4、備份MySQL數(shù)據(jù)庫(kù)某個(gè)(些)表
備份testDatabase中的myTable表,不需要用參數(shù) --databases 或者 -B
5、同時(shí)備份多個(gè)MySQL數(shù)據(jù)庫(kù)
同時(shí)備份testDatabase和 employees兩個(gè)庫(kù)
6、備份服務(wù)器上所有數(shù)據(jù)庫(kù)
參數(shù) --all-databases 同 -A
7、還原MySQL數(shù)據(jù)庫(kù)的命令
1) 不指定數(shù)據(jù)名還原,默認(rèn)生成原數(shù)據(jù)庫(kù)名稱,還原所有數(shù)據(jù)庫(kù)。
2) 指定數(shù)據(jù)名還原,還原指定單個(gè)數(shù)據(jù)庫(kù),需在數(shù)據(jù)庫(kù)種預(yù)先創(chuàng)建一個(gè)testDatabase名稱。
3) 還原壓縮的MySQL數(shù)據(jù)庫(kù)
4) 進(jìn)入數(shù)據(jù)庫(kù)用source導(dǎo)入
增量備份是針對(duì)于數(shù)據(jù)庫(kù)的bin-log日志進(jìn)行備份的,增量備份是在全量的基礎(chǔ)上進(jìn)行操作的。增量備份主要是靠mysql記錄的bin-log日志。
1:查看是否開啟bin-log日志
進(jìn)入mysql輸入命令可查看。
顯示如下為開啟狀態(tài),日志文件在/var/lib/mysql/以binlog.00001的格式保存。
如未開啟,需要在配置文件種配置
2:查看目前使用的bin-log日志文件
進(jìn)入mysql查看命令。
顯示如下,目前使用的是binlog.000022文件,所有操作都記錄在此文件。
查看當(dāng)前testDatabase的表myTable數(shù)據(jù)如下,
3:刷新日志,使用新的日志文件(備份)
在命令端執(zhí)行命令
日志文件從 binlog.000022 變?yōu)?binlog.000023
這時(shí)相當(dāng)與已經(jīng)備份成功,備份文件即為上次的binlog.000022日志文件。
4:刪除數(shù)量,從日志還原數(shù)據(jù)
1) 刪除ABC行
查詢以及沒有ABC行列。
2) 恢復(fù)數(shù)據(jù)ABC行
退出mysql,在命令端用mysqlbinlog命令恢復(fù)到binlog.000022日志狀態(tài)。
進(jìn)入數(shù)據(jù)庫(kù)再次查看數(shù)據(jù),ABC已經(jīng)恢復(fù)。
增量備份完成。
恢復(fù)整個(gè)數(shù)據(jù)庫(kù)首先,如果要恢復(fù)的數(shù)據(jù)庫(kù)是含有授權(quán)表的mysql數(shù)據(jù)庫(kù),將需要使用--skip-grant-tables選項(xiàng)運(yùn)行服務(wù)器。否則,服務(wù)器將抱怨無法找到授權(quán)表。在恢復(fù)表之后,執(zhí)行mysqladmin flush-privileges 來告訴服務(wù)器加載授權(quán)表,并用它們啟動(dòng)。將原數(shù)據(jù)庫(kù)目錄的內(nèi)容拷貝到其他的地方。例如,您可能會(huì)在稍后用它們進(jìn)行崩潰表的事后分析檢查(post-mortem examination)。用最新的備份文件重新加載數(shù)據(jù)庫(kù)。如果您打算使用由mysqldump 加載的文件,則需要將它們作為mysql的輸入。如果打算使用從數(shù)據(jù)庫(kù)中直接拷貝的文件(如,用tar 或c p),則將它們直接拷貝回到該數(shù)據(jù)庫(kù)目錄中。但是,在這種情況下,應(yīng)該在拷貝這些文件之前關(guān)閉服務(wù)器,然后再重新啟動(dòng)它。用更新日志重做在進(jìn)行備份后又修改了數(shù)據(jù)庫(kù)表的查詢。對(duì)于所有可用的更新日志,可使用它作為mysql的輸入。指定--one-database 選項(xiàng),使mysql只對(duì)想要恢復(fù)的數(shù)據(jù)庫(kù)執(zhí)行查詢。如果您知道需要使用所有的更新日志文件,可在包含日志的目錄中使用下列命令:% ls-t-r-l update.(0-9)* | xargs cat | mysql--one-database db_namels 命令產(chǎn)生更新日志文件的單列列表,更新日志文件根據(jù)服務(wù)器生成的順序進(jìn)行排序(要知道,如果您修改了其中的任何文件,排序的順序都將改變,這將導(dǎo)致更新日志按錯(cuò)誤的順序使用)。您很可能必須使用某些更新日志。例如,如果自備份以來所產(chǎn)生的日志命名為update.392、pdate.393 等等,可以重新運(yùn)行它們中的命令:% mysql--one-database db_name updata.392% mysql--one-database db_name updata.393…如果正在運(yùn)行恢復(fù)并打算使用更新日志恢復(fù)由于失策的DROP DATA BASE、DROPTABLE或DELETE 語句而丟失的信息,應(yīng)確保先從更新日志中刪除這些語句?;謴?fù)單個(gè)的表恢復(fù)單個(gè)表是很困難的。如果有通過mysqldump 生成的備份文件并且它恰好不包含您想要的表數(shù)據(jù),則需要抽取相關(guān)的行并用它們作為mysql的輸入,這部分較容易。困難的是抽取應(yīng)用于該表的更新日志的片段。您會(huì)發(fā)現(xiàn): mysql_find_rows 實(shí)用程序?qū)@方面有幫助,它可以從更新日志中抽取多行查詢。另一種可能性是用另一個(gè)服務(wù)器恢復(fù)整個(gè)數(shù)據(jù)庫(kù),然后將所要的該表的文件拷貝到原始數(shù)據(jù)庫(kù)中。這實(shí)際很容易!在將文件拷貝回?cái)?shù)據(jù)庫(kù)目錄時(shí),應(yīng)確保原始數(shù)據(jù)庫(kù)的服務(wù)器關(guān)閉。
使用MYSQL數(shù)據(jù)庫(kù)的朋友,對(duì)MySQL進(jìn)行備份和還原是比較重要的。重要的事簡(jiǎn)單做,今天介紹我們使用mysqldump和source命令來備份還原,分為Windows下和Linux下的MYSQL備份與還原操作。
一、Win32系統(tǒng)下MySQL的備份還原方法
備份:在“運(yùn)行”中輸入“cmd
”,利用“cd
/Program
Files/MySQL/MySQL
Server
5.0/bin”進(jìn)入bin文件夾,輸入“mysqldump
-u
用戶名
-p
databasename
exportfilename”導(dǎo)出數(shù)據(jù)庫(kù)到文件,如mysqldump
-u
root
-p
voicevoice.sql,然后輸入密碼即可開始導(dǎo)出MYSQL數(shù)據(jù),實(shí)現(xiàn)備份操作。
還原:進(jìn)入MySQL
Command
Line
Client,輸入密碼,進(jìn)入到“mysql”,輸入命令"show
databases;",回車,看看有些什么數(shù)據(jù)庫(kù);建立你要還原的數(shù)據(jù)庫(kù),輸入"create
database
voice;",回車;切換到剛建立的數(shù)據(jù)庫(kù),輸入"use
voice;",回車;導(dǎo)入數(shù)據(jù),輸入"source
voice.sql;",回車,開始導(dǎo)入,再次出現(xiàn)"mysql"并且沒有提示錯(cuò)誤即還原成功。
二、Linux下MySQL的備份與還原方法:
備份:[root@localhost
~]#
cd
/var/lib/mysql
(進(jìn)入到MySQL庫(kù)目錄,根據(jù)自己的MySQL的安裝情況調(diào)整目錄)
[root@localhost
mysql]#
mysqldump
-u
root
-p
voicevoice.sql,輸入密碼即可。
還原:有兩種方法可選:
第一種方法:[root@localhost
~]#
mysql
-u
root
-p
回車,輸入密碼,進(jìn)入MySQL的控制臺(tái)"mysql",同1.2還原。
第二種方法:
[root@localhost
~]#
cd
/var/lib/mysql
(進(jìn)入到MySQL庫(kù)目錄,根據(jù)自己的MySQL的安裝情況調(diào)整目錄)
[root@localhost
mysql]#
mysql
-u
root
-p
voice
新聞標(biāo)題:mysql備份后怎么恢復(fù),mysql數(shù)據(jù)庫(kù)的備份和恢復(fù)常用方法
當(dāng)前鏈接:http://aaarwkj.com/article8/dssphip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)、自適應(yīng)網(wǎng)站、建站公司、App開發(fā)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)