Mysql 的完全備份有2種方式
1 使用系統命令直接將Mysql資料拷貝進行備份
例如
/etc/init.d/mysqld stop
tar cvfz /var/lib/mysql/mydb_backup.tar.gz /tmp
/etc/init.d/mysqld start
此種方法必須要先關閉Mysql服務,這也是一大弊端,而且此備份出的資料不支援不同版本的Mysql進行恢複!
所以此法生產環境中很少用
2 使用mysqldump 進行備份
mysqldump 備份的原理是,將對資料庫中的內容修改所產生的sql 語句儲存指定位置;恢複時只要將該sql 語句檔案匯出交給新mysql 重新執行一次,實現恢複資料。
例如
mysqldump -u root -p 123 > /var/test/123.sql
如果需要備份mysql 中的所有資料庫,使用 -all-databases
mysqldump -u root -p --all-databases > /var/test/123.sql
恢複資料的命令如下:
mysql -u root -p 123 < /var/test/123.sql
mysql 的增量備份
增量備份是比完全備份作的頻率高的多的操作;
mysql 的增量備份使用的方法的是用過mysql 的二進位日誌來實現的;
mysql 的二進位日誌中儲存了對mysql 的所有操作sql 語句;
mysql 的二進位日誌功能預設是關閉著的,我們需要自己手動去開啟;
vim /etc/my.cnf 編輯添加
log-bin=noah(台頭) 如果不加台頭則預設為binlog;
重新啟動服務後就會在/var/lib/mysql 中發現binlog 二進位檔案;
二進位的記錄檔我們需要使用命令mysqlbinlog 來查看;
那麼,如何使用二進位檔案來恢複資料呢;
1 使用時間來恢複
例如
mysqlbinlog --start-date="2009-05-20 10:51:01" --stop-date="2009-05-20 11:52:12" /var/lib/mysql/binlog.000001 | mysql -uroot -p123456
將這2段時間之間對mysql 進行操作的sql 語句輸出給mysql 執行;這樣就恢複這段時間內的資料;
但是這裡的時間只精確到秒,那麼在同一秒內有許多sql 語句的話,就會出現問題了;因此,我們引入了更加精確的恢複的方法,如下;
2 使用位置號來恢複
例如
mysqlbinlog --start-position="457" --stop-position="1009" /var/lib/mysql/binlog.000001 | mysql -uroot -p123456
在mysql 二進位日誌中會設定一個唯一的log_pos;我們就利用這個唯一的position 進行恢複資料的操作;這種方法不會忽略掉任何的資料;