(4.12)mysql備份還原——mysql邏輯備份之mysqldump

關鍵詞:mysql邏輯備份介紹,mysqldump,mysqldump最佳實踐html

個人相關文章:https://www.cnblogs.com/gered/p/9721696.html mysql

 

 

正文sql

一、mysql邏輯備份介紹

  【1.1】備分內容:數據庫的結構定義語句+數據內容的插入語句,備份出來的文件能夠編輯數據庫

  【1.2】使用場景:數據量較少的庫,比較適合100G數據量之內的windows

  邏輯備份的特色緩存

    (1)sql語句組成的文件,能夠編輯截取部分單獨使用。安全

    (2)備份文件比物理文件小bash

    (3)能夠細化到表/表的內容服務器

    (4)速度慢多線程

    (5)能夠跨平臺恢復/遷移

 

二、邏輯備份工具

  【1.1】mysqldump(單線程)、mysqlpump(多線程,5.7之後纔有):官方mysql備份工具

  【1.2】mydumper:開源的基於mysqldump的一個優化,多線程,速度介於二者之間:主要用於Mariadb、Percona、官方的mysql

 

三、mysqldump工具介紹使用

  備份能夠包含的內容:

  create database;  create tables;  insert into;

  store procedure;  trigger;  function;  events;

 

四、mysqldump經常使用參數釋義

【4.1】服務器相關的經常使用參數

4.1.1】mysqldump客戶端讀取       讀取my.cnf下的 [client] 以及 [mysqldump]  
【4.2.2】基本形式
      mysqldump -uroot -p'123456' -h192.168.1.105 -P3306
      -u --user
      -p --password
      -h --host
      -P --port
      --protocol=tcp,socket,momory
      --max-allowed-packet
      --net-buffer-length

【4.2】備分內容的經常使用參數

#能夠備份 #全部的庫、幾個庫、一個庫、一個表、幾個表、一個表的內容、存儲過程、函數、觸發器、調度事件 -A --all -databases -B --databases  #-B test test1備份test庫和test1庫 -y --all-tablespaces #備份全部表空間 -n --no-create-db #不導出數據庫建立語句 -t --no-create-info #不處處表結構建立語句 -d --no-data #不導出數據,只導出表結構 -R --routines #導出存儲過程和函數,默認不導出 --triggers #導出觸發器,默認導出 --skip-triggers #不導出觸發器 -E --events #導出調度事件,默認不導出 --ignore-table #不導出某個庫的某個表,或者不導出幾個表test.test101 -w --where='' #導出知足條件的內容數據

【4.3】備份與實務和鎖相關的選項

【4.3.1】--single-transaction (實際導出,就是給正在導出的鎖+全局X鎖,而後導完以後再解鎖)
#--single-transaction參數的做用,設置事務的隔離級別爲可重複讀,即REPEATABLE READ
#能夠獲得一致性的導出結果。只針對Innodb,導出過程當中不容許運行表的DDL。由於實務持有表的metadata lock的共享鎖,而DDL會申請元數據庫的排它鎖(X鎖),因此會阻塞。 #--single-transaction還會關掉你默認的--lock-tables選項(即不加鎖),由於mysqldump默認會打開一個lock-table鎖住全部的表。那麼只能加--master-data才能加鎖。
【4.3.
2】--lock-tables #默認打開的,在這個鎖表時導一個鎖一個,導完解鎖。 【4.3.3】--lock-all-tables #會把全部的表都給鎖了,慢慢導,導完解鎖。【1】【2】【3】互斥。 【4.3.4】--flush-logs #導出數據時,刷新二進制日誌,達到一致性導出。 【4.3.5】--flush-privileges #導出權限語句到備份文件 【4.3.6】--master-data #有3個值(0,1,2) (0):默認是0,不寫入binlog日誌記錄 (1):在dump出來的文件中有這麼個語句。change master to ...pos 等記錄binlog文件及終點。 (2):#change master to ...pos 等記錄binlog文件及終點。(註釋掉)
【4.3.7】綜合使用一下
mysqldump -uroot -p --single-transaction --master-data=2 --fulsh-privileges --routines

【4.4】與複製相關的參數

4.4.1】--master-data
#有3個值(0,1,2) (0):默認是0,不寫入binlog日誌記錄 (1):在dump出來的文件中有這麼個語句。change master to ...pos 等記錄binlog文件及終點。 (2):#change master to ...pos 等記錄binlog文件及終點。(註釋掉)
4.4.2】--dump-slave #從庫上使用的,和--master-data參數同樣,是爲了slave創建下一級的slave 【4.4.3】--apply-slave-statements #和master-data=1相似 【4.4.4】--include-master-host-port #結合--dump-slave=1/2在導出中加入host和port 【4.4.5】--delete-master-logs #在備份後,刪除主庫的二進制日誌,默認打開--master-data=24.4.6】--set-gtid-purged
#清理gtid,用於在gtid環境下使用

