MySQL數(shù)據(jù)備份和還原

雖然不能恢復(fù)百分百,至少能將損失降到最低。

有個(gè)問(wèn)題測(cè)試:

? 主從同步時(shí),主庫(kù)網(wǎng)絡(luò)斷開(kāi),binlog dump線程kill掉,然后從庫(kù)一直是同步狀態(tài)。

? 從庫(kù)默認(rèn)有個(gè)連接重試的時(shí)間,有時(shí)重試的時(shí)間很長(zhǎng),所以短時(shí)間內(nèi)是不連主庫(kù)的,此時(shí)從庫(kù)就會(huì)顯示是正常的狀態(tài)。

? Seconds_Behind_Master:0 從庫(kù)落后于主庫(kù)的秒數(shù)。是可以參考的 。

? Slave_IO_Running:YES

? Slave_SQL_Running:YES

? 如果報(bào)錯(cuò):Last_Errno:會(huì)有一個(gè)number值,顯示的是MySQL的錯(cuò)誤號(hào),從而判斷是什么錯(cuò)誤

冷備份:需要離線備份,需要關(guān)閉服務(wù)才能進(jìn)行備份。生產(chǎn)環(huán)境中不適用。

熱備份:需要在線備份

邏輯備份:如mysqldump:備份的是SQL語(yǔ)句

物理備份:對(duì)磁盤上的數(shù)據(jù)目錄進(jìn)行打包,拷貝等

主從配置只是備份的一種解決方案。

調(diào)優(yōu):

? ?1、底層系統(tǒng)優(yōu)化,盡可能節(jié)省資源。更多的資源交給MySQL處理,

? ?2、優(yōu)化數(shù)據(jù)庫(kù)運(yùn)行方式,優(yōu)化變量,能夠運(yùn)行更高效。

? ?3、優(yōu)化數(shù)據(jù)庫(kù)線程,如:線程重用技術(shù),從而提高數(shù)據(jù)庫(kù)訪問(wèn)效率,線程利用效率。

? ?4、搭建NoSQL緩存,

衡量數(shù)據(jù)備份是否合格,2個(gè)重要的指標(biāo):

? 1、RPO 恢復(fù)點(diǎn)目標(biāo)(關(guān)注的是恢復(fù)數(shù)據(jù)的程度)

? 2、RTO 恢時(shí)間目標(biāo)(恢復(fù)數(shù)據(jù)需要多長(zhǎng)的時(shí)間)

?生產(chǎn)環(huán)境中,不同的備份方式包含的備份指標(biāo)是不太一樣的。

生產(chǎn)環(huán)境中常見(jiàn)的備份方式:

? 最基本的:

?1、冷備份。

? 最簡(jiǎn)單,也最容易實(shí)現(xiàn)。數(shù)據(jù)目錄:/var/lib/mysql(yum安裝后的默認(rèn)位置),存放了所有數(shù)據(jù)庫(kù)文件,以及索引文件等信息。只需要將這個(gè)目錄下的所有文件,進(jìn)行拷貝保存,當(dāng)數(shù)據(jù)出現(xiàn)問(wèn)題、需要恢復(fù)的時(shí)候,只需要:將這個(gè)目錄拷貝到需要恢復(fù)的主機(jī)即可。

? 然而在生產(chǎn)環(huán)境中,這種方式?jīng)]什么用、因?yàn)樵谏a(chǎn)環(huán)境的機(jī)器中,都是需要7*24小時(shí)在線提供服務(wù)的,這種冷備份需要先停機(jī),然后再備份。這樣影響了在線的業(yè)務(wù),所以這樣雖然簡(jiǎn)單,但只適合特殊的環(huán)境,對(duì)不間斷提供業(yè)務(wù)的環(huán)境這種方式不適合。


?2、快照備份。

? Raid,LVM(邏輯卷,屬于熱備份支持在線備份。)

? LVM中:LVM快照的功能,如果MySQL安裝在的是一個(gè)LVM的分區(qū),可以通過(guò)快照的功能,將數(shù)據(jù)文件,數(shù)據(jù)庫(kù)、數(shù)據(jù)表、以及日志文件都通過(guò)快照進(jìn)行備份。

? 有個(gè)很大的缺點(diǎn):必須保證要備份的數(shù)據(jù)文件都存在一個(gè)邏輯卷中,然后對(duì)這個(gè)卷進(jìn)行快照備份。

? 還有一個(gè)問(wèn)題是:只能存放在本地。

?2-1、備份的數(shù)據(jù),全部存放在一個(gè)邏輯卷中。

?2-2、只支持本地備份。

3、邏輯備份。

? 官方的工具,mysqldump,支持默認(rèn)的數(shù)據(jù)庫(kù)存儲(chǔ)引擎。相對(duì)簡(jiǎn)單,是通過(guò)sql語(yǔ)句備份的。

? 問(wèn)題:備份速度稍慢。(這是一種單線程的備份工具,處理一個(gè)升級(jí)版:mydumper)

普通文件的數(shù)據(jù)同步

? 1、NFS網(wǎng)絡(luò)文件共享可以同步存儲(chǔ)數(shù)據(jù)(明文傳輸?shù)?

? 2、samba共享數(shù)據(jù)

? 3、定時(shí)任務(wù)或守護(hù)進(jìn)程結(jié)合rsync,scp。

? 4、inotify(sersync) + rsync觸發(fā)式實(shí)時(shí)數(shù)據(jù)同步

? 5、ftp數(shù)據(jù)同步

? 6、ssh key + scp/rsync

? 7、svn版本管理

? 8、rsync,sersync,inotify,union(雙向同步),csync2(多向同步)

MySQL的主從同步不是磁盤上文件直接同步。replication

在主從復(fù)制的基礎(chǔ)上如何保證數(shù)據(jù)的完整性:

? 1、在主庫(kù)宕機(jī)的時(shí),將主庫(kù)的bin-log日志拉取,讓從庫(kù)將數(shù)據(jù)恢復(fù)。(百度的支付,游戲支付可能是這么做的)

? 2、雙向?qū)懭霐?shù)據(jù)(占用資源較多)

? 3、用程序記錄宕機(jī)時(shí)的所有數(shù)據(jù)(寫一分鐘的log,記錄到內(nèi)存中)

