腳本遠程備份mysql數據庫,sqlserver數據庫備份腳本

本文目錄一覽:

如何遠程備份MySQL binlog

用腳本對遠程服務器進行備份的方式,有個缺點:無法對MySQL服務器當前正在寫的二進制日誌文件進行備份。所以,只能等到MySQL服務器全部寫完才能進行備份。而寫完一個binlog的時間並不固定,這就導致備份周期的不確定。

從MySQL5.6開始,mysqlbinlog支持將遠程服務器上的binlog實時複製到本地服務器上。

mysqlbinlog的實時二進制複製功能並非簡單的將遠程服務器的日誌複製過來,它是通過MySQL 5.6公布的Replication API實時獲取二進制事件。本質上,就相當於MySQL的從服務器。與普通服務器類似,主服務器發生事件後,一般都會在0.5~1秒內進行備份。

備份命令

mysqlbinlog –read-from-remote-server –raw –host=192.168.244.145 –port=3306 –user=repl –password=repl –stop-never mysql-bin.000001

解釋如下:

–read-from-remote-server:用於備份遠程服務器的binlog。如果不指定該選項,則會查找本地的binlog。

–raw:binlog日誌會以二進制格式存儲在磁盤中,如果不指定該選項,則會以文本形式保存。

–user:複製的MySQL用戶,只需要授予REPLICATION SLAVE權限。

–stop-never:mysqlbinlog可以只從遠程服務器獲取指定的幾個binlog,也可將不斷生成的binlog保存到本地。指定此選項,代表只要遠程服務器不關閉或者連接未斷開,mysqlbinlog就會不斷的複製遠程服務器上的binlog。

mysql-bin.000001:代表從哪個binlog開始複製。

除了以上選項外,還有以下幾個選項需要注意:

–stop-never-slave-server-id:在備份遠程服務器的binlog時,mysqlbinlog本質上就相當於一個從服務器,該選項就是用來指定從服務器的server-id的。默認為-1。

–to-last-log:代表mysqlbinlog不僅能夠獲取指定的binlog,還能獲取其後生成的binlog,獲取完了,才終止。如果指定了–stop-never選項則會隱式打開–to-last-log選項。

–result-file:用於設置遠程服務器的binlog,保存到本地的前綴。譬如對於mysql-bin.000001,如果指定–result-file=/test/backup-,則保存到本地後的文件名為/test/backup-mysql-bin.000001。注意:如果將–result-file設置為目錄,則一定要帶上目錄分隔符“/”。譬如–result-file=/test/,而不是–result-file=/test,不然保存到本地的文件名為/testmysql-bin.000001。

不足:

這個方式有個問題,對於常規的主從複製來說,如果主從直接的連接斷開了,則從會自動再次連接,而對於mysqlbinlog,如果斷開了,並不會自動連接。

解決方案:

可通過腳本來彌補上述不足

#!/bin/sh

BACKUP_BIN=/usr/bin/mysqlbinlog

LOCAL_BACKUP_DIR=/backup/binlog/

BACKUP_LOG=/backup/binlog/backuplog

REMOTE_HOST=192.168.244.145

REMOTE_PORT=3306

REMOTE_USER=repl

REMOTE_PASS=repl

FIRST_BINLOG=mysql-bin.000001

#time to wait before reconnecting after failure

SLEEP_SECONDS=10

##create local_backup_dir if necessary

mkdir -p ${LOCAL_BACKUP_DIR}

cd ${LOCAL_BACKUP_DIR}

## 運行while循環,連接斷開後等待指定時間,重新連接

while :

do

 if [ `ls -A “${LOCAL_BACKUP_DIR}” |wc -l` -eq 0 ];then

 LAST_FILE=${FIRST_BINLOG}

 else

 LAST_FILE=`ls -l ${LOCAL_BACKUP_DIR} | grep -v backuplog |tail -n 1 |awk ‘{print $9}’`

 fi

 ${BACKUP_BIN} –raw –read-from-remote-server –stop-never –host=${REMOTE_HOST} –port=${REMOTE_PORT} –user=${REMOTE_USER} –password=${REMOTE_PASS} ${LAST_FILE}

 echo “`date +”%Y/%m/%d %H:%M:%S”` mysqlbinlog停止,返回代碼:$?” | tee -a ${BACKUP_LOG}

 echo “${SLEEP_SECONDS}秒後再次連接並繼續備份” | tee -a ${BACKUP_LOG} 

 sleep ${SLEEP_SECONDS}

