1. 程式人生 > >40、mysql備份工具mysqldump實戰

40、mysql備份工具mysqldump實戰

mysqldump:僅適用於資料集較小

使用格式:

mysqldump [OPTIONS] database [tables]                                              還原是資料庫必須存在,備份單個庫

mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] 還原資料庫可以不存在,備份指定的多個庫

mysqldump [OPTIONS] --all-databases [OPTIONS]                              還原資料庫可以不存在,備份所有資料庫

OPTIONS:

-u uername 指定連線資料庫的使用者名稱

-h 主機名 指定連線資料庫的主機名

-p 密碼 指定連線資料庫的密碼

     

備份單個庫(恢復時如果目標不存在,應先建立資料庫,如果不想建立,這使用--databases)

mysqldump -uroot -hlocalhost -p --databases hellodb > /mydata/backups/hdb.sql

mysql -uroot -p < /mydata/backups/hdb.sql


備份指定的多個庫

mysqldump -uroot -hlocalhost -p --databases hellodb mydb > /mydata/backups/mdb.sql

mysql -uroot -p < /mydata/backups/mdb.sql


備份所有的庫

mysqldump --all-databases > /mydata/backups/all.sql

mysql -uroot -p < /mydata/backups/all.sql 


注意:備份前要加鎖

--lock-all-tables 請求鎖定所有表之後再備份,對MyISAM,InnoDB,Aria做溫備

-single-transaction 能夠對InnoDB儲存引擎實現熱備


備份程式碼

-events 備份事件排程器程式碼

-routines         備份儲存過程和儲存函式

-triggers         備份觸發器

備份時滾動日誌:

--flush-logs            備份前、請求到鎖之後滾動日誌

複製時的同步位置標記

--master-data={0|1|2}

0表示不記錄,

1表示記錄為change master語句

2表示記錄為註釋的change master語句

使用mysqldump備份步驟

請求鎖:--lock-all-tables 或使用--single-transaction進行innodb熱備

滾動日誌:--flush-logs

選定要備份的庫 --databases

記錄二進位制檔案及位置 --master-date                                                                                                


恢復建議

關閉二進位制日誌,關閉其他使用者的寫操作

  應該用souce 恢復



即時點還原場景:

hellodb使用的InnoDB儲存引擎,在做過一次完備後,之後又有過資料的變動,變動後的資料還未來得及做備份,伺服器硬體故障崩潰。


處理過程:

新機器上重新安裝系統,部署mysql資料庫。先用之前的完備做恢復,再根據二進位制日誌進行即時點恢復,恢復系統崩潰時的資料庫狀態。


準備過程

service mysqld stop

vim /etc/my.cnf

log-bin=/mydata/binlog/log-bin

chown -R mysql.mysql /mydata/binlog/

service mysqld restart

sed -i 's/MyISAM/InnoDB/' hellodb.sql

mysql -uroot -p < hellodb.sql 

mysql

SHOW DATABASES;

SHOW TABLE STATUS FROM hellodb\G;


完全備份

mysqldump -uroot -p --databases hellodb --lock-all-tables --flush-logs --master-data=2 > /mydata/backups/hellodb.sql

grep "CHANGE MASTER" /mydata/backups/hellodb.sql   

-- CHANGE MASTER TO MASTER_LOG_FILE='log-bin.000003', MASTER_LOG_POS=107;


完全備份後新增一些資料

mysql

USE hellodb;

CREATE TABLE newtb(ID INT);

INSERT INTO newtb VALUES (1),(2),(3),(4),(5);

SELECT * FROM newtb;


匯出二進位制日誌檔案(完備後新增資料產生的日誌)

mysqlbinlog --start-position=107 /mydata/binlog/log-bin.000003 > /mydata/backups/binlog.sql

scp /mydata/backups/*.sql [email protected]:/mydata/backups


在一臺新的機器上恢復

service mysqld stop

vim /etc/my.cnf

log-bin=/mydata/binlog/log-bin

chown -R mysql.mysql /mydata/binlog/

service mysqld restart


mysql

SET SESSION sql_log_bin=0; (關閉二進位制日誌)

SOURCE /mydata/backups/hellodb.sql  

SOURCE /mydata/backups/binlog.sql;

SET SESSION sql_log_bin=1;