? 4、將異步同步,該為實(shí)時(shí)同步。在MySQL上有個(gè)谷歌開(kāi)發(fā)的半同步插件。某個(gè)半同步從庫(kù)成功,再向前面報(bào)告成功,將這2個(gè)主、從綁定到一起,要成功一起成功。先寫的主。

MySQL主從復(fù)制原理過(guò)程:

?1、slave服務(wù)器上執(zhí)行start slave,開(kāi)啟主從復(fù)制開(kāi)關(guān)。

2、此時(shí),slave服務(wù)器的IO線程會(huì)通過(guò)在master上授權(quán)的復(fù)制用戶權(quán)限請(qǐng)求連接master服務(wù)器,并請(qǐng)求從指定Binlog日志文件的指定位置(日志文件名和位置就是在配置主從復(fù)制服務(wù)時(shí)執(zhí)行change master命令時(shí)指定的),之后發(fā)送Binlog日志內(nèi)容。

?3、master服務(wù)器接收到來(lái)自slave服務(wù)器的IO線程的請(qǐng)求后,master服務(wù)器上負(fù)責(zé)復(fù)制的IO線程根據(jù)slave服務(wù)器的IO線程請(qǐng)求的信息讀取指定的Binlog日志 指定位置之后的 Binlog日志信息,然后返回給slave端的IO線程,返回的信息中除了Binlog日志內(nèi)容外,還有本次返回日志內(nèi)容后在master服務(wù)器端的新的Binlog文件名稱以及在Binlog中的下一個(gè)指定需要更新位置。

?4、當(dāng)slave服務(wù)器的IO線程獲取到來(lái)自master服務(wù)器上的IO線程發(fā)送的日志內(nèi)容以、日志文件、位置點(diǎn)后,將Binlog日志內(nèi)容依次寫入到slave端自身的RelayLog(即中繼日志)文件(MySQL-relay-bin.xxxxxx)的最末端,并將新的Binlog文件名和位置記錄到:master-info文件中,以便下一次讀取master端新的Binlog日志時(shí)能告訴master服務(wù)器需要從Binlog日志的哪個(gè)文件哪個(gè)位置開(kāi)始請(qǐng)求新的Binlog日志內(nèi)容。

?5、slave服務(wù)器端的SQL線程實(shí)時(shí)的檢測(cè)本地RelayLog中新增的日志內(nèi)容,然后及時(shí)的把Log文件中的內(nèi)容解析成在master端曾經(jīng)執(zhí)行的SQL語(yǔ)句的內(nèi)容,并slave自身按語(yǔ)句的順序執(zhí)行應(yīng)用這些SQL語(yǔ)句,應(yīng)用完畢后清理應(yīng)用過(guò)的日志。

6、經(jīng)過(guò)了上面的過(guò)程,就可以確保在master端和slave端執(zhí)行了同樣的SQL語(yǔ)句。當(dāng)復(fù)制狀態(tài)正常的情況下,master端和slave端的數(shù)據(jù)是完全一樣的,MySQL的同步機(jī)制是由一些特殊情況的。

若從庫(kù)再作為主時(shí),開(kāi)啟Binlog日志:默認(rèn)情況下復(fù)制過(guò)來(lái)后直接寫入數(shù)據(jù)庫(kù)文件,并不寫入log-bin,需要修改:log_slave_update后則可以寫入。

?1、主庫(kù)打開(kāi)log-bin 二進(jìn)制日志文件

?2、主庫(kù)授權(quán)用戶:grant replication slave on *.* to 'rep'@'192.168.88.%' identified by '123123';

? ?flush privileges; #刷新權(quán)限

?3、flush table with read lock;

#設(shè)置主庫(kù)只讀模式,暫時(shí)不可以寫入數(shù)據(jù)

?3-1、unlock tables;?

#解鎖數(shù)據(jù)表。

?4、備份主庫(kù)之前的數(shù)據(jù):mysqldump -uroot -p123123 -S /data/3306/mysql.sock ?-B -events --master-data=2 | gzip > rep.sql

#--master-data=2 #注釋create master to 命令。

###mysqldump備份數(shù)據(jù)之后,再確認(rèn)主庫(kù)Binlog日志及位置是否發(fā)生變化,如果發(fā)生變化則備份是有錯(cuò)誤的

? mysqldump -uroot -p123123 -S /data/3306/mysql.sock -A -B --master-data=1 --single-transaction | gzip > all_data.sql.gz

# --single-transaction 數(shù)據(jù)同步,InnoDB引擎,如果是MyISAM引擎會(huì)出現(xiàn)問(wèn)題,如果是update語(yǔ)句可能會(huì)在dump的時(shí)候重復(fù)執(zhí)行2次。

master.info文件用于從庫(kù)的IO線程獲取主庫(kù)的Binlog日志

relay-log.info用于從庫(kù)SQL線程記錄Binlog日志文件及Binlog文件的位置

MySQL主從同步配置步驟:

? 1、準(zhǔn)備倆臺(tái)數(shù)據(jù)庫(kù)環(huán)境,或單臺(tái)多實(shí)例環(huán)境,能夠正常啟動(dòng)和登錄。

? 2、配置my.cnf文件,主庫(kù)配置log-bin和server-id參數(shù),從庫(kù)配置server-id,不能和主庫(kù)及其他庫(kù)一樣,一般不開(kāi)啟從庫(kù)log-bin功能,注意:配置參數(shù)后要重啟后生效。如果級(jí)聯(lián)主從:則做為從庫(kù)又是主庫(kù)的配置文件需要開(kāi)啟:log-bin 和 log-slave-update 后才會(huì)正常寫入。

? 3、登錄主庫(kù)增加用于從庫(kù)連接主庫(kù)同步的帳號(hào):

? ? grant replication slave on *.* to 'rep'@'192.168.88.%' identified by '123123';

? 4、登錄主庫(kù),整庫(kù)鎖表:flush table with read lock(窗口關(guān)閉即失效,超時(shí)參數(shù)到了也失效),然后:show master status; 查看Binlog日志文件及位置狀態(tài)。

補(bǔ)充:

5.1版本:flush tableswith read lock

? ?5.5版本:flush table with read lock