done

腳本解讀:

1. 實際上定義了一個死循環,如果備份失敗,則10s後重新連接。

2. 第一次運行時需指定FIRST_BINLOG的值,指從哪個binlog開始複製,一般為mysql-bin.000001。後續執行的時候就直接獲取備份目錄下最新的binlog,從最新的binlog開始複製。

總結:

1. 如果指定了–raw,mysqlbinlog獲取事件後,並不會實時落盤,而是先保存在本地服務器的內存中,每4K刷盤一次。這也就減少了頻繁的日誌寫操作。如果此時mysqlbinlog和主服務器之間的連接斷開了,則內存中的binlog會馬上刷新到磁盤中。

2. 儘管mysqlbinlog類似於從服務器,但從服務器上的relaylog卻是實時存盤的,即從服務器獲取主服務器產生的事件後,會實時寫入到relaylog中。

3. 如果不指定–raw,這個時候會以文本格式存盤,此時,–result-file=/test/不能指定為目錄,必須明確寫上文件名,譬如–result-file=/test/1.sql,此時,mysqlbinlog獲取事件後,是實時落盤的,不會每4K刷盤一次。

求一份自動備份mysql數據庫的腳本。

@rem —————————創建備份目錄—————————————–

@echo off   

set backup_dir=D:/數據備份

set backup_dir_run=D:/數據備份/run

set backup_dir_land=D:/數據備份/land

set log_file=%backup_dir%/backup_record.log 

if not exist “%backup_dir_run%” md “%backup_dir_run%”

if not exist “%backup_dir_land%” md “%backup_dir_land%”

@rem —————————創建備份目錄結束————————————- 

@rem —————————取得當前時間—————————————– 

set year=%date:~0,4% 

::當前年 

set month=%date:~5,2%

::當前月 

set day=%date:~8,2% 

::當前日 

set hour=%time:~0,2% 

::當前小時 

set minute=%time:~3,2% 

::當前分鐘 

set mydate=%year%%month%%day%

set mytime=%hour%%minute%

@rem —————————取得當前時間結束————————————-

@rem —————————設置標籤————————————-

set tag_long=echo ————————————————–  %log_file%

set tag_short=echo … %log_file%

@rem —————————設置結束————————————-

@rem —————————備份數據庫——————————————-

%tag_long%

echo ————-正在執行MySQL數據庫備份 [%date%%time%] ————–  %log_file%

%tag_long%

%tag_short% 

%tag_short%

set cmd_mysql=D:/WEBROOT/mysql50/bin/mysqldump -R -uroot -p111 

echo 導出d_land_run… %backup_dir%/backup_record.log

set sqlfile_d_land_run=”%backup_dir_land_run%/d_run%mydate%%mytime%.sql”

if exist %sqlfile_d_land_run% del %sqlfile_d_land_run% 

%cmd_mysql% d_land_run %sqlfile_d_land_run% 

echo 導出d_land_run結束… %log_file%

%tag_short% 

%tag_short%

 

echo 導出d_run… %backup_dir%/backup_record.log

set sqlfile_d_run=”%backup_dir_run%/d_run%mydate%%mytime%.sql”

if exist %sqlfile_d_run% del %sqlfile_d_run% 

%cmd_mysql% d_run %sqlfile_d_run% 

echo 導出d_run結束… %log_file%

%tag_short% 

%tag_short%

 

echo 導出d_run_shop … %log_file%

set sqlfile_d_run_shop=”%backup_dir_run%/d_run_shop%mydate%%mytime%.sql”

if exist %sqlfile_d_run_shop% del %sqlfile_d_run_shop% 

%cmd_mysql% d_run_shop %sqlfile_d_run_shop% 

echo 導出d_run_shop結束… %log_file%

 

%tag_short% 

%tag_short%

 

echo 導出bugs… %log_file%

set sqlfile_bugs=”%backup_dir_land%/bugs%mydate%%mytime%.sql”

