在建立主從關系時,如果主上有舊數據,需要將舊數據拷貝到每一個從上。下面介紹幾種不同的拷貝方式。
方法一:使用mysqldump工具創建一個你想要復制的所有數據庫的一個dump。這是推薦使用的方法,特別是如果表的存儲引擎都是innodb。
具體操作方法:
- 找到mysqldump(跟mysql啟動程序同路徑)把主上的數據制作快照
./mysqldump -uroot -pabc -h127.0.0.1 --all-databases --master-data > dbdump.db
注意:
如果不使用—master-data參數,需要在一個獨立的客戶端會話里
執行flush all tables with read lock,以保證制作數據鏡像的時候沒有新的數據寫入.
如果不想復制所有的數據庫或者想忽略某個表,不要使用—all-databases, 分別使用下面2個參數:—database your_db_name, —ignore-table,例如,我想復制主上janey數據下除里表ta,tb以外的表命令:
./mysqldump -uroot -pabc -h127.0.0.1 --databases janey --ignore-table janey.ta --ignore-table janey.tb --master-data > dbdump.db
- 然后把生成的dbdump.db文件通過scp或者其他方式拷貝到從上
- 在從上恢復數據:
./mysql -uroot -pabc -h127.0.0.1 < dbdump.db
方法二:Creating a Data Snapshot Using Raw Data Files(自己還沒搞懂,todo)
如果你的數據庫都是存在二進制可移植文件中,你可以把這些二進制文件拷貝到每一個從。這比使用mysqldump效率更高。然后在從上import這些二進制文件,之所以這種方式這種情況下效率高是因為跳過了在遇到insert語句被回放時更新索引。對於存儲引擎是innodb不推薦這種方式。