提示:鎖表命令的事件,在不同的引擎的情況,會(huì)受下面參數(shù)的控制,鎖表時(shí),如果超過(guò)設(shè)置時(shí)間不操作會(huì)自動(dòng)解鎖。

? ?interactive_timeout=60

? ?wait_timeout=60

? show variables like '%timeout%';

設(shè)置超時(shí)時(shí)間:

set global wait_timeout=10;

set global interactive_timeout=10;

退出再登錄即可查看到修改后的參數(shù)。重啟服務(wù)后會(huì)失效。永久設(shè)置,在設(shè)置后,修改配置文件。

? 5、新開(kāi)窗口,Linux命令行備份或?qū)С鲈械臄?shù)據(jù)庫(kù)數(shù)據(jù),并拷貝到從庫(kù)所在的服務(wù)器目錄。

? ? mysqldump -uroot -p123123 -S /data/3306/mysql.sock -A -B --events --master-data=2 | gzip > rep.sql

? 6、解鎖主庫(kù),unlock tables;

? 7、把主庫(kù)導(dǎo)出的原有數(shù)據(jù)恢復(fù)到從庫(kù)

? 8、根據(jù)主庫(kù)的show master status查看binlog的位置狀態(tài),在從庫(kù)執(zhí)行 change master to...語(yǔ)句。

? 9、從庫(kù)開(kāi)啟同步開(kāi)關(guān),start slave;

? 10、從庫(kù) show slave status\G; 查看同步狀態(tài),并在主庫(kù)進(jìn)行更新測(cè)試。

MySQL主從復(fù)制原理要點(diǎn):

? 1、異步方式同步

? 2、邏輯同步模式,多種模式,默認(rèn)是通過(guò)SQL語(yǔ)句執(zhí)行。

? 3、主庫(kù)通過(guò)記錄binlog實(shí)現(xiàn)對(duì)從庫(kù)的同步,binlo記錄數(shù)據(jù)庫(kù)的更新

? 4、主庫(kù)1個(gè)IO線程,從庫(kù)由1個(gè)IO線程一個(gè)SQL線程來(lái)完成的,剛開(kāi)時(shí)候的時(shí)候是由主庫(kù)的主進(jìn)程負(fù)責(zé)的,處理完后才交給主庫(kù)的IO線程的,之后主庫(kù)的IO,和從庫(kù)的IO才會(huì)進(jìn)行傳輸。

5、從庫(kù)關(guān)鍵文件master.info, relay-log , relay-info 功能。

? 6、如果從庫(kù)需要級(jí)聯(lián)從庫(kù),需要打開(kāi) log-bin 和 log-slave-updates 參數(shù)。

生產(chǎn)場(chǎng)景快速配置MySQL主從復(fù)制方案:

? 1、安裝好配置從庫(kù)的數(shù)據(jù)庫(kù),配置好log-bin和server-id參數(shù)。

? 2、無(wú)序配置主庫(kù)my.cnf文件,主庫(kù)的bin-log和server-id參數(shù)默認(rèn)配置好的。

? 3、登錄主庫(kù)增加用于從庫(kù)連接主庫(kù)同步的帳號(hào):

? ? grant replication slave on *.* to 'rep'@‘192.168.88.%’ identified by '123123';

4、使用半夜mysqldump帶--master-data=1備份的全備數(shù)據(jù)恢復(fù)到從庫(kù)。

? 5、在從庫(kù)執(zhí)行change master to...語(yǔ)句,無(wú)需binlog文件及對(duì)應(yīng)位置點(diǎn)。

? 6、從庫(kù)開(kāi)啟同步開(kāi)關(guān),start slave;

? 7、從庫(kù)show slave status\G;檢查同步狀態(tài),并在主庫(kù)進(jìn)行更新測(cè)試。

復(fù)制主線程狀態(tài):

? 下面列出了主服務(wù)器的Binlog Dump線程的State列的最常見(jiàn)的狀態(tài)。如果沒(méi)有在主服務(wù)器上看見(jiàn)任何Binlog Dump線程,說(shuō)明復(fù)制沒(méi)有在運(yùn)行,即目前沒(méi)有連接任何從服務(wù)器

? 1、Sending binlog event to slave

? ?二進(jìn)制日志由各種事件組成,一個(gè)事件通常為一個(gè)更新加一些其他信息。線程已經(jīng)從二進(jìn)制日志讀取了一個(gè)事件并且正將它發(fā)送到從服務(wù)器

? 2、Finished reading one binlog;switching to next binlog

? ?線程已經(jīng)讀完二進(jìn)制日志文件并且正打開(kāi)下一個(gè)要發(fā)送到從服務(wù)器的日志文件。

? 3、Has sent all binlog to slave;waiting for binlog to be updated

? ?線程已經(jīng)從二進(jìn)制日志讀取所有主要的更新并且已經(jīng)發(fā)送到了從服務(wù)器。線程現(xiàn)在正空閑,等待由主服務(wù)器上新的更新導(dǎo)致的出現(xiàn)在二進(jìn)制日志中的新事件。

? 4、waiting finalize termination

? ?線程停止時(shí)發(fā)生的一個(gè)很簡(jiǎn)單的狀態(tài)。

從IO線程狀態(tài):

? 下面列出了從服務(wù)器的I/O線程的State列的最常見(jiàn)的狀態(tài)。該狀態(tài)也出現(xiàn)在Slave_IO_State列,由show slave status顯示。可以通過(guò)該語(yǔ)句仔細(xì)瀏覽所有發(fā)生的事情。

? 1、Connecting to msater

? ?線程正視圖連接主服務(wù)器

? 2、Checking master version

? ?建立同主服務(wù)器之間的連接后立即臨時(shí)出現(xiàn)的狀態(tài)

? 3、Registering slave on master?

? ?建立同主服務(wù)器之間的連接后立即臨時(shí)出現(xiàn)的狀態(tài)

? 4、Requesting binlog dump

? ?建立同主服務(wù)器之間的連接后立即臨時(shí)出現(xiàn)的狀態(tài)。線程向主服務(wù)器發(fā)送一條請(qǐng)求,索取從請(qǐng)求的二進(jìn)制日志文件名和位置開(kāi)始的二進(jìn)制日志的內(nèi)容。

? 5、Waiting to reconnect after a failed binlog dump request