if exist %sqlfile_bugs% del %sqlfile_bugs% 

%cmd_mysql% bugs %sqlfile_bugs% 

echo 導出bugs結束… %log_file%

 

%tag_short% 

%tag_short%

 

echo 導出discuz… %log_file%

set sqlfile_discuz=”%backup_dir_land%/discuz%mydate%%mytime%.sql”

if exist %sqlfile_discuz% del %sqlfile_discuz% 

%cmd_mysql% discuz %sqlfile_discuz% 

echo 導出discuz結束… %log_file%

%tag_short% 

%tag_short%

echo 導出land… %log_file%

set sqlfile_land=”%backup_dir_land%/land%mydate%%mytime%.sql”

if exist %sqlfile_land% del %sqlfile_land% 

%cmd_mysql% land %sqlfile_land% 

echo 導出land結束… %log_file%

%tag_short% 

%tag_short%

echo 導出landwiki… %log_file%

set sqlfile_landwiki=”%backup_dir_land%/landwiki%mydate%%mytime%.sql”

if exist %sqlfile_landwiki% del %sqlfile_landwiki% 

%cmd_mysql% landwiki %sqlfile_landwiki% 

echo 導出landwiki結束… %log_file%

%tag_short% 

%tag_short%

echo 導出mysql… %log_file%

set sqlfile_mysql=”%backup_dir_land%/mysql%mydate%%mytime%.sql”

if exist %sqlfile_mysql% del %sqlfile_mysql% 

%cmd_mysql% mysql %sqlfile_mysql% 

echo 導出mysql結束… %log_file%

%tag_short% 

%tag_short%

echo 導出wikidb… %log_file%

set sqlfile_wikidb=”%backup_dir_land%/wikidb%mydate%%mytime%.sql”

if exist %sqlfile_wikidb% del %sqlfile_wikidb% 

%cmd_mysql% wikidb %sqlfile_wikidb% 

echo 導出wikidb結束… %log_file%

%tag_short% 

%tag_short%

echo ————-備份完成! [%date%%time%] ————–  %log_file%

@rem —————————備份數據庫結束—————————————

如何備份MYSQL數據庫?

定期的備份可使我們數據庫崩潰造成的損失大大降低。在MySQL中進行數據備份的方法有兩種,一種是使用mysqldump程序,一種是使用mysqlhotcopy、cp、tar或cpio等打包程序直接拷貝數據庫文件。mysqldump程序備份數據庫較慢,但它生成的文本文件便於移植。使用mysqlhotcopy等程序備份速度快,因為它直接對系統文件進行操作,需人為協調數據庫數據的備份前後一致性。

使用mysqldump備份數據庫其實就是把數據庫轉儲成一系列CREATE TABLE和INSERT語句,通過這些語句我們就可重新生成數據庫。使用mysqldump的方法如下:

% mysqldump –opt testdb | gzip /data/backup/testdb.bak

#–opt選項會對轉儲過程進行優化,生成的備份文件會小一點,後的管道操作會進行數據壓縮

% mysqldump –opt testdb mytable1,mytable2 | gzip /data/backup/testdb_mytable.bak

#可在數據庫後接數據表名,只導出指定的數據表,多個數據表可用逗號分隔

–opt選項還可激活–add-drop-table選項,它將會在備份文件的每條CREATE TABLE前加上一條DROP TABLE IF EXISTS語句。這可方便進行數據表的更新,而不會發生“數據表已存在”的錯誤。

用mysqldump命令還可直接把數據庫轉移到另外一台服務器上,不用生成備份文件。重複執行可定期更新遠程數據庫。

% mysqladmin -h remote_host create testdb

% mysqldump –opt testdb | mysql -h remote_host testdb

另外還可通過ssh遠程調用服務器上的程序,如:

% ssh remote_host mysqladmin create testdb

% mysqldump –opt testdb | ssh remote_host mysql testdb

通過直接拷貝系統文件的方式備份數據庫,在備份時,要確保沒有人對數據庫進行修改操作。要做到這點,最好關閉服務器。如果不能關閉的,要以只讀方試鎖定有關數據表。下面是一些示例:

% cp -r db /backup/db #備份db數據庫到/backup/db目錄

