一、系統環境描述:
1、兩台數據庫服務器,A和B;
2、當前A正在使用,將作為主服務器,B為准備用來做備用數據庫服務器;
3、要進行熱備份的數據庫中含有類型為MyISAM和InnoDB的數據表;
二、操作過程說明:
1、首先要保證A、B的初始數據是完全同步的。因此,需要將A中的數據完整的復制到B中;
由於多個服務器都在連接A,並實時的修改A中的數據,所以需要斷開所有的會修改數據庫數據的程序,或者采取鎖表的方法(但這種操作可能會影響其他服務的正常運行)。然後使用mysqldump程序將A中的數據備份為腳本文件。
方法:打開命令行窗口,輸入mysqldump -uusername -ppassword --opt databasename > sqlstoragepath,其中,username為mysql的用戶名,password為mysql的密碼,databasename為要進行熱備份的數據庫的名稱,sqlstoragepath為備份腳本的存放位置(c:\backup.sql)。
2、在A中添加備份使用的授權賬戶;
方法:通過命令行的方式登錄到mysql,登錄成功後,會出現“mysql>”的符號。輸入:grant replication slave on *.* to 'username'@'slavedbIP' identified by 'password';(分號不能省略)。其中username和password為備份服務器在進行熱備份時使用的用戶名和密碼;slaveIP為備份服務器的IP地址,標志該帳號只能在該IP地址上使用。
3、停止A服務器的mysql服務;
4、打開A服務器mysql安裝目錄下data目錄,刪除除文件夾之外的所有日志文件。然後打開databasename目錄,刪除其中的所有文件;
5、打開A服務器mysql安裝目錄,修改my.ini文件,在[mysqld]段中加入以下配置信息,然後保存:
#主服務器的服務器ID
server-id=1
#開啟主服務器的二進制日志功能
log-bin=binary_log
#要忽略的數據庫,即不需要進行熱備份的數據庫
binlog-ignore-db=mysql,test
#要進行熱備份的數據庫
binlog-do-db=stv
6、打開B服務器,並使用mysqladmin程序創建一個名為databasename的空數據庫;
方法:打開命令行窗口,輸入mysqladmin create databasename
7、停止B服務器的mysql服務;
8、打開B服務器mysql安裝目錄下data目錄,刪除除文件夾之外的所有日志文件。然後打開databasename目錄,刪除其中的所有文件;
9、打開B服務器mysql安裝目錄,修改my.ini文件,在[mysqld]段中加入以下配置信息,然後保存:
#從服務器的服務器ID
server-id=2
#主服務器A的IP地址
master-host=10.20.1.21
#主服務器mysql使用的端口
master-port=3306
#備份帳號的用戶名,即在步驟2中添加的授權帳號的用戶名
master-user=username
#備份帳號的密碼,即在步驟2中添加的授權帳號的密碼
master-password=slavedb
#要進行熱備份的數據庫
replicate-do-db=stv
#當和主服務器斷開連接時嘗試連接的時間間隔
master-connect-retry=60
10、啟動A服務器的mysql服務;
11、啟動B服務器的mysql服務;
12、檢查A服務器的狀態;
方法:mysql>showprocesslist;
mysql>show master status;
13、檢查B服務器的狀態;
方法:mysql>show slave status\G;
顯示列表中必須存在: Slave_IO_Running: Yes
Slave_SQL_Running: Yes
14、打開A服務器,使用mysql命令,將之前備份出來的數據腳本重新導入數據庫中;
方法:打開命令行窗口,輸入: mysql -uusername -ppassword databaseName < backup.sql
15、導入數據成功後,檢查B服務器是否同步導入數據;
16、在A中進行數據的添加、修改、刪除,檢查B服務器是否有相應的變化;
17、恢復其他服務;
至此,MySQL數據庫的熱備份操作全部完成。
說明,如果要備份的數據庫中的表類型全部為MyISAM,則可以直接拷貝A服務器的data目錄下要備份的數據庫目錄到B服務器的對應目錄下。
ps :原文摘自 http://mazd1002.blog.163.com/blog/static/66574965201141383621934