【4.5】與字符集相關的選項

4.5.1】--set-charset #默認開啓,--set-charset=1/0,是否開啓字符集 【4.5.2】--default-character-set #指定是什麼字符集,utf8,gbk,utf8mb4 【4.5.3】-N --no-set-names #關閉--set-charset

【4.6】控制是否生成DDL語句的選項

4.6.1】--add-drop-database #若是存在則刪除數據庫,而且有建立數據庫語句,不存在直接新建 【4.6.2】--add-drop-table #默認打開,可使用--skip-add-drop-table 禁用 【4.6.3】--add-drop-trigger #若是存在則刪除,而後就新建,不存在直接新建 【4.6.4】-n --no-create-db #不生成建立數據庫語句 【4.6.5】-t --no-create-info #不生成建立表結構語句

【4.7】其餘參數

    【1】--default-character-set=utf8    #默認使用該字符集導出  【2】-B  #指定數據庫,會加上建庫與庫使用語句       【3】--compact  #減小備份文件垃圾信息(但會丟數據,生產不可用)  【4】數據庫名|gzip  #壓縮備份文件     【5】-d    #只備份表結構    【6】-t  #只備份表數據  【7】 -A  #all-databases的意思,備份全部數據庫(以及表、用戶等等全部數據)     【8】-F  #從新生成binlog日誌  【9】-R  #備份存儲過程、觸發器  【10】-f --force #強制執行,忽略單個錯誤
  
    【11】--log-error=/tmp/bak_errlog.log #指定導出過程當中的錯誤日誌  【12】--compatible=(oracle/mssql/postgresql) #導出兼容其餘數據庫的備份

 

五、mysqldump演示(基本用法)

#若是,不加--database 或者-B ,則不會有建立數據庫相關語句

5.1】導出全部的數據庫(庫+表結構+數據) mysqldump -uroot -proot -A >all_db_data.bak mysqldump -uroot -proot --all-databases >all_db_data.bak 【5.2】導出全部的數據庫(庫+表結構,不包含數據) mysqldump -uroot -proot -A --no-data >/backup/all_db.bak 【5.3】導出某一個表(結構+數據,庫表:test.test1) mysqldump -uroot -proot test test1 > test_test1.bak 【5.4】導出某一個表(只有表結構,沒有數據) mysqldump -uroot -proot --no-data test test1 > test_test1.bak 【5.5】導出多個表(結構+數據) mysqldump -uroot -proot test test1 test2 >test_2tab.bak 【5.6】不導出表結構(只有數據,沒有結構) mysqldump -uroot -proot --no-create-info test test1>test1_data.bak 【5.7】導出單個數據庫(結構+數據) mysqldump -uroot -proot --database test > test_db.bak 【5.8】導出多個數據庫(結構數據) mysqldump -uroot -proot --database test testdb2 >test_2db.bak 【5.9】導出單個數據庫(只有結構,沒有數據) mysqldump -uroot -proot --no-data --database test >test_db.bak 【5.10】導出單個數據庫(只有數據,沒有結構) mysqldump -uroot -proot --no-create-db --no-create-info --database test >test_data.bak 【5.11】導出單個數據庫(排除某個表) mysqldump -uroot -proot --database test --ignore-table=test.test1 >test_no_tab_test1.bak 【5.12】導出某個表的某一些數據(根據條件導出數據) mysqldump -uroot -proot test test1 --where="id>10" >test_where.bak

【5.13】導出全部的數據庫(庫+表結構+數據+函數+存儲過程+調度事件)
mysqldump -uroot -proot -R -E --all-databases >all_object_db.bak

【5.14】導出全部數據庫(數據一致+導出權限+刷新日誌+函數及存儲過程)
mysqldump -uroot -proot --single-transaction --master-data=2 --flush-logs --flush-privileges --routines --all-databases > all_data.bak
 

 

六、大體實現原理

深刻了解mysqldump原理

  【6.1】鏈接mysql

  【6.2】初始化信息

  【6.3】刷新表(加一個全局共享鎖,很快,是一個短暫的全局共享鎖)

  【6.4】記錄偏移量

  【6.5】開啓事務(一致性快照)

  【6.6】記錄偏移量

  【6.7】解鎖表

  【6.8】查看要備份的表

  【6.9】開始備份全部的數據

  【6.10】分析mysqldump事務和鎖的原理

  

