mysql backup & recovery
備份數據庫非常重要,這樣您就可以恢復數據,並在發生問題時重新啟動並運行,例如系統崩潰,硬件故障或用戶錯誤地刪除數據。
在升級MySQL安裝之前,備份也是必不可少的保護措施,它們可用於將MySQL安裝轉移到另一個系統或設置復制從屬服務器。
備份和還原的類型和方法有多種,可參考官方文檔:https://dev.mysql.com/doc/mysql-backup-excerpt/8.0/en/backup-and-recovery.html
具體實用操作命令轉自:https://www.cnblogs.com/Cherie/p/3309456.html
一、備份常用操作基本命令
1、備份命令mysqldump格式
格式:mysqldump -h主機名 -P端口 -u用戶名 -p密碼 –database 數據庫名 > 文件名.sql
2、備份MySQL數據庫為帶刪除表的格式
備份MySQL數據庫為帶刪除表的格式,能夠讓該備份覆蓋已有數據庫而不需要手動刪除原有數據庫。
mysqldump --add-drop-table -uusername -ppassword -database databasename > backupfile.sql
3、直接將MySQL數據庫壓縮備份
mysqldump -hhostname -uusername -ppassword -database databasename | gzip > backupfile.sql.gz
4、備份MySQL數據庫某個(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
5、同時備份多個MySQL數據庫
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql僅僅備6、僅備份份數據庫結構
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
7、備份服務器上所有數據庫
mysqldump –all-databases > allbackupfile.sql
8、還原MySQL數據庫的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
9、還原壓縮的MySQL數據庫
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
10、將數據庫轉移到新服務器
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
11、--master-data 和--single-transaction
在mysqldump中使用--master-data=2,會記錄binlog文件和position的信息 。--single-transaction會將隔離級別設置成repeatable-commited
12、導入數據庫
常用source命令,用use進入到某個數據庫,mysql>source d:\test.sql,後面的參數為腳本文件。
13、查看binlog日誌
查看binlog日誌可用用命令 mysqlbinlog binlog日誌名稱|more
14、general_log
General_log記錄數據庫的任何操作,查看general_log 的狀態和位置可以用命令show variables like "general_log%" ,開啟general_log可以用命令set global general_log=on
二、增量備份
小量的數據庫可以每天進行完整備份,因為這也用不了多少時間,但當數據庫很大時,就不太可能每天進行一次完整備份了,這時候就可以使用增量備份。增量備份的原理就是使用了mysql的binlog誌。
1、首先做一次完整備份:
mysqldump -h10.6.208.183 -utest2 -p123 -P3310 --single-transaction --master-data=2 test>test.sql這時候就會得到一個全備文件test.sql
在sql文件中我們會看到:
-- CHANGE MASTER TO MASTER_LOG_FILE=‘bin-log.000002‘, MASTER_LOG_POS=107;是指備份後所有的更改將會保存到bin-log.000002二進制文件中。
2、在test庫的t_student表中增加兩條記錄,然後執行flush logs命令。這時將會產生一個新的二進制日誌文件bin-log.000003,bin-log.000002則保存了全備過後的所有更改,既增加記錄的操作也保存在了bin-log.00002中。
3、再在test庫中的a表中增加兩條記錄,然後誤刪除t_student表和a表。a中增加記錄的操作和刪除表a和t_student的操作都記錄在bin-log.000003中。
三、恢復
1、首先導入全備數據
mysql -h10.6.208.183 -utest2 -p123 -P3310 < test.sql,也可以直接在mysql命令行下面用source導入
2、恢復bin-log.000002
mysqlbinlog bin-log.000002 |mysql -h10.6.208.183 -utest2 -p123 -P3310
3、恢復部分 bin-log.000003
在general_log中找到誤刪除的時間點,然後更加對應的時間點到bin-log.000003中找到相應的position點,需要恢復到誤刪除的前面一個position點。
可以用如下參數來控制binlog的區間
--start-position 開始點 --stop-position 結束點
--start-date 開始時間 --stop-date 結束時間
找到恢復點後,既可以開始恢復。
mysqlbinlog mysql-bin.000003 --stop-position=208 |mysql -h10.6.208.183 -utest2 -p123 -P3310
mysql backup & recovery