天天看點

mysql備份執行個體方案

線上備份如何保障備份的資料的一緻性,使用邏輯卷快照功能來實作,先鎖幾秒

把blog日志重定向到一個檔案裡,再用source導入到資料庫裡,因為每操作一步都會産生新的blog日志

直接複制資料庫檔案,适用于大型資料庫環境,一般結構lvm snapshot的方式實作,缺點是不能恢複到異構系統中如Windows中

備份的是建表,建庫,插入等操作所執行的sql語句,适用于中小型資料庫,效率比較低

Mysqldump實作邏輯備份

文法

#mysqldump -h 伺服器 -u使用者名  -p密碼 資料庫名 > 備份檔案.sql

資料庫名的選項

--all -databases   所有庫

School   資料庫名

School stu_info t1 school資料庫的表stu_info t1

--databases bbs test mysql 多個資料庫

執行個體:

單庫備份:

#mysqldump -uroot -p123 bbs >bbs.sql

#mysqldump -uroot -p123 bbs table1 table 2 > bbs table1 table2.sql

多庫備份

#mysqldump -uroot -p123 -databases bbs test mysql > bbs_test_mysql,sql

備份所有庫

#mysqldump -uroot -p123 --all-databases > all.sql

#mysqldump -uroot -p123 --all-databses --lock-all-tables > /tmp/all2.sql

情況1資料庫損壞了,等于是機器都壞了

操作步驟:

備份

1#mysqldump -uroot -p123 --all-databases --lock-all-tables>/backup/`date+%F`_all.sql

2mysql -uroot -p123 -e ‘flush logs’   //截斷并産生新的binlog

3插入資料   //模拟伺服器正常運作

4mysql>set sql_log_bin=0;

Mysql>drop database bbs   //模拟伺服器損壞

恢複:(幹淨的環境,新機器)

1mysql>set sql_log_bin=0;

 Mysql>source /backup/2014-02-13 all.sql            //恢複最近一次完全備份

2mysqlbinlog 最後一個binlog |mysql -uroot -p 123     //恢複最後一個binlog檔案

情況2如果有誤删除

4Mysql>drop table db1.t1  //模拟誤删除

2mysqlbinlog 最後一個binlog  --stop-position=260|mysql -uroot -p 123  

mysqlbinlog 最後一個binlog  --start-position=500|mysql -uroot -p 123    這種情況下就需要用到blog字元截取來恢複

備份/恢複注意事項:

1)完全備份到一個幹淨的環境(例如新的資料庫或删除原有的資料庫)

2)恢複期間所有sql語句不應該記錄到binlog中

3)單庫恢複前需要手動建立資料庫

1)寫腳本

Vim /mysql_back.sql

#!/bin/Bash

#The mysql_back

# Author: luliechu (E-mail: [email protected]

Back_dir=/backup

Back_file=`date+%F`_all.sql

User=root

Pass=123

If[! -d /backup];

Then

 Mkdir -p /backup

Fi

#備份并切斷日志

Mysqldump -u${user} -p${pass} -- events --all-databases --lock-all-tables>${back_dir}/${back_file}

Mysql  -u${user}  -p${pass} -e ‘flush’ logs

#隻保留最近一周的備份

Cd $back_dir

Find -mtime +7 -exec rm -rf {}\;

2)測試

Chmod a+x /mysql_back.sql //給腳本執行權限

Chattr +i /mysql_back.sql   //為了安全給這腳本檔案上鎖,禁止任何人做改動

/mysql_back.sql    //執行腳本

3)配置定時任務到生産環境中

Crontab  -l

0 2 * * * /mysql_back.sql   //每天淩晨2點執行腳本

将表導入到文本檔案中

表的導出和導入

Select ....into outfile 導出文本檔案

Mysql>select * from school.student1

Into outfile ‘student1.txt’

Fields terminated by `,`   //定義字段分割符

Optinon

Ally enclosed by `’’` 定義字元串使用什麼符号括起來

Lines terminated by ‘\n’  //定義換行符

注意要盡量是相同版本之間遷移

Mysqldump -h 遷移源ip -uroot -p123 --databases bbs |mysql -h 目标ip  -uroot

 -p456

//遷移源為本機,不用申請

總結:mysql支援多種不同的備份方式,包括實體備份,邏輯備份等方式,通過在生産環境中一般都是采用實體備份和邏輯備份相結合的方式來實作

本文轉自    探花無情   51CTO部落格,原文連結:http://blog.51cto.com/983865387/1875829