? ?如果二進(jìn)制日志裝儲(chǔ)請(qǐng)求失敗(由于沒(méi)有連接),線程進(jìn)入睡眠狀態(tài),然后定期嘗試重新連接??梢允褂?--master-connect-retry 選項(xiàng)指定重試之間的間隔。

? 6、Reconnecting after a failed binlog dump request

? ?線程正嘗試重新連接主服務(wù)器

? 7、Waiting for master to send event

? ?線程已經(jīng)李娜街上主服務(wù)器,正等待二進(jìn)制日志事件到達(dá)。如果主服務(wù)器正空閑,會(huì)持續(xù)較長(zhǎng)的時(shí)間,如果等待持續(xù)slave_read_timeout秒,則發(fā)生超時(shí)。此時(shí),線程認(rèn)為連接被中斷并企圖重新連接。

? 8、Queueing master event to the relay log

? ?線程已經(jīng)讀取一個(gè)事件,正將它復(fù)制到中繼日志供SQL線程來(lái)處理。

? ?隊(duì)列master事件,已經(jīng)拿到binlog日志,往relay-log文件中塞的過(guò)程。

? 9、Waiting to reconnect after a failed master event read

? ?讀取時(shí)(由于沒(méi)有連接)出現(xiàn)錯(cuò)誤。線程企圖重新連接前將睡眠master-connect-retry秒。

? 10、Reconnecting after a failed master event read

? ?線程正嘗試重新連接主服務(wù)器,當(dāng)連接重新建立后,狀態(tài)變?yōu)閃aiting for master to send event。

? 11、Waiting for the slave SQL thread to free enough relay log space

? ?正使用一個(gè)非零relay_log_space_limit值,中繼日志已經(jīng)增長(zhǎng)到其他組合大小超過(guò)該值。I/O線程正等待,直到SQL線程處理中繼日志內(nèi)容并刪除部分中繼日志文件來(lái)釋放足夠的空間。

? 12、Waiting for slave mutex on exit

? ?線程停止時(shí)發(fā)生的一個(gè)很簡(jiǎn)單的狀態(tài)。

通過(guò)查看這些狀態(tài),從而指導(dǎo)MySQL工作到什么程度了,主的I/O、從的I/O、從的SQL都處于什么狀態(tài),所以當(dāng)數(shù)據(jù)不同步的時(shí)候可以通過(guò)查看這些狀態(tài)來(lái)定位問(wèn)題。

?通過(guò)MySQL線程同步狀態(tài)查看數(shù)據(jù)同步是否完成,用于主庫(kù)宕機(jī)或人工數(shù)據(jù)庫(kù)主從切換遷移等。

?主庫(kù)宕機(jī)選擇最快的從庫(kù)提升為主,就需要查看,當(dāng)然也可以利用MySQL的半同步功能,選擇固定的庫(kù)提升為主。

?1、先鎖表,停止用戶寫入數(shù)據(jù)。flush table with read lock;

?2、查看狀態(tài)是否已經(jīng)將二進(jìn)制文件發(fā)送完畢,show processlist;

?3、切換主庫(kù)。

?4、查看從庫(kù)是否將主庫(kù)的binlog日志,全部拉取過(guò)來(lái)。是否都寫入到了從庫(kù)

復(fù)制從SQL線程狀態(tài):

? 下面列出了從服務(wù)器的SQL線程的State列的最常見(jiàn)的狀態(tài)。

? 1、Reading event from the relay log

? ?線程已經(jīng)從中繼日志讀取一個(gè)事件,可以對(duì)事件進(jìn)行處理了。

? 2、Has read all relay log; waiting for the slave I/O thread to update it?

? ?線程已經(jīng)處理了中繼日志文件中的所有事件,現(xiàn)在正等待I/O線程將新事件寫入中繼日志。

? 3、Waiting for slave mutex on exit

? ?線程停止時(shí)發(fā)生的一個(gè)很簡(jiǎn)單的狀態(tài)

? ?I/O線程的State列也可以顯示語(yǔ)句的文本。這說(shuō)明線程已經(jīng)從中繼日志讀取了一個(gè)事件,從中提取了語(yǔ)句,并且正在執(zhí)行語(yǔ)句。?

讀寫分離配置方案:

? 中大型公司:通過(guò)程序(php,java)實(shí)現(xiàn)讀寫分離

? 測(cè)試環(huán)境:代理軟件(mysql-proxy,amoeba)

? 門戶網(wǎng)站,分布式dbproxy(讀寫分離,hash負(fù)載均衡,健康檢查),一主多從,主從同步

如何實(shí)現(xiàn)MySQL主從讀寫分離:

? 1、通過(guò)程序?qū)崿F(xiàn)讀寫分離(性能,效率最佳,推薦使用)

?? php和Java程序都可以通過(guò)設(shè)置多個(gè)連接文件輕松的實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的讀寫分離,即當(dāng)select時(shí),就去連接讀庫(kù)的連接文件,當(dāng)update,insert,delete時(shí)就連接寫庫(kù)的連接文件。

? 2、通過(guò)軟件實(shí)現(xiàn)讀寫分離

? ?MySQL-proxy,Amoeba等代理軟件也可以實(shí)現(xiàn)讀寫分離功能,但最好的還是程序?qū)崿F(xiàn)讀寫分離。

? 3、開(kāi)發(fā)dbproxy,不對(duì)外,大戶都是內(nèi)部使用的。?

MySQL自帶的備份命令,mysqldump

語(yǔ)法:mysqldump -u 用戶名 -p 數(shù)據(jù)庫(kù)名 > 備份的文件名.sql

?mysqldump testdata > bak.sql

#對(duì)數(shù)據(jù)庫(kù)testdata進(jìn)行備份。?

?mysql data1 < bak.sql

#恢復(fù)的時(shí)候需要指定數(shù)據(jù)庫(kù),恢復(fù)備份數(shù)據(jù)庫(kù)中的數(shù)據(jù)表。

##如果還原的是數(shù)據(jù)庫(kù),則不需要指定 數(shù)據(jù)庫(kù)名稱。

?mysqldump data1 t1 > backt.sql

#只備份了data1數(shù)據(jù)庫(kù)中的 t1 數(shù)據(jù)表。恢復(fù)同上。

