mysql全備份+增量備份筆記總結

來源:互聯網
上載者:User

標籤:備份   mysql   基礎知識   二進位   events   

備份基礎知識

冷備(cold backup):需要關mysql服務,讀寫請求均不允許狀態下進行;

溫備(warm backup): 服務線上,但僅支援讀請求,不允許寫請求;

熱備(hot backup):備份的同時,業務不受影響。


這種類型的備份,取決於業務的需求,而不是備份工具

MyISAM不支援熱備,InnoDB支援熱備,但是需要專門的工具


完全備份:full backup,備份全部字元集。

增量備份: incremental backup 上次完全備份或增量備份以來改變了的資料,不能單獨使用,要藉助完全備份,備份的頻率取決於資料的更新頻率。

差異備份:differential backup 上次完全備份以來改變了的資料。

建議的恢複策略:

完全+增量+二進位日誌

完全+差異+二進位日誌



全備份

MyISAM:

mysql -uroot  -p‘123456‘ -A  -B -F   –flush-privileges  –master-data=2 –x -–events | gzip > /opt/x_$(date +%F).sql.gz

InnoDB:

mysqldump    -uroot -p123456  --single-transaction   -A -B -F  --events | gzip > /server/backup/x_$(date +%F).sql.gz



--single-transaction    MySIM直接選-x(--lock-all-tables)參數鎖表,InnoDB選擇這個參數來保證備份的一致性。相當於設定一個隔離等級,REPEATABLE READ ,以確保本次會話dump時,不會看到其它會話已經提交的資料。

--master-data[=#]     自動找到binlog的位置  This causes the binary log position andfilename to be

   如: --master-data=1     可以不用重新整理binlog了,做增量備份的時候很有用

       --master-data=2    後會加個注釋,好找些

-E, --events        Dump events.

-A, --all-databases Dump  匯出所有資料,一般加-B 共用+--events all

-B,  --databases    指定多個庫名備份    直觀看,加上-B參數作用是增加建立資料庫和串連資料庫的命令,生產環境備份必用。

-F, --flush-logs    重新整理,切割binlog

補充:上訴兩種備份如果資料庫有預存程序和觸發器還得加兩個參數:

--triggers  –routines  --hex-blob,   一般公司無這三個參數。

觸發器       預存程序   如果你庫中有blob欄位,而你又沒加這個參數 ,那你的blog大欄位資料就會丟失

分庫備份

mysql  -uroot -p‘123456‘ -e "show databases;" | grep -Evi "Database|infor|perf" | sed -r ‘s#^([a-z].*$)#mysqldump -uroot-p‘123456‘  --events -B  \1 | gzip > /tmp/logs/\1.sql.gz#g‘      | bash

-t,--no-create-info     如果希望只匯出表資料

-d, --no-data           只備份表結構No row information.

報錯

mysqlbinlog:unknownvariable‘default-character-setutf8‘解決方案

mysqlbinlog  --no-defaults   ./mysql-bin.000007   



mysql全量匯出時碰到如下警示:                     預設是不備份事件表的,只有加了--events 才會不警告

Warning: Skipping the data of table mysql.event. Specify the --events option explicitly

解決辦法:

--events --ignore-table=mysql.event

ERROR 1046 (3D000) at line 22: No database selected

修改.sql   在22行前面加上   use   庫名字;

恢複

首先恢複全備

mysql    -uroot  -p123456    <  /server/backup/x.sql

多分庫檔案恢複

for name in `ls *.sql| sed ‘s#.sql##g‘ `; do mysql -uroot -p123456    < ${name}.sql ; done

然後



mysqladmin -uroot -p123456 flush-log       //切割日誌

匯總所有的binlog, 把錯誤的刪除,

剩下的轉成sql語句

cp mysql-bin.000016  /server/backup/

mysqlbinlog  --no-defaults  -d user mysql-bin.000016   > bin.sql

mysql  -uroot -p123456  < bin.sql

執行 | mysql

根據binlog位置和時間回複

mysqlbinlog --start-postion=107  --stop-position=1000    -d   庫名       二進位檔案          

mysqlbinlog --start-datetime=‘2013-09-10 00:00:00‘ --stop-datetime=‘2013-09-10 01:01:01‘ -d   庫名 二進位檔案

egrep -v "#|\*|--|^$"   可以過濾查看備份內容

rsync配合定時任務

rsync -avz   /data/3306/mysql-bin.000*   [email protected]::backup  --password-file=/etc/rsync.passsword



一主多從,一個從 做備份

vim  .my.cnf        //設定登陸

[client]

user=root

host=localhost

password=123456

mysql> show  variables  like "character_set%";   //查看字元集

[client]                   //設定字元集

default-character-set=utf8

[mysqld]

character-set-server=utf8     //5.5

default-character-set=utf8   //5.1

[mysql]

default-character-set=utf8

開啟bin-log,存在一份全備份,及所有增量binlog檔案備份

mysql> show  full   processlist; //串連情況

mysql> show variables like "%log_bin%";

+---------------------------------+-------+

| Variable_name                   | Value |

+---------------------------------+-------+

| log_bin                         | OFF   |

| log_bin_trust_function_creators | OFF   |

| sql_log_bin                     | ON    |

+---------------------------------+-------+

mysql> flush  table with read lock;   //讀鎖

mysql> unlock  tables;  //解鎖

replicate_wild_ignore_table=mysql.%     //可以加萬用字元

--skip-name-resolve    選項啟動mysqld來禁用DNS主機名稱尋找

slave-skip-errors = 1032,1062   //排除1032,1062的保持。

lower_case_table_names=1  //讓MySQL不區分大小寫!  //慎用,會影響原來的表名字

[mysqld]

read-only  //唯讀,root不受限

主從不同步

SQL=NO的情況,可以用下面的命令跳過報錯

在slave處於stop狀態下,執行 set global sql_slave_skip_counter=N以跳過命令  N=1

slave 開啟從庫記錄binlog               級聯同步        當做Database Backup

log-bin = /data/3307/mysql-bin

log-slave-updates

expire_logs_days = 7     //保留7天


本文出自 “何全” 部落格,請務必保留此出處http://hequan.blog.51cto.com/5701886/1775333

mysql全備份+增量備份筆記總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.