2011-08-16 87 views
4

我正在嘗試爲大小爲80gbs的數據庫設置複製。從所有的文件我看了好像當你做inital的mysqldump的數據獲取到從你必須做一個全球性的無鎖定設置MySql主從複製?

FLUSH TABLES WITH READ LOCK 

然後記錄轉儲後的二進制日誌位置。無論如何設置複製而不鎖定數據庫?或者至少做表級鎖定?

+0

InnoDB或MyISAM? –

回答

0

如果不鎖定所有表,您將無法創建一致的轉儲;鎖定單個表格是沒有意義的。

如果您的數據庫只包含MyISAM表,您應該能夠簡單地將數據塊複製到從站。 InnoDB有很多方法可以實現,但iirc這些工具不是免費的;嘗試搜索例如爲innodb hotcopy。

+0

[XtraBackup](http://www.percona.com/docs/wiki/percona-xtrabackup:start)是InnoDB Hot Backup的免費替代品。 –

-1

對於MyISAM表,你可以使用mysqldump

mysqldump --single-transaction --master-data DATABASE_NAME 

這就要求數據庫一致的轉儲在很短的鎖,但會給你,你可以從設置正確的運行SQL文件複製位置。有關更多信息,請參閱the manual

如果你使用的是InnoDB,XtraBackup是一個免費的工具,它應該可以完成這項工作。這blog post似乎提供了一個完整的過程很好的概述。

無論哪種情況,您需要需要鎖確保一致的轉儲。但鎖的持續時間很短,不應該影響性能。

7

如果您僅使用InnoDB表,則可以使用Percona XtraBackup。如果你有MyISAM表,你至少需要一個簡單的鎖。如果您只有 MyISAM表,而您必須避免任何停機時間,然後骯髒的技巧是必需的。細節因情況而異,通常在決策樹中有太多微妙之處和分歧,在這樣的論壇上討論。