在建立主從關係時,如果主上有舊資料,需要將舊資料拷貝到每一個從上。下面介紹幾種不同的拷貝方式。
方法一:使用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不推薦這種方式。