MySQL備份和恢復實戰

MySQL備份和恢復實戰

MyISAM數據表備份之mysqlhotcopy

數據表爲myisam引擎的備份。可以使用mysqlhotcopymysqldump工具進行備份。

1)介紹

           這個工具是一個Perl語言寫的腳本。使用mysqlhotcopy必須安裝perl-DBD-MySQLperl-DBD

2)特點

           a:文件系統級別的copymysqldump則是數據庫端的SQL語句集合

           b:只能運行在數據庫目錄所在的機器上,mysqldump則任何機器都可以。

           cmysqldumpmysqlhotcopy都執行lock tablesunlock tables

3)備份

           amysqlhotcopy-u admin -p 'jidian123'  --addtodest  virtual1 virtual 2 > /tmp

                     --addtodest:指當備份存在時,不中斷當前備份,只添加新文件進去

4)還原

           a:停止數據庫

           bcopy  -rp /tmp/virtual    /mydata55/data

           c:啓動數據庫        

 

2mysqldump範例

範例一

參數:-u  –p  庫名

  1. 1.          備份

mysqldump -uadmin -p'jidian123' virtual>/opt/virtual.sql

 

2.查看數據內容

[root@localhost mydata55]# egrep  -v"#|--|^$|\*" /opt/virtual.sql

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

  `id` int(11)NOT NULL,

  `name`varchar(20) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES `user` WRITE;

INSERT INTO `user` VALUES (1,'summer'),(1,'於江磊');

UNLOCK TABLES;

 

3.導入數據

Mysql –uadmin –p –S /mydata55/mysql.sock  virtual </opt/virtual.sql

 

範例二

參數:-u  –p -B  庫名

1.備份

mysqldump -uadmin -p'jidian123' -B virtual>/opt/virtual_B.sql

 

  1. 2.          查看virtual.sql virtual_B.sql兩個文件的區別,得出-B作用

[root@localhost opt]# diff virtual.sql  virtual_B.sql

18a19,26

> -- Current Database: `virtual`

> --

>

> CREATE DATABASE /*!32312 IF NOT EXISTS*/ `virtual` /*!40100 DEFAULTCHARACTER SET utf8 */;

>

> USE `virtual`;

>

> --

50c58

< -- Dump completed on 2015-08-18 23:07:17

---

> -- Dump completed on 2015-08-18 23:07:27

3.導入數據,注意不要加數據庫

Mysql –uadmin –p –S /mydata55/mysql.sock  </opt/virtual_B.sql

 

範例三

參數:-u  –p -B  庫名  gzip

  1. 1.          備份

mysqldump -uadmin -p'jidian123' -B  virtual |gzip >/opt/virtual_B.sql.gz

 

[root@localhost opt]# ll

total 16

-rw-r--r--. 1 root root 2007Aug 18 23:07 virtual_B.sql

-rw-r--r--. 1 root root  761 Aug 18 23:38virtual_B.sql.gz

-rw-r--r--. 1 root root 3308 Aug 18 23:27virtual_null.sql

-rw-r--r--. 1 root root 1861 Aug 18 23:07 virtual.sql

 

 

小結論:

1.導出數據用-B參數

-B:導出多個庫、增加建庫語句、增加use 語句

 

2.壓縮數據gzip

 

 

 

 

2mysqldump多庫備份

法一:

mysql -u admin-p'jidian123' -S /mydata55/mysql.sock  -e"show databases" | grep -Eiv "informat|perform|database" |sed -r 's#^([a-z].*$)#mysqldump -uadmin -p'jidian123' --events -B  \1|gzip >/opt/bak/\1.sql.gz#g'|bash

 

 

法二:

For循環

金庸新著 $dbname_bak.sql

#!/bin/bash

for dbname in `mysql -u admin -p'jidian123' -S/mydata55/mysql.sock  -e "showdatabases;" | grep -Eiv "informat|perform|datab"`

do

mysqldump -uadmin -p'jidian123' -S/mydata55/mysql.sock  --events -B  $dbname | gzip > ${dbname}_sql.gz

 

引深:

多表備份:

#!/bin/bash

for tbname in `mysql -u admin -p'jidian123' -S/mydata55/mysql.sock  -e "usemysql;show tables"`

do

mysqldump -uadmin -p'jidian123' -S/mydata55/mysql.sock  mysql  $tbname |gzip >/opt/tb/${tbname}_sql.gz

done

 

線上多order表備份腳本:(1)

#!/bin/bash

#訂單表備份,共24張表。

#

DE=`date +%F`

DT=`date+%F_%T`

Directory="/home/bak/order"

Host='192.168.0.140'

User="virtual"

DB="virtual"

Pass="V#!2707GIcsSingulax201566"

if [  -d $Directory ];then

   echo "備份目錄存在,不用重複建立!"

else

   mkdir $Directory -p

fi

cd$Directory  &&  mkdir $DE

for  tbname in `mysql  -h $Host -u$User  -p$Pass -e "use $DB;show tables;" | egrep  -Ei  "^tb_orders$|*.[0-9]$"`

do

        mysqldump -h $Host -u$User  -p$Pass $DB  $tbname |gzip >$Directory/$DE/${DT}_${tbname}.sql.gz

done

 

線上多other表備份腳本:(2)

#!/bin/bash

#備份所有非訂單表,共49張。

DE=`date +%F`

DT=`date+%F_%T`

Directory="/home/bak/other"

Host='192.168.0.140'

User="virtual"

DB="virtual"

Pass="V#!2707GIcsSingulax201566"

if [ ! -d$Directory ];then

   mkdir $Directory  -p

fi

cd$Directory  &&  mkdir $DE

for  tbname in `mysql  -h $Host -u$User  -p$Pass -e "use  $DB ;show  tables;" | egrep  -iv '^tb_orders_h_[0-9]|^tb_orders$|^Tables_in_virtual$|^orders_view$'`

do

        mysqldump -h $Host -u$User  -p$Pass $DB  $tbname |gzip >$Directory/$DE/${DT}_${tbname}.sql.gz

done

http://edu.51cto.com/course/course_id-808.html

 

 

 

 

 

3mysqldump多個參數 *****

參數:

-u 

–p 

-A    --all-databases

-B    導出多個數據庫,sql文件包含CREATE DATABASE and USE statements

-F    --flush-logs

gzip

-d     只導結構

-t      只導數據

-x     --lock-all-tables

--single-transaction  保證mysqldump進程看到的數據,是落地的。數據完整性

--master-data=1|2    1代表pos點不註釋,2代表

    

-E    --events

---triggers

-R    --routines

--default-character-set  導出指定字符集

--flush-privileges       刷新權限

 

生產環境:

提示:

1.-A不用加-B

2.

for MyISAM:

mysqludmp-uadmin -p'jidian123' -A --flush-privileges -x  --master-data=1 \

-F --events  --triggers --routines  >bak.sql

 

for InnoDB:

mysqldump -uroot-p'jidian123' -A --flush-privileges --single-transaction \

--master-data=1  --flush-logs --events --triggers --routines  >bak.sql

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章