?mysqldump --database data1 data2 > databak.sql

#同時(shí)備份數(shù)據(jù)庫(kù)data1,data2,需要用--database指定備份的是數(shù)據(jù)庫(kù)。

?mysqldump --all-database > alldata.sql

#備份數(shù)據(jù)庫(kù)管理系統(tǒng)中的所有數(shù)據(jù)庫(kù)?;謴?fù)刪除掉的。

區(qū)別:

?mysqlhostcopy: 可以實(shí)現(xiàn)MySQL在某些情況下,能夠?qū)崿F(xiàn)MySQLdump不方便做的一些功能,如:備份所有以A開(kāi)頭的數(shù)據(jù)庫(kù),可以很好的和正則表達(dá)式集合起來(lái)用。

? 是快速文件意義上的備份,相當(dāng)于cp命令,但比cp效率高很多。

? 只能在本地操作。

? copy備份文件到數(shù)據(jù)目錄覆蓋即可。

? 只支持MyISAM存儲(chǔ)引擎

?mysqldupm:

? 是一個(gè)數(shù)據(jù)庫(kù)端的sql語(yǔ)句的集合,里面全都是sql語(yǔ)句。

? 可以遠(yuǎn)程操作(最終的備份文件,還是存放在原服務(wù)器上的)

? 還原時(shí),導(dǎo)入SQL文件。

? 支持MyISAM和InnoDB存儲(chǔ)引擎

倆者支持的存儲(chǔ)引擎不同,安裝時(shí)候的條件不一樣,操作的方法不一樣,

共同點(diǎn):

? 在做操作的時(shí)候,都要執(zhí)行鎖表的操作(行級(jí)鎖,表級(jí)鎖,頁(yè)級(jí)鎖)

?mysqlhostcopy --flushlog --regexp=^a /backup

#如果數(shù)據(jù)庫(kù)中沒(méi)有備份的內(nèi)容則會(huì)報(bào)錯(cuò)

# --flushlog必須加的,用來(lái)刷新日志系統(tǒng)。--regexp=指定備份什么樣的數(shù)據(jù)庫(kù)

場(chǎng)景:

? ?mysqldump + 計(jì)劃任務(wù) 在凌晨1點(diǎn)備份,然而3點(diǎn)的時(shí)候,需要恢復(fù)數(shù)據(jù),也就是1點(diǎn)到3點(diǎn)之間的數(shù)據(jù)沒(méi)有了。這時(shí)候就需要 : 二進(jìn)制文件備份。(利用的是MySQL中提供的日志功能來(lái)進(jìn)行備份的)

MySQL中的日志:

? ?網(wǎng)站一般有2個(gè)日志文件:一個(gè)訪問(wèn)日志,一個(gè)錯(cuò)誤日志

? ?FTP:一個(gè)日志文件。

? ?數(shù)據(jù)庫(kù):有多個(gè)日志文件。錯(cuò)誤日志,一般查詢?nèi)罩?,慢查詢?nèi)罩荆M(jìn)制日志,事務(wù)日志等。

show global variables like '%log%';

# 在MySQL中所啟動(dòng)的日志相關(guān)的一些變量。

binlog開(kāi)頭的二進(jìn)制日志信息。

innodb開(kāi)頭的事務(wù)日志。

general_log:查詢?nèi)罩?。也叫一般查詢?nèi)罩镜娜罩拘畔ⅰ?/p>

relay_log: 中繼日志

log_slow_gueries: 有slow的屬于慢查詢?nèi)罩尽?/p>

錯(cuò)誤日志的信息:

?show global varibales like 'log_error';

#查看錯(cuò)誤日志信息位置。

? 1、服務(wù)器在啟動(dòng)和關(guān)閉過(guò)程中一些信息,運(yùn)行過(guò)程中產(chǎn)生的一些錯(cuò)誤信息也會(huì)記錄

? 2、主從聯(lián)機(jī)的時(shí)候,從服務(wù)器上產(chǎn)生的一些信息,也會(huì)存放到主服務(wù)器的錯(cuò)誤日志中,

修改日志文件位置:修改主配置文件: my.cnf 在[mysqld_safe]模塊下

一般查詢?nèi)罩荆?/p>

? 記錄對(duì)數(shù)據(jù)庫(kù)的查詢操作,如:select、show。

? general_log:設(shè)置一般查詢?nèi)罩臼欠裥枰_(kāi)啟,默認(rèn)是OFF關(guān)閉狀態(tài)。

為什么默認(rèn)是關(guān)閉的:比如:電商網(wǎng)站,在高并發(fā)查詢商品的時(shí)候都會(huì)記錄下來(lái),從而日志增加非常快,并且記錄用戶查詢商品的記錄沒(méi)有多大意義。

? 這也可以得到用戶的一些操作習(xí)慣,分析用戶的購(gòu)物需求,這些不是通過(guò)數(shù)據(jù)庫(kù)的查詢?nèi)罩緦?shí)現(xiàn)的,是通過(guò)會(huì)話實(shí)現(xiàn)的

? general_log_file:設(shè)置一般查詢?nèi)罩镜哪J(rèn)存放位置

開(kāi)啟查詢?nèi)罩疚募?在主配置文件:my.cnf中[mysqld]模塊下:log=ON.即可。修改配置文件需要重啟服務(wù)才會(huì)生效。

一般查詢?nèi)罩颈4娴念愋停?/p>

? show global variables like 'log_output';

#value對(duì)應(yīng)的值是:FILE。這個(gè)值可以改成table,這樣會(huì)一般日志在保存信息的時(shí)候不是存在文件里,而存到數(shù)據(jù)庫(kù)中。以數(shù)據(jù)表的形式記錄日志的信息。

? 一般查詢?nèi)罩驹谏a(chǎn)環(huán)境中不打開(kāi),是為了節(jié)省服務(wù)器的資源。

慢查詢?nèi)罩荆?/p>

? ?為什么會(huì)查詢慢? 服務(wù)器性能達(dá)到瓶頸,網(wǎng)絡(luò)出現(xiàn)延遲,數(shù)據(jù)庫(kù)表結(jié)構(gòu)應(yīng)該優(yōu)化,數(shù)據(jù)量過(guò)大等原因。