6.10.1】--lock-tables
#會在整個導出過程當中加lock read local全部的表。innodb別人只能讀,myisam能夠讀和插入,但不能update

【6.10.2】--lock-all-tables
#請求一個全局的讀鎖,別人只能讀。保證數據的一致性,備份完後會話斷開,自動解鎖。

【6.10.3】--single-transaction
#單獨使用,不會有任何鎖,可是會對備份的表有元數據共享鎖(即不能DDL)

【6.10.4】--single-transaction 和 --master-data一塊兒用
#結合使用時,在開始的使用會短暫的請求一個全局的讀鎖,會組織全部表的寫入操做。

七、mysqldump最佳實踐

7.1】全備(不鎖表)

  --skip-add-drop-table 生產中儘可能使用這個選項,避免出現 DROP TABLE IF EXISTS `test`;致使生產事故

【innodb】mysqldump -uroot -proot --single-transaction --master-data=2 --flush-logs --flush-privileges --routines --all-databases > all_data.bak
【myisam】mysqldump -uroot -proot --lock-all-tables --master-data=2 --flush-logs --flush-privileges --routines --all-databases > all_data.bak
PS:上面的默認不會備份系統數據庫
【備份系統數據庫innodb】mysqldump -uroot -proot --skip-lock-tables --databases performance_schema information_schema sys >system_db.bak
#加上--flush-privileges 其實就是備份了mysql庫(權限庫)

【7.2】部分數據庫(innodb)
【innodb】mysqldump -uroot -proot --single-transaction --master-data=2 --flush-logs --routines --all-databases > some_db_data.bak
#這個時候就不太適合用--flush-privileges了,由於可能還原時,已經有mysql權限庫了,可能會引發衝突

【innodb】mysqldump -uroot -proot --flush-privileges --databases mysql > mysql_db_data.bak
#能夠單獨備份mysql庫的權限

PS:有必要的時候,加上default-character-set=utf8/utf8mb4