% cp table_name.* /backup/db #只備份table_name數據表

% scp -r db remotehot:/usr/local/mysql/data #用scp把數據庫直接拷貝到遠程服務器

在把數據庫直接拷貝到遠程主機時,應注意兩台機器必須有同樣的硬件結構,或者將拷貝的數據表全部是可移植數據表類型。

使用mysqlhotcopy工具,它是一個Perl DBI腳本,可在不關閉服務器的情況下備份數據庫,它主要的優點是:

它直接拷貝文件,所以它比mysqldump快。

可自動完成數據鎖定工作,備份時不用關閉服務器。

能刷新日誌,使備份文件和日誌文件的檢查點能保持同步。

下面是該工具的使用示例:

% mysqlhotcopy db /bakcup/ #把db數據庫備份到backup/db目錄里,會自動創建一個db目錄

使用BACKUP TABLE語句進行備份,該語句最早出現在MySQL 3.23.25版本中,僅適用於MyISAM數據表。用法如下:

mysql BACKUP TABLE mytable TO ‘/backup/db’; #把mytable數據表備份到/backup/db目錄下

為了執行該語句,你必須擁有那些表的FILE權限和SELECT權限,備份目錄還必須是服務器可寫的。該語句執行時,會先把內存中的數據寫入磁盤,再把各個數據表的.frm(表結構定義文件)、.MYD(數據)文件從數據目錄拷貝到備份目錄。它不拷貝.MYI(索引)文件,因為它能用另外兩個文件重建。BACKUP TABLE語句備份時,依次鎖定數據表,當同時備份多個數據表時,數據表可能會被修改,所以備份0完成時,備份文件中的數據和現時數據表中的數據可能會有差異,為了消除該差異,我們可用只讀方式鎖定數據表,在備份完成後再解鎖。如:

mysql LOCK TABLES tb1 READ,tb2 READ;

mysql BACKUP TABLE tb1,tb2 TO ‘backup/db’;

mysql UNLOCK TABLE

備份mysql數據

其實你的這個問題是mysql中的一個核心問題,既mysql數據的備份和恢復

你可以使用三種方式

1.使用sql語句導入導出

2.使用mysqldump 和mysqlimport 工具

3.直接copy 數據文件 既冷備份

你說說的詳細,就給積分,那我就說詳細些

一.使用sql語句完成mysql的備份和恢復

你可以使用SELECT INTO OUTFILE語句備份數據,並用LOAD DATA INFILE語句恢複數據。這種方法只能導出數據的內容,不包括表的結構,如果表的結構文件損壞,你必須要先恢復原來的表的結構。

語法:

SELECT * INTO {OUTFILE | DUMPFILE} ‘file_name’ FROM tbl_name

LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE ‘file_name.txt’ [REPLACE | IGNORE]

INTO TABLE tbl_name

SELECT … INTO OUTFILE ‘file_name’格式的SELECT語句將選擇的行寫入一個文件。文件在服務器主機上被創建,並且不能是已經存在的(不管別的,這可阻止數據庫表和文件例如“/etc/passwd”被破壞)。SELECT … INTO OUTFILE是LOAD DATA INFILE逆操作。

LOAD DATA INFILE語句從一個文本文件中以很高的速度讀入一個表中。如果指定LOCAL關鍵詞,從客戶主機讀文件。如果LOCAL沒指定,文件必須位於服務器上。(LOCAL在MySQL3.22.6或以後版本中可用。)

為了安全原因,當讀取位於服務器上的文本文件時,文件必須處於數據庫目錄或可被所有人讀取。另外,為了對服務器上文件使用LOAD DATA INFILE,在服務器主機上你必須有file的權限。使用這種SELECT INTO OUTFILE語句,在服務器主機上你必須有FILE權限。

為了避免重複記錄,在表中你需要一個PRIMARY KEY或UNIQUE索引。當在唯一索引值上一個新記錄與一個老記錄重複時,REPLACE關鍵詞使得老記錄用一個新記錄替代。如果你指定IGNORE,跳過有唯一索引的現有行的重複行的輸入。如果你不指定任何一個選項,當找到重複索引值時,出現一個錯誤,並且文本文件的餘下部分被忽略時。

