① 編寫一個shell腳本每天16:30備份mysql數據並壓縮打包(打包文件按照當天日期命名)放到/root/data下
#!/bin/bash
date=$(date-d'+0days''+%Y-%m-%d')#聲明一個變數,並賦值當天日期
cd/root/data#進入目錄
mkdir$date#創建目錄
mysqlmp-uusername-ppassworddb_name>$date"db_name.sql"#資料庫備份,修改用戶名密碼,還有要備份資料庫
tar-zcf$date".tar.gz"$date#壓縮打包
rm-rf$date#刪除源數據
保存為bak.sh,每天16:30備份定時任務,沒有crontab命令:yum install vixie-cron
chmod +x /.../bak.sh
crontab -e
30 16 * * * /.../bak.sh
② mysqlmp導出的數據被壓縮嗎
這種情況可能就是資料庫沒有完全備份下來,數據不完整;如果小一點,差別不大也是正常范圍;最好是在本地恢復下看看數據完整度;另外資料庫在備份過程中有壓縮的話,也會小很多,像國內的多備份工具,也是利用mysqlmp,同時有加密壓縮功能,還節省存儲空間。
③ mysqlmp有幾種自動執行的方法
把ip改成localhost就可以的 如果裝了navicate那就更簡單了 先連接上資料庫,選中資料庫 再選擇轉儲sql 就好了方法二 進入cmd (注意在os cmd中 而不是在mysql中) =================== 一.導出資料庫(sql腳本) mysqlmp -u 用戶名 -p 資料庫名 > 導出的文件名 mysqlmp -u root -p db_name > test_db.sql 二.mysql導出資料庫一個表 mysqlmp -u 用戶名 -p 資料庫名 表名> 導出的文件名 mysqlmp -u wcnc -p test_db users> test_users.sql (結尾沒有分號)方法三啟動mysql服務 /etc/init.d/mysql start導出整個資料庫 mysqlmp dbname > c:mydb.sql -u root -p 導入資料庫 source mydb.sqlmysql -u用戶名 -p 資料庫名 資料庫名.sql更詳細的導入資料庫教程 二.一. 導出sql腳本 在原資料庫伺服器上,可以用php教程myadmin工具,或者mysqlmp(mysqlmp命令位於mysql/bin/目錄中)命令行,導出sql腳本。 二.一.一 用phpmyadmin工具 導出選項中,選擇導出"結構"和"數據",不要添加"drop database"和"drop table"選項。 選中"另存為文件"選項,如果數據比較多,可以選中"gzipped"選項。 將導出的sql文件保存下來。二.一.二 用mysqlmp命令行命令格式mysqlmp -u用戶名 -p 資料庫名 > 資料庫名.sql範例:mysqlmp -uroot -p abc > abc.sql (導出資料庫abc到abc.sql文件)提示輸入密碼時,輸入該資料庫用戶名的密碼。二.二. 創建空的資料庫 通過主控界面/控制面板,創建一個資料庫。假設資料庫名為abc,資料庫全權用戶為abc_f。二.三. 將sql腳本導入執行 同樣是兩種方法,一種用phpmyadmin(mysql資料庫管理)工具,或者mysql命令行。 二.三.一 用phpmyadmin工具 從控制面板,選擇創建的空資料庫,點"管理",進入管理工具頁面。 在"sql"菜單中,瀏覽選擇剛才導出的sql文件,點擊"執行"以上載並執行。注意:phpmyadmin對上載的文件大小有限制,php本身對上載文件大小也有限制,如果原始sql文件 比較大,可以先用gzip對它進行壓縮,對於sql文件這樣的文本文件,可獲得一:5或更高的壓縮率。 gzip使用方法: # gzip xxxxx.sql得到xxxxx.sql.gz文件。二.三.二 用mysql命令行命令格式mysql -u用戶名 -p 資料庫名 < 資料庫名.sql範例:mysql -uabc_f -p abc < abc.sql (導入資料庫abc從abc.sql文件)提示輸入密碼時,輸入該資料庫用戶名的密碼
④ 如何有效地提高 MySQL 的備份和恢復速度
你好,
一
加速備份
1、
加了single-transaction參數
備份時
需要先flush
table
with
read
lock
這個過程中會有一個鎖表的過程,如果有事務或語句正在執行,沒有結束,那麼備份進程會一直等待,並且阻塞別的事務,那麼也會影響業務。所以要先確認備份的時候沒有大的事務在運行。具體
single-transaction的加鎖可以參考
我的博客:mysqlmp備份時加single-transaction會不會加鎖2
、mysqlmp是單進程的,沒有辦法並行,但現在機器的瓶頸多是出現在IO方面,可以使用更了的IO設備加快速度3
、mysqlmp時如果空間夠的話,不要邊壓縮邊備份二
加速恢復
1
關閉binlog:不寫入Binlog會大大的加快數據導入的速度2
innodb_flush_log_at_trx_commit=0
3
更好的配置
建議:
如果非要使用邏輯備份,可以考慮mysqlmper,
mysqlpump(5.7)這兩個工具去備份,這兩個在備份的時候支持並行操作,mysqlmper還可以對單表進行恢復,在只需要恢復單表的情況下,恢復速度會大大加快使用物理備份
xtrabackup
(open
source),MEB(oracle提供,收費):
他們的備份原理是基於mysql
crash
recover,
備份速度
是和邏輯備份的相差不太大。但是恢復速度卻有很大的提升。
邏輯備份
備出來的是sql語句文件,恢復時需要一條一條的執行sql,所以恢復很慢。
而物理備份和還原的速度
相當於直接文件,所以恢復的時候性能有很大的提升並且這兩個軟體還支持並行,效果更好。
邏輯備份最大的優點是
備份好的文件經壓縮後佔用空間較小,最大缺點恢復太慢物理備份可以很快的恢復,但是備份好的文件壓縮後佔用空間比邏輯備份要大
⑤ mysqlmp初始化讀哪些參數
mysqlmp客戶端可用來轉儲資料庫或搜集資料庫進行備份或將數據轉移到另一個SQL伺服器(不一定是一個MySQL伺服器)。轉儲包含創建表和/或裝載表的SQL語句。
如果你在伺服器上進行備份,並且表均為MyISAM表,應考慮使用mysqlhot,因為可以更快地進行備份和恢復。
有3種方式來調用mysqlmp:
shell> mysqlmp [options] db_name [tables] shell> mysqlmp [options] ---database DB1 [DB2 DB3...] shell> mysqlmp [options] --all--database 如果沒有指定任何錶或使用了---database或--all--database選項,則轉儲整個資料庫。
要想獲得你的版本的mysqlmp支持的選項,執行mysqlmp ---help。
如果運行mysqlmp沒有--quick或--opt選項,mysqlmp在轉儲結果前將整個結果集裝入內存。如果轉儲大資料庫可能會出現問題。該選項默認啟用,但可以用--skip-opt禁用。
如果使用最新版本的mysqlmp程序生成一個轉儲重裝到很舊版本的MySQL伺服器中,不應使用--opt或-e選項。
mysqlmp支持下面的選項:
· ---help,-?
顯示幫助消息並退出。
· --add-drop--database
在每個CREATE DATABASE語句前添加DROP DATABASE語句。
· --add-drop-tables
在每個CREATE TABLE語句前添加DROP TABLE語句。
· --add-locking
用LOCK TABLES和UNLOCK TABLES語句引用每個表轉儲。重載轉儲文件時插入得更快。
· --all--database,-A
轉儲所有資料庫中的所有表。與使用---database選項相同,在命令行中命名所有資料庫。
· --allow-keywords
允許創建關鍵字列名。應在每個列名前面加上表名前綴。
· ---comments[={0|1}]
如果設置為 0,禁止轉儲文件中的其它信息,例如程序版本、伺服器版本和主機。--skip—comments與---comments=0的結果相同。 默認值為1,即包括額外信息。
· --compact
產生少量輸出。該選項禁用注釋並啟用--skip-add-drop-tables、--no-set-names、--skip-disable-keys和--skip-add-locking選項。
· --compatible=name
產生與其它資料庫系統或舊的MySQL伺服器更兼容的輸出。值可以為ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options或者no_field_options。要使用幾個值,用逗號將它們隔開。這些值與設置伺服器SQL模式的相應選項有相同的含義。
該選項不能保證同其它伺服器之間的兼容性。它只啟用那些目前能夠使轉儲輸出更兼容的SQL模式值。例如,--compatible=oracle 不映射Oracle類型或使用Oracle注釋語法的數據類型。
· --complete-insert,-c
使用包括列名的完整的INSERT語句。
· --compress,-C
壓縮在客戶端和伺服器之間發送的所有信息(如果二者均支持壓縮)。
· --create-option
在CREATE TABLE語句中包括所有MySQL表選項。
· ---database,-B
轉儲幾個資料庫。通常情況,mysqlmp將命令行中的第1個名字參量看作資料庫名,後面的名看作表名。使用該選項,它將所有名字參量看作資料庫名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name語句包含在每個新資料庫前的輸出中。
· ---debug[=debug_options],-# [debug_options]
寫調試日誌。debug_options字元串通常為'd:t:o,file_name'。
· --default-character-set=charset
使用charsetas默認字元集。如果沒有指定,mysqlmp使用utf8。
· --delayed-insert
使用INSERT DELAYED語句插入行。
· --delete-master-logs
在主復制伺服器上,完成轉儲操作後刪除二進制日誌。該選項自動啟用--master-data。
· --disable-keys,-K
對於每個表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;語句引用INSERT語句。這樣可以更快地裝載轉儲文件,因為在插入所有行後創建索引。該選項只適合MyISAM表。
· --extended-insert,-e
使用包括幾個VALUES列表的多行INSERT語法。這樣使轉儲文件更小,重載文件時可以加速插入。
· --fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--行-terminated-by=...
這些選項結合-T選項使用,與LOAD DATA INFILE的相應子句有相同的含義。
· --first-slave,-x
不贊成使用,現在重新命名為--lock-all-tables。
· --flush-logs,-F
開始轉儲前刷新MySQL伺服器日誌文件。該選項要求RELOAD許可權。請注意如果結合--all--database(或-A)選項使用該選項,根據每個轉儲的資料庫刷新日誌。例外情況是當使用--lock-all-tables或--master-data的時候:在這種情況下,日誌只刷新一次,在所有 表被鎖定後刷新。如果你想要同時轉儲和刷新日誌,應使用--flush-logs連同--lock-all-tables或--master-data。
· --force,-f
在表轉儲過程中,即使出現SQL錯誤也繼續。
· --host=host_name,-h host_name
從給定主機的MySQL伺服器轉儲數據。默認主機是localhost。
· --hex-blob
使用十六進制符號轉儲二進制字元串列(例如,'abc' 變為0x616263)。影響到的列有BINARY、VARBINARY、BLOB。
· --lock-all-tables,-x
所有資料庫中的所有表加鎖。在整體轉儲過程中通過全局讀鎖定來實現。該選項自動關閉--single-transaction和--lock-tables。
· --lock-tables,-l
開始轉儲前鎖定所有表。用READ LOCAL鎖定表以允許並行插入MyISAM表。對於事務表例如InnoDB和BDB,--single-transaction是一個更好的選項,因為它不根本需要鎖定表。
請注意當轉儲多個資料庫時,--lock-tables分別為每個資料庫鎖定表。因此,該選項不能保證轉儲文件中的表在資料庫之間的邏輯一致性。不同資料庫表的轉儲狀態可以完全不同。
· --master-data[=value]
該選項將二進制日誌的位置和文件名寫入到輸出中。該選項要求有RELOAD許可權,並且必須啟用二進制日誌。如果該選項值等於1,位置和文件名被寫入CHANGE MASTER語句形式的轉儲輸出,如果你使用該SQL轉儲主伺服器以設置從伺服器,從伺服器從主伺服器二進制日誌的正確位置開始。如果選項值等於2,CHANGE MASTER語句被寫成SQL注釋。如果value被省略,這是默認動作。
--master-data選項啟用--lock-all-tables,除非還指定--single-transaction(在這種情況下,只在剛開始轉儲時短時間獲得全局讀鎖定。又見--single-transaction。在任何一種情況下,日誌相關動作發生在轉儲時。該選項自動關閉--lock-tables。
· --no-create-db,-n
該選項禁用CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name語句,如果給出---database或--all--database選項,則包含到輸出中。
· --no-create-info,-t
不寫重新創建每個轉儲表的CREATE TABLE語句。
· --no-data,-d
不寫表的任何行信息。如果你只想轉儲表的結構這很有用。
· --opt
該選項是速記;等同於指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以給出很快的轉儲操作並產生一個可以很快裝入MySQL伺服器的轉儲文件。該選項默認開啟,但可以用--skip-opt禁用。要想只禁用確信用-opt啟用的選項,使用--skip形式;例如,--skip-add-drop-tables或--skip-quick。
· --password[=password],-p[password]
連接伺服器時使用的密碼。如果你使用短選項形式(-p),不能在選項和密碼之間有一個空格。如果在命令行中,忽略了--password或-p選項後面的 密碼值,將提示你輸入一個。
· --port=port_num,-P port_num
用於連接的TCP/IP埠號。
· --protocol={TCP | SOCKET | PIPE | MEMORY}
使用的連接協議。
· --quick,-q
該選項用於轉儲大的表。它強制mysqlmp從伺服器一次一行地檢索表中的行而不是檢索所有行並在輸出前將它緩存到內存中。
· --quote-names,-Q
用『`』字元引用資料庫、表和列名。如果伺服器SQL模式包括ANSI_QUOTES選項,用『"』字元引用名。默認啟用該選項。可以用--skip-quote-names禁用,但該選項應跟在其它選項後面,例如可以啟用--quote-names的--compatible。
· --result-file=file,-r file
將輸出轉向給定的文件。該選項應用在Windows中,因為它禁止將新行『\n』字元轉換為『\r\n』回車、返回/新行序列。
· --routines,-R
在轉儲的資料庫中轉儲存儲程序(函數和程序)。使用---routines產生的輸出包含CREATE PROCEDURE和CREATE FUNCTION語句以重新創建子程序。但是,這些語句不包括屬性,例如子程序定義者或創建和修改時間戳。這說明當重載子程序時,對它們進行創建時定義者應設置為重載用戶,時間戳等於重載時間。
如果你需要創建的子程序使用原來的定義者和時間戳屬性,不使用--routines。相反,使用一個具有mysql資料庫相應許可權的MySQL賬戶直接轉儲和重載mysql.proc表的內容。
該選項在MySQL 5.1.2中添加進來。在此之前,存儲程序不轉儲。
· --set-charset
將SET NAMES default_character_set加到輸出中。該選項默認啟用。要想禁用SET NAMES語句,使用--skip-set-charset。
· --single-transaction
該選項從伺服器轉儲數據之前發出一個BEGIN SQL語句。它只適用於事務表,例如InnoDB和BDB,因為然後它將在發出BEGIN而沒有阻塞任何應用程序時轉儲一致的資料庫狀態。
當使用該選項時,應記住只有InnoDB表能以一致的狀態被轉儲。例如,使用該選項時任何轉儲的MyISAM或HEAP表仍然可以更改狀態。
--single-transaction選項和--lock-tables選項是互斥的,因為LOCK TABLES會使任何掛起的事務隱含提交。
要想轉儲大的表,應結合--quick使用該選項。
· --socket=path,-S path
當連接localhost(為默認主機)時使用的套接字文件。
· --skip--comments
參見---comments選項的描述。
· --tab=path,-T path
產生tab分割的數據文件。對於每個轉儲的表,mysqlmp創建一個包含創建表的CREATE TABLE語句的tbl_name.sql文件,和一個包含其數據的tbl_name.txt文件。選項值為寫入文件的目錄。
默認情況,.txt數據文件的格式是在列值和每行後面的新行之間使用tab字元。可以使用--fields-xxx和--行--xxx選項明顯指定格式。
注釋:該選項只適用於mysqlmp與mysqld伺服器在同一台機器上運行時。你必須具有FILE許可權,並且伺服器必須有在你指定的目錄中有寫文件的許可。
· --tables
覆蓋---database或-B選項。選項後面的所有參量被看作表名。
· --triggers
為每個轉儲的表轉儲觸發器。該選項默認啟用;用--skip-triggers禁用它。
· --tz-utc
在轉儲文件中加入SET TIME_ZONE='+00:00'以便TIMESTAMP列可以在具有不同時區的伺服器之間轉儲和重載。(不使用該選項,TIMESTAMP列在具有本地時區的源伺服器和目的伺服器之間轉儲和重載)。--tz-utc也可以保護由於夏令時帶來的更改。--tz-utc默認啟用。要想禁用它,使用--skip-tz-utc。該選項在MySQL 5.1.2中加入。
· --user=user_name,-u user_name
連接伺服器時使用的MySQL用戶名。
· --verbose,-v
冗長模式。列印出程序操作的詳細信息。
· --version,-V
顯示版本信息並退出。
· --where='where-condition', -w 'where-condition'
只轉儲給定的WHERE條件選擇的記錄。請注意如果條件包含命令解釋符專用空格或字元,一定要將條件引用起來。
例如:
"--where=user='jimf'" "-wuserid>1" "-wuserid<1" · --xml,-X
將轉儲輸出寫成XML。
還可以使用--var_name=value選項設置下面的變數:
· max_allowed_packet
客戶端/伺服器之間通信的緩存區的最大大小。最大為1GB。
· net_buffer_length
客戶端/伺服器之間通信的緩存區的初始大小。當創建多行插入語句時(如同使用選項--extended-insert或--opt),mysqlmp創建長度達net_buffer_length的行。如果增加該變數,還應確保在MySQL伺服器中的net_buffer_length變數至少這么大。
還可以使用--set-variable=var_name=value或-O var_name=value語法設置變數。然而,現在不贊成使用該語法。
mysqlmp最常用於備份一個整個的資料庫:
shell> mysqlmp --opt db_name > backup-file.sql 你可以這樣將轉儲文件讀回到伺服器:
shell> mysql db_name < backup-file.sql 或者為:
shell> mysql -e "source /path-to--backup/backup-file.sql" db_name mysqlmp也可用於從一個MySQL伺服器向另一個伺服器復制數據時裝載資料庫:
shell> mysqlmp --opt db_name | mysql --host=remote_host -C db_name 可以用一個命令轉儲幾個資料庫:
shell> mysqlmp ---database db_name1 [db_name2 ...] > my_databases.sql 如果你想要轉儲所有資料庫,使用--all--database選項:
shell> mysqlmp --all-databases > all_databases.sql 如果表保存在InnoDB存儲引擎中,mysqlmp提供了一種聯機備份的途徑(參見下面的命令)。該備份只需要在開始轉儲時對所有表進行全局讀鎖定(使用FLUSH TABLES WITH READ LOCK)。獲得鎖定後,讀取二進制日誌的相應內容並將鎖釋放。因此如果並且只有當發出FLUSH...時正執行一個長的更新語句,MySQL伺服器才停止直到長語句結束,然後轉儲則釋放鎖。因此如果MySQL伺服器只接收到短("短執行時間")的更新語句,即使有大量的語句,也不會注意到鎖期間。
shell> mysqlmp --all-databases --single-transaction > all_databases.sql 對於點對點恢復(也稱為「前滾」,當你需要恢復舊的備份並重放該備份以後的更改時),循環二進制日誌或至少知道轉儲對應的二進制日誌內容很有用:
shell> mysqlmp --all-databases --master-data=2 > all_databases.sql 或 shell> mysqlmp --all-databases --flush-logs --master-data=2 > all_databases.sql 如果表保存在InnoDB存儲引擎中,同時使用--master-data和--single-transaction提供了一個很方便的方式來進行適合點對點恢復的聯機備份。
⑥ mysqlmp到底怎麼用
備份:
導出要用到MySQL的mysqlmp工具,基本用法是:
mysqlmp [OPTIONS] database [tables]
如果你不給定任何錶,整個資料庫將被導出。
通過執行mysqlmp --help,你能得到你mysqlmp的版本支持的選項表。
注意,如果你運行mysqlmp沒有--quick或--opt選項,mysqlmp將在導出結果前裝載整個結果集到內存中,如果你正在導出一個大的資料庫,這將可能是一個問題。
mysqlmp支持下列選項:
--add-locks
在每個表導出之前增加LOCK TABLES並且之後UNLOCK TABLE。(為了使得更快地插入到MySQL)。
--add-drop-table
在每個create語句之前增加一個drop table。
--allow-keywords
允許創建是關鍵詞的列名字。這由在列名前面加表名的方法做到。
-c, --complete-insert
使用完整的insert語句(用列名字)。
-C, --compress
如果客戶和伺服器均支持壓縮,壓縮兩者間所有的信息。
--delayed
用INSERT DELAYED命令插入行。
-e, --extended-insert
使用全新多行INSERT語法。(給出更緊縮並且更快的插入語句)
-#, --debug[=option_string]
跟蹤程序的使用(為了調試)。
--help
顯示一條幫助消息並且退出。
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--fields-terminated-by=...
這些選擇與-T選擇一起使用,並且有相應的LOAD DATA INFILE子句相同的含義。
LOAD DATA INFILE語法。
-F, --flush-logs
在開始導出前,洗掉在MySQL伺服器中的日誌文件。
-f, --force,
即使我們在一個表導出期間得到一個SQL錯誤,繼續。
-h, --host=..
從命名的主機上的MySQL伺服器導出數據。預設主機是localhost。
-l, --lock-tables.
為開始導出鎖定所有表。
-t, --no-create-info
不寫入表創建信息(CREATE TABLE語句)
-d, --no-data
不寫入表的任何行信息。如果你只想得到一個表的結構的導出,這是很有用的!
--opt
同--quick --add-drop-table --add-locks --extended-insert --lock-tables。
應該給你為讀入一個MySQL伺服器的盡可能最快的導出。
-pyour_pass, --password[=your_pass]
與伺服器連接時使用的口令。如果你不指定「=your_pass」部分,mysqlmp需要來自終端的口令。
-P port_num, --port=port_num
與一台主機連接時使用的TCP/IP埠號。(這用於連接到localhost以外的主機,因為它使用 Unix套接字。)
-q, --quick
不緩沖查詢,直接導出至stdout;使用mysql_use_result()做它。
-S /path/to/socket, --socket=/path/to/socket
與localhost連接時(它是預設主機)使用的套接字文件。
-T, --tab=path-to-some-directory
對於每個給定的表,創建一個table_name.sql文件,它包含SQL CREATE 命令,和一個table_name.txt文件,它包含數據。 注意:這只有在mysqlmp運行在mysqld守護進程運行的同一台機器上的時候才工作。.txt文件的格式根據--fields-xxx和--lines--xxx選項來定。
-u user_name, --user=user_name
與伺服器連接時,MySQL使用的用戶名。預設值是你的Unix登錄名。
-O var=option, --set-variable var=option
設置一個變數的值。可能的變數被列在下面。
-v, --verbose
冗長模式。列印出程序所做的更多的信息。
-V, --version
列印版本信息並且退出。
-w, --where='where-condition'
只導出被選擇了的記錄;注意引號是強制的!
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
最常見的mysqlmp使用可能製作整個資料庫的一個備份:
mysqlmp --opt database > backup-file.sql
但是它對用來自於一個資料庫的信息充實另外一個MySQL資料庫也是有用的:
mysqlmp --opt database | mysql --host=remote-host -C database
由於mysqlmp導出的是完整的SQL語句,所以用mysql客戶程序很容易就能把數據導入了:
mysqladmin create target_db_name
mysql target_db_name < backup-file.sql
⑦ mysqlmp直接將MySQL資料庫壓縮備份遇到報錯
一、mysqlmp 備份的時候使用 --extended-insert=false 參數。
原理如下:
使用MySqlmp命令導出數據時的注意
在使用Mysql做基礎資料庫時,由於需要將庫B的數據導入庫A,而A,B庫又包含大量相同的數據,需要使用mysqlmp導出腳本.
通常的命令會是
?
1
2
mysqlmp -t 'dbName' > 'scriptName.sql'
mysql -f 'dbName' < 'scriptName.sql'
而使用如下命令導入到A庫時不會成功,現象是報出幾個Duplicate key error後就完畢了,並未將其餘正確的數據插入到A庫中.
搗鼓了好一會,發現在使用mysqlmp導出的腳本命令中,insert語句採用是multiline insert synax.而不是採用single insert synax.原來是這個問題. 多行的插入語法在第一個主健重復錯誤後就不執行後續的對應表的插入語句了.
於是再加參數 --extended-insert=false,完整的命令是
?
1
mysqlmp --extended-insert=false dbname > scriptname.sql
二、手工把表中username里存在重復的值刪除
使用資料庫工具 Navicat 之類的,執行查詢:
?
1
Select username,Count(*) From cdb_members Group By username Having Count(*) > 1
結果中就能顯示出表中存在重復的欄位, 你會看到2個或者多個完全一模一樣重復的用戶名。刪除其中一行的記錄,保存後再導出資料庫。
這里需要特別注意:備份的時候,把表結構跟數據分開!
以下是 mysqlmp 的一些使用參數
備份資料庫:
?
1
2
3
#mysqlmp 資料庫名 >資料庫備份名
#mysqlmp -A -u用戶名 -p密碼 資料庫名>資料庫備份名
#mysqlmp -d -A --add-drop-table -uroot -p >xxx.sql
1.導出結構不導出數據
?
1
mysqlmp -d 資料庫名 -uroot -p > xxx.sql
2.導出數據不導出結構
?
1
mysqlmp -t 資料庫名 -uroot -p > xxx.sql
3.導出數據和表結構
?
1
mysqlmp 資料庫名 -uroot -p > xxx.sql
4.導出特定表的結構
?
1
2
mysqlmp -uroot -p -B資料庫名 --table 表名 > xxx.sql
#mysqlmp [OPTIONS] database [tables]
mysqlmp支持下列選項:
--add-locks
在每個表導出之前增加LOCK TABLES並且之後UNLOCK TABLE。(為了使得更快地插入到MySQL)。
--add-drop-table
在每個create語句之前增加一個drop table。
--allow-keywords
允許創建是關鍵詞的列名字。這由表名前綴於每個列名做到。
-c, --complete-insert
使用完整的insert語句(用列名字)。
-C, --compress
如果客戶和伺服器均支持壓縮,壓縮兩者間所有的信息。
--delayed
用INSERT DELAYED命令插入行。
-e, --extended-insert
使用全新多行INSERT語法。(給出更緊縮並且更快的插入語句)
-#, --debug[=option_string]
跟蹤程序的使用(為了調試)。
--help
顯示一條幫助消息並且退出。
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--fields-terminated-by=...
這些選擇與-T選擇一起使用,並且有相應的LOAD DATA INFILE子句相同的含義。
LOAD DATA INFILE語法。
-F, --flush-logs
在開始導出前,洗掉在MySQL伺服器中的日誌文件。
-f, --force,
即使我們在一個表導出期間得到一個SQL錯誤,繼續。
-h, --host=..
從命名的主機上的MySQL伺服器導出數據。預設主機是localhost。
-l, --lock-tables.
為開始導出鎖定所有表。
-t, --no-create-info
不寫入表創建信息(CREATE TABLE語句)
-d, --no-data
不寫入表的任何行信息。如果你只想得到一個表的結構的導出,這是很有用的!
--opt
同--quick --add-drop-table --add-locks --extended-insert --lock-tables。
應該給你為讀入一個MySQL伺服器的盡可能最快的導出。
-pyour_pass, --password[=your_pass]
與伺服器連接時使用的口令。如果你不指定「=your_pass」部分,mysqlmp需要來自終端的口令。
-P port_num, --port=port_num
與一台主機連接時使用的TCP/IP埠號。(這用於連接到localhost以外的主機,因為它使用 Unix套接字。)
-q, --quick
不緩沖查詢,直接導出至stdout;使用mysql_use_result()做它。
-S /path/to/socket, --socket=/path/to/socket
與localhost連接時(它是預設主機)使用的套接字文件。
-T, --tab=path-to-some-directory
對於每個給定的表,創建一個table_name.sql文件,它包含SQL CREATE 命令,和一個table_name.txt文件,它包含數據。 注意:這只有在mysqlmp運行在mysqld守護進程運行的同一台機器上的時候才工作。.txt文件的格式根據--fields-xxx和--lines--xxx選項來定。
-u user_name, --user=user_name
與伺服器連接時,MySQL使用的用戶名。預設值是你的Unix登錄名。
-O var=option, --set-variable var=option設置一個變數的值。可能的變數被列在下面。
-v, --verbose
冗長模式。列印出程序所做的更多的信息。
-V, --version
列印版本信息並且退出。
-w, --where='where-condition'
只導出被選擇了的記錄;注意引號是強制的!
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
導入數據:
由於mysqlmp導出的是完整的SQL語句,所以用mysql客戶程序很容易就能把數據導入了:
?
#mysql 資料庫名 < 文件名
#source /tmp/xxx.sql