從而導(dǎo)致查詢某條信息時(shí),時(shí)間過(guò)長(zhǎng),這樣的信息都應(yīng)該保存起來(lái),

log_slow_queries OFF: 默認(rèn)是沒(méi)有開(kāi)啟的。

打開(kāi),主配置文件中添加:[mysqld]模塊下:

log-slow-queries=/var/slow/mysql-slow.log

重啟服務(wù),使配置文件生效。

查詢慢的條規(guī)定設(shè)定的時(shí)間:

show global variables like '%long%';

#long_query_time:mysql默認(rèn)的一個(gè)時(shí)間,如果達(dá)到設(shè)置的事件還沒(méi)有響應(yīng)的話,就人為這是一個(gè)慢查詢

? 修改主配置文件:

打開(kāi)主配置文件:my.cnf [mysqld]模塊下添加:

?long_query_time=2 #設(shè)置超過(guò)2秒記錄到慢查詢?nèi)罩荆瑔挝幻搿?/p>

二進(jìn)制日志:

? ?如果只是用邏輯備份:mysqldupm + 計(jì)劃任務(wù),是沒(méi)辦法滿足生產(chǎn)環(huán)境中數(shù)據(jù)重要性備份的需求的。

所以需要通過(guò)二進(jìn)制日志文件,對(duì)其進(jìn)行一個(gè)補(bǔ)充,

特點(diǎn):

? 會(huì)記錄所有更改數(shù)據(jù)庫(kù)狀態(tài)的SQL操作。如:create 、drop、update

查詢二進(jìn)制日志文件是否開(kāi)啟:

? show global variables like '%log%';

#log_bin 表示二進(jìn)制日志的一個(gè)狀態(tài),默認(rèn)是OFF,

打開(kāi)二進(jìn)制文件:

修改主配置文件,

?在[mysqld]模塊中:log-bin=mysql-bin。指定一下二進(jìn)制文件即可開(kāi)啟二進(jìn)制日志。

??查看正在使用的二進(jìn)制日志:

show binary logs;

#可以看到正在使用的二進(jìn)制日志的文件名叫什么。后面的序號(hào):00001表示使用的是第一個(gè)二進(jìn)制文件

#file size:表示文件的大小。

查看這個(gè)二進(jìn)制文件的內(nèi)容:

?show binlog events in 'mysql-bin.00001';

#查看正在使用的二進(jìn)制文件里面的內(nèi)容。在數(shù)據(jù)目錄下

#log_name: 文件名

#Pos: 起始大小(記錄某個(gè)信息之前的大小,KB)

#Event_type: 日志文件的格式

#Server_id: 服務(wù)器默認(rèn)分配的一個(gè)ID號(hào)。

#End_log_pos:結(jié)束的大小。(記錄完以后的大小,KB)

#Info: 記錄的信息。記錄的是更改數(shù)據(jù)時(shí)的命令SQL語(yǔ)句

? 用二進(jìn)制管理工具,查看二進(jìn)制日志文件:

?mysqlbinlog mysql-bin.000001


二進(jìn)制日志文件恢復(fù)時(shí)候,指定恢復(fù)的范圍:

?1、通過(guò)事件指定還原范圍

? ?mysqlobinlog --start-datetime '2013-11-22 2:52:52' --stop-datetime '2013-11-22 2:55:44' mysql-bin.000001 | mysql -uroot -p

#這個(gè)命令實(shí)在數(shù)據(jù)目錄下執(zhí)行的。

?2、通過(guò)大小指定還原范圍

? ?mysqlbinlog --start-position 264 --sopt-positon 341 mysql-bin.000001 | mysql -uroot -p?

二進(jìn)制文件:

? ‘/*!*/’ 作為分割,at 106:記錄的是文件的大小,第三行是:記錄的時(shí)間。

通過(guò)大小,或時(shí)間都可以將數(shù)據(jù)恢復(fù)。

二進(jìn)制日志指定數(shù)據(jù)庫(kù)導(dǎo)出SQL語(yǔ)句:

? mysqlbinlog -d dbname mysql-bin.000002 > dbname.sql

# -d 截取指定庫(kù)的binlog文件SQL文件。

#從而可以指定需要恢復(fù)數(shù)據(jù)的數(shù)據(jù)庫(kù),進(jìn)行數(shù)據(jù)恢復(fù)。

二進(jìn)制日志文件,指定位置點(diǎn)恢復(fù):

? mysqlbinlog mysql-bin.000002 --start-position=365 --stop-position=465 -r pos.sql

# -r : 相當(dāng)與是重定向

#導(dǎo)出的SQL語(yǔ)句是 365到465之間的SQL語(yǔ)句

二進(jìn)制日志文件,指定時(shí)間點(diǎn)恢復(fù):

? mysqlbinlog mysql-bin.000002 --start-datetime='2017-10-16 17:14:16' --stop-datetime='2017-10-16 17:15:20' -r time.sql

# -r : 相當(dāng)于是重定向

#導(dǎo)出的SQL語(yǔ)句,都是在指定時(shí)間段內(nèi)的

# 這個(gè)時(shí)間不一定對(duì)應(yīng)上當(dāng)時(shí)需要恢復(fù)數(shù)據(jù)的時(shí)間,可以是早些的時(shí)間:2017-10-16 17:14:10?

--master-data

? 這個(gè)值 =1 時(shí):下面的語(yǔ)句是沒(méi)有注釋掉的

? 這個(gè)值 =2 時(shí):下面的語(yǔ)句是由注釋掉的 --:表示注釋

change master to master_log_file='mysql-bin.000002',master_log_pos=1191;

mysqldump + 計(jì)劃任務(wù) + 二進(jìn)制日志文件

?二進(jìn)制文件雖然能幫助備份數(shù)據(jù)庫(kù)中的一些操作,然而還原的時(shí)候還是比較麻煩的,

更傾向于實(shí)時(shí)的備份方式。

完美備份方案: 主從數(shù)據(jù)備份是單向的。只可以主同步到從,反之是不可以的。

?多機(jī)配置之主從設(shè)置。

主服務(wù)器提供給用戶訪問(wèn)及操作。

從服務(wù)器:用戶無(wú)法訪問(wèn),僅用來(lái)備份主服務(wù)器產(chǎn)生的數(shù)據(jù)。