如果你指定關鍵詞LOW_PRIORITY,LOAD DATA語句的執行被推遲到沒有其他客戶讀取表後。

使用LOCAL將比讓服務器直接存取文件慢些,因為文件的內容必須從客戶主機傳送到服務器主機。在另一方面,你不需要file權限裝載本地文件。如果你使用LOCAL關鍵詞從一個本地文件裝載數據,服務器沒有辦法在操作的當中停止文件的傳輸,因此缺省的行為好像IGNORE被指定一樣。

當在服務器主機上尋找文件時,服務器使用下列規則:

 如果給出一個絕對路徑名,服務器使用該路徑名。

 如果給出一個有一個或多個前置部件的相對路徑名,服務器相對服務器的數據目錄搜索文件。

 如果給出一個沒有前置部件的一個文件名,服務器在當前數據庫的數據庫目錄尋找文件。

假定表tbl_name具有一個PRIMARY KEY或UNIQUE索引,備份一個數據表的過程如下:

1、鎖定數據表,避免在備份過程中,表被更新

mysqlLOCK TABLES READ tbl_name;

關於表的鎖定的詳細信息,將在下一章介紹。

2、導出數據

mysqlSELECT * INTO OUTFILE ‘tbl_name.bak’ FROM tbl_name;

3、解鎖表

mysqlUNLOCK TABLES;

相應的恢復備份的數據的過程如下:

1、為表增加一個寫鎖定:

mysqlLOCK TABLES tbl_name WRITE;

2、恢複數據

mysqlLOAD DATA INFILE ‘tbl_name.bak’

-REPLACE INTO TABLE tbl_name;

如果,你指定一個LOW_PRIORITY關鍵字,就不必如上要對錶鎖定,因為數據的導入將被推遲到沒有客戶讀表為止:

mysqlLOAD DATA LOW_PRIORITY INFILE ‘tbl_name’

-REPLACE INTO TABLE tbl_name;

3、解鎖表

mysql-UNLOCAK TABLES;

5.3.2使用mysqlimport恢複數據

如果你僅僅恢複數據,那麼完全沒有必要在客戶機中執行SQL語句,因為你可以簡單的使用mysqlimport程序,它完全是與LOAD DATA 語句對應的,由發送一個LOAD DATA INFILE命令到服務器來運作。執行命令mysqlimport –help,仔細查看輸出,你可以從這裡得到幫助。

shell mysqlimport [options] db_name filename …

對於在命令行上命名的每個文本文件,mysqlimport剝去文件名的擴展名並且使用它決定哪個表導入文件的內容。例如,名為“patient.txt”、“patient.text”和“patient”將全部被導入名為patient的一個表中。

常用的選項為:

-C, –compress 如果客戶和服務器均支持壓縮,壓縮兩者之間的所有信息。

-d, –delete 在導入文本文件前倒空表格。

l, –lock-tables 在處理任何文本文件前為寫入所定所有的表。這保證所有的表在服務器上被同步。

–low-priority,–local,–replace,–ignore分別對應LOAD DATA語句的LOW_PRIORITY,LOCAL,REPLACE,IGNORE關鍵字。

例如恢複數據庫db1中表tbl1的數據,保存數據的文件為tbl1.bak,假定你在服務器主機上:

shellmysqlimport –lock-tables –replace db1 tbl1.bak

這樣在恢複數據之前現對錶鎖定,也可以利用–low-priority選項:

shellmysqlimport –low-priority –replace db1 tbl1.bak

如果你為遠程的服務器恢複數據,還可以這樣:

shellmysqlimport -C –lock-tables –replace db1 tbl1.bak

當然,解壓縮要消耗CPU時間。

象其它客戶機一樣,你可能需要提供-u,-p選項以通過身分驗證,也可以在選項文件my.cnf中存儲這些參數,具體方法和其它客戶機一樣,這裡就不詳述了。

二、使用mysqldump備份數據

同mysqlimport一樣,也存在一個工具mysqldump備份數據,但是它比SQL語句多做的工作是可以在導出的文件中包括SQL語句,因此可以備份數據庫表的結構,而且可以備份一個數據庫,甚至整個數據庫系統。

mysqldump [OPTIONS] database [tables]

mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]

