天天看點

mysql備份與恢複多庫多表備份

執行個體:

備份:

<code>mysqldump -u root -p</code><code>'123456'</code> <code>kaliboy&gt;</code><code>/opt/kaliboy</code><code>.sql</code>

指定字元集備份:

<code>mysqldump -u root -p</code><code>'123456'</code> <code>--default-character-</code><code>set</code><code>=utf8 kaliboy&gt;</code><code>/opt/kaliboy</code><code>.sql</code>

備份參數:

<code>-e : 後面可以執行mysql 指令用;分開</code>

<code>-B :參數的作用是增加建立資料庫和連接配接資料庫的指令</code>

<code>-d : 備份表結構</code>

<code>-t : 備份資料</code>

<code>-A -B --events 備份全部資料庫</code>

<code>-F : 重新整理binlog日志檔案</code>

<code>--master-data=1(=2) : 增加binlog日志檔案名及對應的位置點</code>

<code>-x,--lock-all-tables 鎖表</code>

<code>-l,--lock-tables 隻讀鎖表</code>

<code>--compact :去掉注釋</code>

<code>--single-transaction : 适合innodb事務資料庫備份</code>

<code>mysqldump -u root -p</code><code>'123456'</code> <code>-B kaliboy&gt;</code><code>/opt/kaliboy_bak</code><code>.sql</code>

還原資料庫:

<code>mysql -uroot -p</code><code>'123456'</code> <code>&lt;</code><code>/opt/kaliboy_bak</code><code>.sql</code>

檢視備份内容:

<code>egrep</code> <code>-</code><code>v</code> <code>"#|\*|--|^$"</code> <code>/opt/kaliboy</code><code>.sql</code>

檢視字元集:

<code>mysql -uroot -p</code><code>'123456'</code> <code>-e </code><code>"show variables like '%character%'"</code>

myqsl多庫備份:

<code>mysqldump -uroot -p</code><code>'123456'</code> <code>-B (庫名)kaliboy (庫名)ClasssInfo (庫名)kaliboy_gbk|</code><code>gzip</code> <code>&gt;</code><code>/opt/mysql_bak</code><code>.sql.gz</code>

mysql分庫備份:

<code>mysql -uroot -p</code><code>'123456'</code> <code>-e </code><code>"show databases;"</code><code>|</code><code>grep</code> <code>-Evi </code><code>"database|info|perfor"</code><code>|</code><code>sed</code> <code>-r </code><code>'s#^([a-z].*$)#mysqldump -uroot -p'</code><code>123456</code><code>' --events -B \1|gzip &gt;/opt/\1.sql.gz#g'</code><code>|</code><code>bash</code>

<code>#!/bin/bash</code>

<code>for</code> <code>dbname </code><code>in</code> <code>`mysql -uroot -p</code><code>'123456'</code> <code>-e </code><code>"show databases;"</code><code>|</code><code>grep</code> <code>-Evi </code><code>"database|infor|perfor"</code><code>`</code>

<code>do</code>

<code>mysqldump -uroot -p</code><code>"123456"</code> <code>--events -B $dbname|</code><code>gzip</code> <code>&gt;</code><code>/opt/bak</code><code>${dbname}_bak.sql.gz</code>

<code>done</code>

備份單個表和多表:

文法:mysqldump -u 使用者名 -p 資料庫名 表名 表名 表名&gt;備份的檔案名

<code>mysqldump -u root -p ClassInfo score&gt;</code><code>/opt/table1</code><code>.sql</code>

分庫分表備份:

<code>#!/bin/bash</code>

<code>USER=root</code>

<code>PASSWD=123456</code>

<code>SOCK=</code><code>/data/3306/mysql</code><code>.sock</code>

<code>LOGIN=</code><code>"mysql -u$USER -p$PASSWD -S $SOCK"</code>

<code>DATABASES=`$LOGIN -e </code><code>"show databases;"</code><code>|</code><code>sed</code> <code>"1d"</code><code>|</code><code>egrep</code> <code>-</code><code>v</code> <code>"^.*sch|mysql"</code><code>`</code>

<code>dump=</code><code>"mysqldump -u$USER -p$PASSWD -S $SOCK"</code>

<code>for</code> <code>database </code><code>in</code> <code>$DATABASES</code>

<code>[ ! -d </code><code>/back/</code><code>$database ] &amp;&amp; </code><code>mkdir</code> <code>-p </code><code>/back/</code><code>$database</code>

<code>TABLE=`$LOGIN -e </code><code>"show tables from $database;"</code><code>|</code><code>sed</code> <code>'1d'</code><code>`</code>

<code>for</code> <code>table </code><code>in</code> <code>$TABLE</code>

<code>$dump $database $TABLE|</code><code>gzip</code> <code>&gt;</code><code>/back/</code><code>$database/${database}_${table}_$(</code><code>date</code> <code>+%F).sql.gz</code>

隻備份表結構和隻備份資料:

參數-d 備份表結構

參數-t 備份資料

<code>mysql -u root -p</code><code>'123456'</code> <code>--compact -d ClassInfo score&gt;</code><code>/opt/tabled</code><code>.sql</code>

<code>mysql -u root -p</code><code>'123456'</code> <code>--compact -t ClassInfo score&gt;</code><code>/opt/tablet</code><code>.sql</code>

備份全部資料庫:

<code>mysqldump -u root -p</code><code>'123456'</code> <code>-A -B --events|</code><code>gzip</code> <code>&gt;</code><code>/opt/all</code><code>.sql.gz</code>

myisam與innodb備份的差別:

myisam :

mysqldump -uroot -p'123456' -A -B --master=2 -x|gzip &gt;/opt/all.sql.gz

mysqldump -uroot -p'123456' -A -B --master=2 -x --triqqers --routines --events --hex-blob|gzip &gt;/opt/all.sql.gz

innodb:

mysqldump -uroot -p'123456' -A -B --master=2 --singe-transaction|gzip &gt;/opt/all.sql.gz

mysqldump -uroot -p'123456' -A -B --master=2 --singe-transaction --triqqers --routines --events --hex-blob|gzip &gt;/opt/all.sql.gz

恢複資料庫實戰:

利用source指令恢複資料庫

進入mysql資料庫控制台,mysql -u root -p 登入後

mysql&gt;use 資料庫名

然後使用指令source 指令,後面參數為腳本檔案,可以利用system ls 檢視檔案路徑

mysql&gt;source /opt/all.sql.gz

批量恢複腳本執行個體:

#!/bin/bash

gzip -d /opt/*.gz

for dbname in `ls *.sql|sed 's#_bak.sql##g'`;

do

mysql -u root -p'123456' &lt;${dbname}_bak.sql;

done

mysql--shou指令總結:

show status; 檢視目前會話的資料庫狀态資訊

show global status; 檢視整個資料庫運作狀态資訊

show full processlist; 檢視正在執行的sql語句

show variables; 檢視資料庫參數資訊

---------------------------------------------

mysqlbinlog -&gt;解析mysql的binlog日志

用來記錄mysql内部增删改查等對mysql資料庫有更新的内容記錄。

mysqlbinlog參數:

-d 截取指定庫的binlog

按照位置截取:

mysqlbinlog mysqlbin.000046 --start-position=365 --stop-position=456 -r /opt/pos.sql

按照時間截取:

mysqlbinlog mysql-bin.000046 --start-datetime='2016-10-15 15:14:15' --stop-datetime='2016-10-15 15:16:17' -r time.sql

本文轉自 藍葉子Sheep 51CTO部落格,原文連結:http://blog.51cto.com/dellinger/1948087,如需轉載請自行聯系原作者