從服務(wù)器作用:備份用戶訪問(wèn)主服務(wù)器時(shí)操作所產(chǎn)生的所有的數(shù)據(jù)。

設(shè)置后:主服務(wù)器會(huì)打開(kāi)一個(gè)線程(I/O),在從服務(wù)器上打開(kāi)2個(gè)線程(I/O SQL).

如果一個(gè)用戶訪問(wèn)了主服務(wù)器,提交了一個(gè)SQL請(qǐng)求,創(chuàng)建一個(gè)數(shù)據(jù)(create database aa;),這個(gè)請(qǐng)求會(huì)交給主服務(wù)器上的I/O線程,這時(shí)查詢管理其和存儲(chǔ)管理器就開(kāi)始工作,會(huì)分析用戶的這次請(qǐng)求,解析語(yǔ)法,解析完這個(gè)語(yǔ)法后將這個(gè)語(yǔ)法執(zhí)行出來(lái),執(zhí)行完以后就會(huì)產(chǎn)生一個(gè)結(jié)果,這個(gè)結(jié)果分倆部分保存:

? 第一部分:用戶提交的這個(gè)操作是個(gè)SQL語(yǔ)句,(所有更改數(shù)據(jù)的操作都會(huì)存到二進(jìn)制日志文件中,時(shí)間越長(zhǎng)二進(jìn)制日志文件就會(huì)越多,所以需要有一個(gè)索引文件來(lái)管理這二進(jìn)制日志文件,索引文件:mysql-bin.index)。用戶提交的請(qǐng)求會(huì)記錄到本機(jī)的二進(jìn)制文件中,執(zhí)行后會(huì)在數(shù)據(jù)目錄中產(chǎn)生對(duì)應(yīng)的數(shù)據(jù)庫(kù)目錄(這個(gè)操作也是由線程提交過(guò)來(lái)的 )

? 在主從環(huán)境下,會(huì)實(shí)時(shí)的將數(shù)據(jù)備份給從服務(wù)器,(怎么傳給從服務(wù)器數(shù)據(jù),是以什么樣的方式保存的)

主服務(wù)器對(duì)從服務(wù)器做授權(quán)操作 grant replication slave 表示:授權(quán)某一個(gè)主機(jī),可以來(lái)這里同步數(shù)據(jù)(授權(quán)一個(gè)用戶,密碼,權(quán)限 來(lái)訪問(wèn))。管理員在從服務(wù)器上生成一個(gè)文件,Master.info:這個(gè)文件由管理員輸入的(記錄了:登錄主服務(wù)器所需要的信息,這些信息由管理員通過(guò):change master to挨個(gè)寫入,包括:(下有案例)

??????Master_host:服務(wù)器IP地址多少。

? ? ? Master_user: 服務(wù)器授權(quán)的用戶名。

??????Master_passwd: 服務(wù)器授權(quán)的密碼多少。

? ? ? Master_log_file: 服務(wù)器正在使用的二進(jìn)制文件)

? ? ? Master_log_pos: 二進(jìn)制文件是從哪里開(kāi)始使用的

##可以生成master.info的登錄信息。

這些信息都是由管理員給從服務(wù)器輸入的。輸入完以后會(huì)在從服務(wù)器的數(shù)據(jù)目錄下生成一個(gè)Master.info的文件。將信息記錄在里面。

? 從而,從服務(wù)器就可以通過(guò)里面記錄的授權(quán)信息,用這些授權(quán)信息,嘗試連接主服務(wù)器,通過(guò)從服務(wù)器的I/O線程,向主服務(wù)器的I/O線程發(fā)起連接。

在主從環(huán)境中,為了讓同步更加高效,是將主服務(wù)器上的二進(jìn)制日志文件,傳給從服務(wù)器,所以給從服務(wù)器的是二進(jìn)制文件。

當(dāng)從服務(wù)器拿到這個(gè)二進(jìn)制文件后,會(huì)在從服務(wù)器上也生成一個(gè)文件,Relay-bin.000001這樣的文件(中繼日志文件,也就是完整拷貝了主的二進(jìn)制日志文件中的信息)。從而記錄下主服務(wù)器上的一些用戶的操作,記錄在從服務(wù)器中的中繼文件中,這時(shí)候的從服務(wù)器的I/O線程就會(huì)通知另外一個(gè)線程工作,通知SQL線程,SQL線程會(huì)讀取中繼文件中的所有內(nèi)容,并且將其中的內(nèi)容完整的執(zhí)行一遍,從而從服務(wù)器也會(huì)在本地的數(shù)據(jù)庫(kù)中做出對(duì)應(yīng)的操作,

需要主從都開(kāi)啟二進(jìn)制文件記錄:

? 主配置文件: [mysqld]

?模塊下添加:

log-bin=mysql-bin ?#開(kāi)啟二進(jìn)制日志文件記錄

server-id=251 ? #區(qū)分主從服務(wù)器的身份,一般是IP地址的最后一位

show global variables like '%log_bin%';

#主從都需要,查看二進(jìn)制文件:log_bin 是否ON。

登錄到主服務(wù)器的數(shù)據(jù)庫(kù)系統(tǒng)中:

? grant replication slave on *.* to slave_user@'從服務(wù)器IP地址' identified by '123123';

#授權(quán)從服務(wù)器可以通過(guò)用戶:slave_user,用密碼:123123等錄,對(duì)任何數(shù)據(jù)

? show master status;

#查看當(dāng)前數(shù)據(jù)庫(kù)服務(wù)正在使用的二進(jìn)制日志文件的,文件名以及大小

在從服務(wù)器上指定主服務(wù)器授權(quán)的權(quán)限:登錄到數(shù)據(jù)庫(kù)操作

? change master to master_host='主服務(wù)器IP地址',

? ? ?master_user='slave_user',

? ? ?master_password='123123',

? ? ?master_log_file='mysql-bin.000001', #這個(gè)參數(shù)需要查看主服務(wù)器

? ? ?master_log_pos=262; #這個(gè)參數(shù)需要查看主服務(wù)器

執(zhí)行后就會(huì)在從服務(wù)器的數(shù)據(jù)目錄文件下產(chǎn)生一個(gè):master.info的配置文件。