【7.3】關於增量(binlog):將binlog日誌保存起來,保存以前刷新日誌。
fulsh logs;
or
mysqladmin -uroot -proot flush logs
【7.4】導出權限數據(該部分轉載引用自:https://www.cnblogs.com/gaogao67/p/10372279.html
相關參考:https://www.cndba.cn/kunjian/article/3371?tdsourcetag=s_pctim_aiomsg
#(1)mysql5.7 hostname='127.0.0.1' port=3306 username='root' password='123456' echo "select concat('show create user ''',user,'''@''',host, ''';','show grants for ''',user,'''@''',host, ''';') from mysql.user where user <>'root'" | \ mysql --host=$hostname --user=$username --password=$password --port=$port -N | \ mysql --host=$hostname --user=$username --password=$password --port=$port -N | \ sed "s/$/;/" > /tmp/create-users.sql #(2)mysql5.6 hostname='127.0.0.1' port=3358 username='root' password='abc@123.com' mysql_exe="/export/servers/mysql/bin/mysql" echo "select concat('show grants for ''',user,'''@''',host, ''';') from mysql.user where user <>'root'" | \ ${mysql_exe} --host=$hostname --user=$username --password=$password --port=$port -N | \ ${mysql_exe} --host=$hostname --user=$username --password=$password --port=$port -N | \ sed "s/$/;/" > /tmp/create-users.sql 

八、mysqldump生產環境自動化備份案例

8.1】線上數據庫完整備份場景 (1)全備:天天業務最不繁忙的時候(好比凌晨2-4點)執行全備腳本 (2)增量:天天中午的週期flush logs一下,而後備份binlog日誌 前提: (1)必定要打開binlog日誌功能 (2)準備目錄空間與存儲(最好不要把備份與數據庫文件放在同一磁盤上,這樣更安全+磁盤IO性能更高) mkdir -p /mysql/backup/backup-db mkdir -p /mysql/backup/backup-binlog chown -R mysql:mysql /mysql/backup/ chomd -R 775 /mysql/backup/

自動完備
DataBakDir=/mysql/backup/backup-db/ LogOutFile=/mysql/backup/backup-db/bak-db.log mysql_host='127.0.0.1' mysql_port=3306 mysql_user='root' mysql_pass='123456' Date=`date +%Y%m%d` Begin=`date +%Y%m%d_%H%M%S` DumpFile="dbbackup_alldb_${Date}.sql" GzDumpFile="${DumpFile}.gz" DbName="--all-databases" SystemDb="dbbackup_SystemDb_${Date}.sql.gz" error_file="dbbackup.err"

if [ ! -d ${DataBakDir} ];then
        mkdir -p ${DataBakDir}
    chown -R mysql:mysql ${DataBakDir}
    chown -R 775 ${DataBakDir}
fi if [ ! -f ${LogOutFile} ];then touch ${LogOutFile} fi echo "${Begin} begin run!">${LogOutFile} /mysql/app/mysql/bin/mysqldump -u${mysql_user} -p${mysql_pass} -h${mysql_host} ${DbName} --default-character-set=utf8 --single-transaction --master-data=2 --routines --flush-logs --flush-privileges 1>${DataBakDir}${DumpFile} 2>${DataBakDir}${error_file} /mysql/app/mysql/bin/mysqldump -u${mysql_user} -p${mysql_pass} -h${mysql_host} --default-character-set=utf8 --skip-lock-tables --databases performance_schema information_schema sys mysql|gzip 1>${DataBakDir}${SystemDb} 2>${DataBakDir}${error_file} end=`date +%Y%m%d_%H%M%S` echo "${end} end script!">${LogOutFile}
find ${DataBakDir} -mtime +10 -name "*.gz" -exec rm -rf {}\

 mysql全備+binlog備參考腳本:

## 注意 各類目錄建立及相關參數設置 ## 設置 /root/dba/binlog_control.txt,記錄binlog文件時間,獲取時間命令:stat -c %y mysql_mmm_01-bin.000013 ## 設置 /root/dba/fullbak_file.txt,記錄全備目錄,第一次執行時,需設置一個目錄來存放備份前產生的binlog,以後每次全備會自動更新該文件 ---------------------------full_backup:mysql_full_backup.sh----------------------------------------
#!/bin/bash #mysql param user="root" passwd="123456" socket="/data/mysql/run/mysql.sock" port=3306 bk_options="--single-transaction --flush-logs -u$user -p$passwd --master-data=2 --all-databases --socket=$socket --port=$port"
 #log file dtime=`date +%Y%m%d%H%M%S` log_base="/root/dba/logs" log_file="$log_base/full_backup_${dtime}.log" #control file contr_file="/root/dba/binlog_control.txt" fullbak_file="/root/dba/fullbak_file.txt" #full backup dir bk_dir_suffix=`date +%Y%m%d` full_dir="/backup/mysql_bak/mysql_$bk_dir_suffix" [ -d ${full_dir} ] || mkdir -p ${full_dir} echo "mkdir full backup dir : $full_dir" >> $log_file #full backup file full_bk_file="mysql_full_$bk_dir_suffix.sql" #mysqldump cd $full_dir mysqldump $bk_options > $full_bk_file echo "full backup file  : $full_bk_file" >> $log_file #backup flush logs--binlog to previous full backup
/root/dba/mysql_binlog_backup_new.sh #update fullbak_file control file echo $full_dir > $fullbak_file ---------------------------binlog_backup:mysql_binlog_backup_new.sh-------------------------------------------------------
 #!/bin/bash #mysql user="root" passwd="123456" socket="/data/mysql/run/mysql.sock" port=3306 #log file dtime=`date +%Y%m%d%H%M%S` log_base="/root/dba/logs" log_file="$log_base/binlog_backup_${dtime}.log" #control file contr_file="/root/dba/binlog_control.txt" fullbak_file="/root/dba/fullbak_file.txt" #binlog path binlog_path="/data/mysql/binlog/" #binlog file format binlog_format="mysql_mmm_01-bin.*[0-9]*" #binlog backup dir dest_dir=`cat $fullbak_file` #current binlog curr_binlog=`mysql -u$user -p$passwd --socket=$socket --port=$port -e 'show master status\G'|grep "File"|awk '{print $2}'`
 echo "Current binlog      : $curr_binlog">>$log_file #current binglog file time currbinlog_time=`stat -c %y $binlog_path$curr_binlog` echo "Current binlog time : $currbinlog_time">>$log_file #lastest backup binlog file time previous_time=`cat $contr_file` echo "Previous time : $previous_time">>$log_file # ! -name "*$curr_binlog*" exclude current binglog bk_count=`find -L $binlog_path -name "$binlog_format" ! -name "*$curr_binlog*" -newermt "$previous_time" ! -newermt "$currbinlog_time"|wc -l` echo "backup files count  : $bk_count">>$log_file if [ $bk_count -gt 0 ];then find -L $binlog_path -name "$binlog_format" ! -name "*$curr_binlog*" -newermt "$previous_time" ! -newermt "$currbinlog_time"|xargs ls -t>>$log_file #find the newest bakup file last_file=`find -L $binlog_path -name "$binlog_format" ! -name "*$curr_binlog*" -newermt "$previous_time" ! -newermt "$currbinlog_time"|xargs ls -t|head -n 1` #newest backup file time last_file_time=`stat -c %y $last_file` echo $last_file_time > $contr_file #cp files find -L $binlog_path -name "$binlog_format" ! -name "*$curr_binlog*" -newermt "$previous_time" ! -newermt "$currbinlog_time" -exec cp {} $dest_dir \; fi find $log_base -mtime +15 -exec rm -f {} \; --------------------------------------------------------------------------------
mysql_backup_full_binlog

 

 【9】增量備份最佳實踐

#!/bin/bash #在使用以前,請提早建立如下各個目錄 backupDir=/usr/local/work/backup/daily #增量備份時複製mysql-bin.00000*的目標目錄,提早手動建立這個目錄 mysqlDir=/var/lib/mysql #mysql的數據目錄 logFile=/usr/local/work/backup/bak.log BinFile=/var/lib/mysql/mysql-bin.index #mysql的index文件路徑,放在數據目錄下的 mysqladmin -uroot -p123456 flush-logs #這個是用於產生新的mysql-bin.00000*文件 # wc -l 統計行數 # awk 簡單來講awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行各類分析處理。 Counter=`wc -l $BinFile |awk '{print $1}'` NextNum=0 #這個for循環用於比對$Counter,$NextNum這兩個值來肯定文件是否是存在或最新的 for file in `cat $BinFile` do base=`basename $file` echo $base #basename用於截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./ NextNum=`expr $NextNum + 1` if [ $NextNum -eq $Counter ] then
        echo $base skip! >> $logFile else dest=$backupDir/$base if(test -e $dest) #test -e用於檢測目標文件是否存在,存在就寫exist!到$logFile去 then
            echo $base exist! >> $logFile else
            cp $mysqlDir/$base $backupDir echo $base copying >> $logFile fi
     fi
done
echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ! >> $logFile

 【10】windows全量、增量備份最佳實踐

全備

set mysql_home=C:\Program Files\MySQL\MySQL Server 5.7\bin
set date1=%date:~10,4%%date:~4,2%%date:~7,2%
forfiles /p "E:\backup" /s /m *.* /d -14 /c "cmd /c del @path"
cd %mysql_home%

mysqldump -uroot -pxxx@# --single-transaction --flush-logs --master-data=2 --delete-master-logs --databases apc_sfdc_db -R -q> E:\backup\full_apc_sfdc_db%date1%.sql

mysqldump -uroot -pxxx@# --single-transaction --flush-logs --master-data=2 --delete-master-logs --databases apc_sfdc_sandbox -R -q> E:\backup\full_apc_sfdc_sandbox%date1%.sql

增量

set PATH="C:\Program Files\WinRAR";%PATH% set MYSQLPATH="C:\Program Files\MySQL\MySQL Server 5.7" set BAKPATH=E:\backup set USERNAME=root set PASSWORD="xxx"

mkdir %BAKPATH%\data %MYSQLPATH%\bin\mysqladmin -u%USERNAME% -p%PASSWORD% flush-logs xcopy /e /c /h /y E:\Data\mysql-bin.* %BAKPATH%\data rar a -ag %BAKPATH%\diff\ %BAKPATH%\data\mysql-bin.*
rmdir /s /q %BAKPATH%\data\ @echo %date% %time% dIncremental bakup finish >> E:\backup\log\mysqlbakup.log

 

 

 

 

 

mysqldump參數大全

--all-databases , -A
導出所有數據庫。 mysqldump -uroot -p --all-databases --all-tablespaces , -Y
導出所有表空間。 mysqldump -uroot -p --all-databases --all-tablespaces --no-tablespaces , -y
不導出任何表空間信息。 mysqldump -uroot -p --all-databases --no-tablespaces --add-drop-database
每一個數據庫建立以前添加drop數據庫語句。 mysqldump -uroot -p --all-databases --add-drop-database --add-drop-table
每一個數據表建立以前添加drop數據表語句。(默認爲打開狀態,使用--skip-add-drop-table取消選項)
mysqldump  -uroot -p --all-databases (默認添加drop語句)
mysqldump  -uroot -p --all-databases –skip-add-drop-table (取消drop語句) --add-locks
在每一個表導出以前增長LOCK TABLES而且以後UNLOCK  TABLE。(默認爲打開狀態,使用--skip-add-locks取消選項)
mysqldump  -uroot -p --all-databases (默認添加LOCK語句)
mysqldump  -uroot -p --all-databases –skip-add-locks (取消LOCK語句) --allow-keywords
容許建立是關鍵詞的列名字。這由表名前綴於每一個列名作到。 mysqldump -uroot -p --all-databases --allow-keywords --apply-slave-statements'CHANGE MASTER'前添加'STOP SLAVE',而且在導出的最後添加'START SLAVE'。 mysqldump -uroot -p --all-databases --apply-slave-statements --character-sets-dir
字符集文件的目錄 mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets --comments
附加註釋信息。默認爲打開,能夠用--skip-comments取消
mysqldump  -uroot -p --all-databases (默認記錄註釋)
mysqldump  -uroot -p --all-databases --skip-comments (取消註釋) --compatible
導出的數據將和其它數據庫或舊版本的MySQL 相兼容。值能夠爲ansi、mysql32三、mysql40、postgresql、oracle、mssql、db二、maxdb、no_key_options、no_tables_options、no_field_options等, 要使用幾個值,用逗號將它們隔開。它並不保證能徹底兼容,而是儘可能兼容。 mysqldump -uroot -p --all-databases --compatible=ansi --compact
導出更少的輸出信息(用於調試)。去掉註釋和頭尾等結構。可使用選項:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys
mysqldump  -uroot -p --all-databases --compact --complete-insert, -c
使用完整的insert語句(包含列名稱)。這麼作能提升插入效率,可是可能會受到max_allowed_packet參數的影響而致使插入失敗。 mysqldump -uroot -p --all-databases --complete-insert --compress, -C
在客戶端和服務器之間啓用壓縮傳遞全部信息 mysqldump -uroot -p --all-databases --compress --create-options, -a
在CREATE TABLE語句中包括全部MySQL特性選項。(默認爲打開狀態) mysqldump -uroot -p --all-databases --databases, -B
導出幾個數據庫。參數後面全部名字參量都被看做數據庫名。 mysqldump -uroot -p --databases test mysql --debug
輸出debug信息,用於調試。默認值爲:d:t,/tmp/mysqldump.trace mysqldump -uroot -p --all-databases --debug
mysqldump  -uroot -p --all-databases --debug=」 d:t,/tmp/debug.trace」 --debug-check
檢查內存和打開文件使用說明並退出。 mysqldump -uroot -p --all-databases --debug-check --debug-info
輸出調試信息並退出 mysqldump -uroot -p --all-databases --debug-info --default-character-set
設置默認字符集,默認值爲utf8 mysqldump -uroot -p --all-databases --default-character-set=utf8 --delayed-insert
採用延時插入方式(INSERT DELAYED)導出數據 mysqldump -uroot -p --all-databases --delayed-insert --delete-master-logs
master備份後刪除日誌. 這個參數將自動激活--master-data。
mysqldump  -uroot -p --all-databases --delete-master-logs --disable-keys
對於每一個表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;語句引用INSERT語句。這樣能夠更快地導入dump出來的文件,由於它是在插入全部行後建立索引的。該選項只適合MyISAM表,默認爲打開狀態。 mysqldump -uroot -p --all-databases  --dump-slave
該選項將主的binlog位置和文件名追加到導出數據的文件中(show slave status)。設置爲1時,將會以CHANGE MASTER命令輸出到數據文件;設置爲2時,會在change前加上註釋。該選項將會打開--lock-all-tables,除非--single-transaction被指定。該選項會自動關閉--lock-tables選項。默認值爲0。
mysqldump  -uroot -p --all-databases --dump-slave=1
mysqldump  -uroot -p --all-databases --dump-slave=2 --master-data
該選項將當前服務器的binlog的位置和文件名追加到輸出文件中(show master status)。若是爲1,將會輸出CHANGE MASTER 命令;若是爲2,輸出的CHANGE  MASTER命令前添加註釋信息。該選項將打開--lock-all-tables 選項,除非--single-transaction也被指定(在這種狀況下,全局讀鎖在開始導出時得到很短的時間;其餘內容參考下面的--single-transaction選項)。該選項自動關閉--lock-tables選項。
mysqldump  -uroot -p --host=localhost --all-databases --master-data=1;
mysqldump  -uroot -p --host=localhost --all-databases --master-data=2; --events, -E
導出事件。 mysqldump -uroot -p --all-databases --events --extended-insert, -e
使用具備多個VALUES列的INSERT語法。這樣使導出文件更小,並加速導入時的速度。默認爲打開狀態,使用--skip-extended-insert取消選項。
mysqldump  -uroot -p --all-databases
mysqldump  -uroot -p --all-databases--skip-extended-insert (取消選項) --fields-terminated-by
導出文件中忽略給定字段。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項
mysqldump  -uroot -p test test --tab=」/home/mysql」 --fields-terminated-by=」#」 --fields-enclosed-by
輸出文件中的各個字段用給定字符包裹。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項
mysqldump  -uroot -p test test --tab=」/home/mysql」 --fields-enclosed-by=」#」 --fields-optionally-enclosed-by
輸出文件中的各個字段用給定字符選擇性包裹。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項
mysqldump  -uroot -p test test --tab=」/home/mysql」 --fields-enclosed-by=」#」 --fields-optionally-enclosed-by =」#」 --fields-escaped-by
輸出文件中的各個字段忽略給定字符。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項
mysqldump  -uroot -p mysql user --tab=」/home/mysql」 --fields-escaped-by=」#」 --flush-logs
開始導出以前刷新日誌。 請注意:假如一次導出多個數據庫(使用選項--databases或者--all-databases),將會逐個數據庫刷新日誌。除使用--lock-all-tables或者--master-data外。在這種狀況下,日誌將會被刷新一次,相應的因此表同時被鎖定。所以,若是打算同時導出和刷新日誌應該使用--lock-all-tables 或者--master-data 和--flush-logs。
mysqldump  -uroot -p --all-databases --flush-logs --flush-privileges
在導出mysql數據庫以後,發出一條FLUSH  PRIVILEGES 語句。爲了正確恢復,該選項應該用於導出mysql數據庫和依賴mysql數據庫數據的任什麼時候候。 mysqldump -uroot -p --all-databases --flush-privileges --force
在導出過程當中忽略出現的SQL錯誤。 mysqldump -uroot -p --all-databases --force --help
顯示幫助信息並退出。 mysqldump --help --hex-blob
使用十六進制格式導出二進制字符串字段。若是有二進制數據就必須使用該選項。影響到的字段類型有BINARY、VARBINARY、BLOB。 mysqldump -uroot -p --all-databases --hex-blob --host, -h
須要導出的主機信息 mysqldump -uroot -p --host=localhost --all-databases --ignore-table
不導出指定表。指定忽略多個表時,須要重複屢次,每次一個表。每一個表必須同時指定數據庫和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
mysqldump  -uroot -p --host=localhost --all-databases --ignore-table=mysql.user --include-master-host-port--dump-slave產生的'CHANGE MASTER TO..'語句中增長'MASTER_HOST=<host>,MASTER_PORT=<port>' 
mysqldump  -uroot -p --host=localhost --all-databases --include-master-host-port --insert-ignore
在插入行時使用INSERT IGNORE語句. mysqldump -uroot -p --host=localhost --all-databases --insert-ignore --lines-terminated-by
輸出文件的每行用給定字符串劃分。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項。
mysqldump  -uroot -p --host=localhost test test --tab=」/tmp/mysql」 --lines-terminated-by=」##」 --lock-all-tables, -x
提交請求鎖定全部數據庫中的全部表,以保證數據的一致性。這是一個全局讀鎖,而且自動關閉--single-transaction 和--lock-tables 選項。
mysqldump  -uroot -p --host=localhost --all-databases --lock-all-tables --lock-tables, -l
開始導出前,鎖定全部表。用READ  LOCAL鎖定表以容許MyISAM表並行插入。對於支持事務的表例如InnoDB和BDB,--single-transaction是一個更好的選擇,由於它根本不須要鎖定表。
請注意當導出多個數據庫時,--lock-tables分別爲每一個數據庫鎖定表。所以,該選項不能保證導出文件中的表在數據庫之間的邏輯一致性。不一樣數據庫表的導出狀態能夠徹底不一樣。
mysqldump  -uroot -p --host=localhost --all-databases --lock-tables --log-error
附加警告和錯誤信息到給定文件 mysqldump -uroot -p --host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err --max_allowed_packet
服務器發送和接受的最大包長度。 mysqldump -uroot -p --host=localhost --all-databases --max_allowed_packet=10240 --net_buffer_length
TCP/IP和socket鏈接的緩存大小。 mysqldump -uroot -p --host=localhost --all-databases --net_buffer_length=1024 --no-autocommit
使用autocommit/commit 語句包裹表。 mysqldump -uroot -p --host=localhost --all-databases --no-autocommit --no-create-db, -n
只導出數據,而不添加CREATE DATABASE 語句。 mysqldump -uroot -p --host=localhost --all-databases --no-create-db --no-create-info, -t
只導出數據,而不添加CREATE TABLE 語句。 mysqldump -uroot -p --host=localhost --all-databases --no-create-info --no-data, -d
不導出任何數據,只導出數據庫表結構。 mysqldump -uroot -p --host=localhost --all-databases --no-data --no-set-names, -N
等同於--skip-set-charset
mysqldump  -uroot -p --host=localhost --all-databases --no-set-names --opt
等同於--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 該選項默認開啓, 能夠用--skip-opt禁用.
mysqldump  -uroot -p --host=localhost --all-databases --opt --order-by-primary
若是存在主鍵,或者第一個惟一鍵,對每一個表的記錄進行排序。在導出MyISAM表到InnoDB表時有效,但會使得導出工做花費很長時間。 mysqldump -uroot -p --host=localhost --all-databases --order-by-primary --password, -p
鏈接數據庫密碼 --pipe(windows系統可用)
使用命名管道鏈接mysql mysqldump -uroot -p --host=localhost --all-databases --pipe --port, -P
鏈接數據庫端口號 --protocol
使用的鏈接協議,包括:tcp, socket, pipe, memory. mysqldump -uroot -p --host=localhost --all-databases --protocol=tcp --quick, -q
不緩衝查詢,直接導出到標準輸出。默認爲打開狀態,使用--skip-quick取消該選項。
mysqldump  -uroot -p --host=localhost --all-databases 
mysqldump  -uroot -p --host=localhost --all-databases --skip-quick --quote-names,-Q
使用(`)引發表和列名。默認爲打開狀態,使用--skip-quote-names取消該選項。
mysqldump  -uroot -p --host=localhost --all-databases
mysqldump  -uroot -p --host=localhost --all-databases --skip-quote-names --replace
使用REPLACE INTO 取代INSERT INTO. mysqldump -uroot -p --host=localhost --all-databases --replace --result-file, -r
直接輸出到指定文件中。該選項應該用在使用回車換行對(\\r\\n)換行的系統上(例如:DOS,Windows)。該選項確保只有一行被使用。 mysqldump -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt --routines, -R
導出存儲過程以及自定義函數。 mysqldump -uroot -p --host=localhost --all-databases --routines --set-charset
添加'SET NAMES default_character_set'到輸出文件。默認爲打開狀態,使用--skip-set-charset關閉選項。
mysqldump  -uroot -p --host=localhost --all-databases 
mysqldump  -uroot -p --host=localhost --all-databases --skip-set-charset --single-transaction
該選項在導出數據以前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,由於LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。
mysqldump  -uroot -p --host=localhost --all-databases --single-transaction --dump-date
將導出時間添加到輸出文件中。默認爲打開狀態,使用--skip-dump-date關閉選項。
mysqldump  -uroot -p --host=localhost --all-databases
mysqldump  -uroot -p --host=localhost --all-databases --skip-dump-date --skip-opt
禁用–opt選項. mysqldump -uroot -p --host=localhost --all-databases --skip-opt --socket,-S
指定鏈接mysql的socket文件位置,默認路徑/tmp/mysql.sock mysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock --tab,-T
爲每一個表在給定路徑建立tab分割的文本文件。注意:僅僅用於mysqldump和mysqld服務器運行在相同機器上。注意使用--tab不能指定--databases參數
mysqldump  -uroot -p --host=localhost test test --tab="/home/mysql" --tables
覆蓋--databases (-B)參數,指定須要導出的表名,在後面的版本會使用table取代tables。
mysqldump  -uroot -p --host=localhost --databases test --tables test --triggers
導出觸發器。該選項默認啓用,用--skip-triggers禁用它。
mysqldump  -uroot -p --host=localhost --all-databases --triggers --tz-utc
在導出頂部設置時區TIME_ZONE='+00:00' ,以保證在不一樣時區導出的TIMESTAMP 數據或者數據被移動其餘時區時的正確性。 mysqldump -uroot -p --host=localhost --all-databases --tz-utc --user, -u
指定鏈接的用戶名。 --verbose, --v
輸出多種平臺信息。 --version, -V
輸出mysqldump版本信息並退出 --where, -w
只轉儲給定的WHERE條件選擇的記錄。請注意若是條件包含命令解釋符專用空格或字符,必定要將條件引用起來。 mysqldump -uroot -p --host=localhost --all-databases --where=」 user=’root’」 --xml, -X
導出XML格式. mysqldump -uroot -p --host=localhost --all-databases --xml --plugin_dir
客戶端插件的目錄,用於兼容不一樣的插件版本。 mysqldump -uroot -p --host=localhost --all-databases --plugin_dir=」/usr/local/lib/plugin」 --default_auth
客戶端插件默認使用權限。 mysqldump -uroot -p --host=localhost --all-databases --default-auth=」/usr/local/lib/plugin/<PLUGIN>」
相關文章
相關標籤/搜索