在大多數業務場景下,DBA做主備複製的搭建的時候,主庫都已經有數據。那麼,在主庫有數據的情況下,如何進行主備複製?
mysql提供瞭如下幾種方案:
- 冷備份
- 熱備份
- 使用mysqldump
- 使用快照或備份
- 使用percona Xtrabackup開源熱備份工具
這裏詳細講解下mysqldump
方式,其他備份方式,簡單講解下。
一、冷備份
冷備份基本操作很是粗暴,先關閉數據庫,然後將數據複製到備庫,再重啓主庫,這時主庫會重新生成binlog日誌文件,然後再備庫執行 change master to...
指向新生成的binlog文件的起始處,再接着執行start slave;
進行主備複製。
這種方式缺點很明顯,需要停數據庫。
二、熱備份
針對於使用MyISAM的存儲引擎的表。這裏不做描述
三、使用mysqldump
只包含InnoDB的表,那麼可以使用mysqldump
的方式。
一般使用命令:
mysqldump --single-transation --all-databases --master-data=1 > dump.sql
這裏對上面的mysqldump命令做一下解釋:
-
--single-transation
代表是開始一個事務 -
--all-databases
代表dump所有數據庫 -
--master-data
有兩種值,爲1時,將會把當前執行事務時的binlog文件和偏移量以change master..
命令輸出到dump的數據文件中;設置爲2時,會將此命令註釋掉。
所以,當主庫有數據時,執行上面的mysqldump --single-transation --all-databases --master-data=1 > dump.sql
指令將數據導入至dump.sql,再將dump.sql文件導出至備庫的服務器。在備庫執行dump.sql導入數據,導入完成後,再執行start slave;
進行主備複製。就可以從導出數據dump.sql數據的那一刻開始繼續複製主庫的數據了。
五、使用快照或備份
只要知道備份的時間點,和快照時刻對應的二進制文件和偏移量就可以,在出現問題時,根據快照進行回滾。並根據二進制文件和偏移量進行主備複製。
六、使用percona Ctrabackup開源熱備份工具
這裏不做描述
本文是作者根據日常業務場景,寫出的一些解決問題或學習實驗的歷程。如有錯誤的地方,還請指出,相互學習,共同進步。謝謝!