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;