mysqldump [OPTIONS] –all-databases [OPTIONS]

如果你不給定任何錶,整個數據庫將被傾倒。

通過執行mysqldump –help,你能得到你mysqldump的版本支持的選項表。

1、備份數據庫的方法

例如,假定你在服務器主機上備份數據庫db_name

shell mydqldump db_name

當然,由於mysqldump缺省時把輸出定位到標準輸出,你需要重定向標準輸出。例如,把數據庫備份到bd_name.bak中:

shell mydqldump db_namedb_name.bak

你可以備份多個數據庫,注意這種方法將不能指定數據表:

shell mydqldump –databases db1 db1db.bak

你也可以備份整個數據庫系統的拷貝,不過對於一個龐大的系統,這樣做沒有什麼實際的價值:

shell mydqldump –all-databasesdb.bak

雖然用mysqldump導出表的結構很有用,但是恢復大量數據時,眾多SQL語句使恢復的效率降低。你可以通過使用–tab選項,分開數據和創建表的SQL語句。

-T,–tab= 在選項指定的目錄里,創建用製表符(tab)分隔列值的數據文件和包含創建表結構的SQL語句的文件,分別用擴展名.txt和.sql表示。該選項不能與–databases或–all-databases同時使用,並且mysqldump必須運行在服務器主機上。

例如,假設數據庫db包括表tbl1,tbl2,你準備備份它們到/var/mysqldb

shellmysqldump –tab=/var/mysqldb/ db

其效果是在目錄/var/mysqldb中生成4個文件,分別是tbl1.txt、tbl1.sql、tbl2.txt和tbl2.sql。

2、mysqldump實用程序時的身份驗證的問題

同其他客戶機一樣,你也必須提供一個MySQL數據庫帳號用來導出數據庫,如果你不是使用匿名用戶的話,可能需要手工提供參數或者使用選項文件:

如果這樣:

shellmysql -u root –pmypass db_namedb_name.sql

或者這樣在選項文件中提供參數:

[mysqldump]

user=root

password=mypass

然後執行

shellmysqldump db_namedb_name.sql

那麼一切順利,不會有任何問題,但要注意命令歷史會泄漏密碼,或者不能讓任何除你之外的用戶能夠訪問選項文件,由於數據庫服務器也需要這個選項文件時,選項文件只能被啟動服務器的用戶(如,mysql)擁有和訪問,以免泄密。在Unix下你還有一個解決辦法,可以在自己的用戶目錄中提供個人選項文件(~/.my.cnf),例如,/home/some_user/.my.cnf,然後把上面的內容加入文件中,注意防止泄密。在NT系統中,你可以簡單的讓c:\my.cnf能被指定的用戶訪問。

你可能要問,為什麼這麼麻煩呢,例如,這樣使用命令行:

shellmysql -u root –p db_namedb_name.sql

或者在選項文件中加入

[mysqldump]

user=root

password

然後執行命令行:

shellmysql db_namedb_name.sql

你發現了什麼?往常熟悉的Enter password:提示並沒有出現,因為標準輸出被重定向到文件db_name.sql中了,所以看不到往常的提示符,程序在等待你輸入密碼。在重定向的情況下,再使用交互模式,就會有問題。在上面的情況下,你還可以直接輸入密碼。然後在文件db_name.sql文件的第一行看到:

Enter password:#……..

你可能說問題不大,但是mysqldump之所以把結果輸出到標準輸出,是為了重定向到其它程序的標準輸入,這樣有利於編寫腳本。例如:

用來自於一個數據庫的信息充實另外一個MySQL數據庫也是有用的:

shellmysqldump –opt database | mysql –host=remote-host -C database

如果mysqldump仍運行在提示輸入密碼的交互模式下,該命令不會成功,但是如果mysql是否運行在提示輸入密碼的交互模式下,都是可以的。

如果在選項文件中的[client]或者[mysqldump]任何一段中指定了password選項,且不提供密碼,即使,在另一段中有提供密碼的選項password=mypass,例如

[client]

user=root

password

[mysqldump]

user=admin

password=mypass

那麼mysqldump一定要你輸入admin用戶的密碼:

mysqlmysqldump db_name

即使是這樣使用命令行:

mysqlmysqldump –u root –ppass1 db

也是這樣,不過要如果-u指定的用戶的密碼。

其它使用選項文件的客戶程序也是這樣

3、有關生成SQL語句的優化控制

–add-locks 生成的SQL 語句中,在每個表數據恢復之前增加LOCK TABLES並且之後UNLOCK TABLE。(為了使得更快地插入到MySQL)。

–add-drop-table 生成的SQL 語句中,在每個create語句之前增加一個drop table。

-e, –extended-insert 使用全新多行INSERT語法。(給出更緊縮並且更快的插入語句)

下面兩個選項能夠加快備份表的速度:

-l, –lock-tables. 為開始導出數據前,讀鎖定所有涉及的表。

-q, –quick 不緩衝查詢,直接傾倒至stdout。

理論上,備份時你應該指定上訴所有選項。這樣會使命令行過於複雜,作為代替,你可以簡單的指定一個–opt選項,它會使上述所有選項有效。

例如,你將導出一個很大的數據庫:

shell mysqldump –opt db_name db_name.txt

當然,使用–tab選項時,由於不生成恢複數據的SQL語句,使用–opt時,只會加快數據導出。

4、恢復mysqldump備份的數據

由於備份文件是SQL語句的集合,所以需要在批處理模式下使用客戶機

 如果你使用mysqldump備份單個數據庫或表,即:

shellmysqldump –opt db_name db_name.sql

由於db_name.sql中不包括創建數據庫或者選取數據庫的語句,你需要指定數據庫

shellmysql db2 db_name.sql

 如果,你使用–databases或者–all-databases選項,由於導出文件中已經包含創建和選用數據庫的語句,可以直接使用,不比指定數據庫,例如:

shellmysqldump –databases db_name db_name.sql

shellmysql db_name.sql

 如果你使用–tab選項備份數據,數據恢復可能效率會高些

例如,備份數據庫db_name後在恢復:

shellmysqldump –tab=/path/to/dir –opt test

如果要恢復表的結構,可以這樣:

shellmysql /path/to/dir/tbl1.sql

如果要恢複數據,可以這樣

shellmysqlimport -l db /path/to/dir/tbl1.txt

如果是在Unix平台下使用(推薦),就更方便了:

shellls -l *.sql | mysql db

shellmysqlimport –lock-tables db /path/to/dir/*.txt

三 .用直接拷貝的方法備份恢復

根據本章前兩節的介紹,由於MySQL的數據庫和表是直接通過目錄和表文件實現的,因此直接複製文件來備份數據庫數據,對MySQL來說特別方便。而且自MySQL 3.23起MyISAM表成為缺省的表的類型,這種表可以為在不同的硬件體系中共享數據提供了保證。

使用直接拷貝的方法備份時,尤其要注意表沒有被使用,你應該首先對錶進行讀鎖定。

備份一個表,需要三個文件:

對於MyISAM表:

tbl_name.frm 表的描述文件

tbl_name.MYD 表的數據文件

tbl_name.MYI 表的索引文件

對於ISAM表:

tbl_name.frm 表的描述文件

tbl_name.ISD 表的數據文件

tbl_name.ISM 表的索引文件

你直接拷貝文件從一個數據庫服務器到另一個服務器,對於MyISAM表,你可以從運行在不同硬件系統的服務器之間複製文件

像你這個問題,可以把遠程機器的mysql數據目錄ftp下載到你本地的mysql目錄下,重啟mysql就可以了

原創文章,作者:GWGA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/139194.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GWGA的頭像GWGA
上一篇 2024-10-04 00:22
下一篇 2024-10-04 00:22

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python腳本控制其他軟件

    Python作為一種簡單易學、功能強大的腳本語言,具有廣泛的應用領域,在自動化測試、Web開發、數據挖掘等領域都得到了廣泛的應用。其中,Python腳本控制其他軟件也是Python…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字符命令行的語言…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python自動化運維腳本

    Python自動化運維腳本是使用Python編寫的代碼,可以幫助管理員自動化執行繁瑣、重複的操作任務。通過Python自動化運維腳本,管理員可以在更短的時間內完成工作,提高工作效率…

    編程 2025-04-28

發表回復

登錄後才能評論