? start slave;

#打開(kāi)從服務(wù)器功能 登錄到數(shù)據(jù)庫(kù)操作?

? show slave status\G;

#查看從服務(wù)器狀態(tài)?

2-1、mysqldump -B

? 提示:-B參數(shù)表示接多個(gè)庫(kù),并且增加use db,和create database db的信息。

? 生產(chǎn)環(huán)境:

? ? ?-B ? --database

? -B參數(shù)的作用:后指定多個(gè)數(shù)據(jù)

? ? mysqldump -uroot -p123123 -B dbname > /backup/dbnam_B.sql

? a)導(dǎo)出的語(yǔ)句會(huì)有一個(gè)創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)句,使用數(shù)據(jù)庫(kù)的語(yǔ)句。

? ? ?mysql -uroot -p123123 < /backup/dbname_B.sql #可以直接導(dǎo)入,不用指定數(shù)據(jù)庫(kù)名

? b)-B后指定多個(gè)數(shù)據(jù)庫(kù)備份。

2-2、mysqldump的--compact參數(shù):可以減少輸出,輸出讓容量更少,只適合調(diào)試用。

? ?options:

? ?? --skip-add-drop-table

? ? ?--no-set-name

? ?? --skip-disable-keys

? ? ?--skip-add-locks

因?yàn)橛辛诉@些參數(shù),所以--compact參數(shù)不安全

2-3、mysqldump壓縮備份

? ?mysqldump -uroot -p123123 -B dbname | gizp > /backup/dbname.sql.gz

備份數(shù)據(jù)時(shí) mysqldump 工具時(shí):

?1、導(dǎo)出數(shù)據(jù)用 -B 參數(shù)

?2、管道符 gzip 進(jìn)行壓縮

?3、-d : 備份表結(jié)構(gòu)

? ?mysqldump -uroot -p123123 -d dbname tblname;

?4、-t : 只備份數(shù)據(jù)

? ?mysqldump -uroot -p123123 -t dbname tblname;

?5、備份所有數(shù)據(jù)庫(kù)和表:-A

? ?mysqldump -uroot -p123123 -A -B --events | gzip > /backup/db_all.sql.gz

?6、切割bin-log日志:-F

?7、備份bin-log日志的位置:--master-data=1

? ? --master-data=2 時(shí):會(huì)在前面加注釋。

?8、--compact 去掉注釋,適合調(diào)試輸出,生產(chǎn)不用。

一般的MyISAM引擎就是鎖表,鎖表后是不能操作,也不能訪問(wèn)的

?9、-x,--lock-all-talbes 在備份數(shù)據(jù)的時(shí)候一般都是要鎖表的,從而保證數(shù)據(jù)的一致性。

?10、-l,--locak-tables 只讀鎖表

?11、--single-transaction 適合innoDB事務(wù)數(shù)據(jù)庫(kù)備份

? ?InnoDB表在備份時(shí),通常啟用選項(xiàng) --single-transaction 來(lái)保證備份的一致性,實(shí)際工作原理是設(shè)定本次會(huì)話的隔離級(jí)別為:REPEATABLE READ,保證本次會(huì)話(dump)時(shí),不會(huì)看到其他會(huì)話已經(jīng)提交了的數(shù)據(jù)。?

生產(chǎn)環(huán)境MyISAM引擎?zhèn)浞輸?shù)據(jù):

?備份命令:

? mysqldump -uroot -p123123 -A -B --master-data=2 -x --events | gzip > /backup/all_db.sql.gz

生產(chǎn)環(huán)境InnoDB引擎?zhèn)浞輸?shù)據(jù):工作中推薦使用InnoDB引擎。

?備份命令:

? mysqldump -uroot -p123123 -A -B --master-data=2 --single-transaction --events | gzip > /backup/all_db.sql.gz

如果2種引擎都有,以MyISAM引擎為主



--triggers : 觸發(fā)器

--routines : 存儲(chǔ)過(guò)程

分庫(kù)備份:主要是為恢復(fù)數(shù)據(jù)時(shí)方便,恢復(fù)小數(shù)據(jù)庫(kù)時(shí)候很快

? mysql -uroot -p123123 -e "show databases;" | grep -Evi "database|info|perfo" sed -r "s#^([a-z].*$)#mysqldump -uroot -p123123 --events -B \1 ?| gzip > /backup/\1.sql.gz#g" | bash

#要注意,命令的每個(gè)參數(shù)之間必須要有空格分割

##命令行備份多個(gè)數(shù)據(jù)庫(kù)

mysqldump備份的是SQL語(yǔ)句,屬于邏輯備份

命令行for循環(huán):

gz文件解壓的文件是需要先解壓再批量導(dǎo)入的。

? for dbname in `ls *.sql | sed "s#_back.sql##g"` ; do mysql -uroot -p123123 < ${dbname}_back.sql ;done

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書人閱讀 175,506評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 62,614評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,402評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 54,934評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,168評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,596評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評(píng)論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,027評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,404評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,662評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,398評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,743評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容

  • 1、復(fù)制概述: MySQL內(nèi)建的復(fù)制功能是構(gòu)建大型,高性能應(yīng)用程序的基礎(chǔ)。將mysql的數(shù)據(jù)分布到多個(gè)系統(tǒng)上去,這...
    魔法師_閱讀 5,625評(píng)論 0 5
  • 環(huán)境 操作系統(tǒng):CentOS-6.5-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6....
    宇信智臻sy閱讀 2,651評(píng)論 0 6
  • 三俠來(lái)的時(shí)候,大俠,二俠,還有我正在玩CF,三俠進(jìn)門的第一句話就是“兄弟們,我來(lái)了。”三俠的這句話一下拉近了我們彼...
    王書著閱讀 1,669評(píng)論 0 0
  • 他指尖輕撫過(guò)琴鍵,她蜷坐在地毯,緊緊依靠著他的琴凳。他們的視線在彼此的四十五度處交匯。她低下頭一頁(yè)頁(yè)翻閱著手中的...
    煙雨逢時(shí)閱讀 290評(píng)論 0 1
  • 看看算是Lucy Cousins的小粉,從《Hooray for fish》到《maisy》,幾乎本本都非常...
    看看媽媽閱讀 2,191評(píng)論 2 3