近日,由於實際工作要求,需要實現windows下的mysql和Redhat環境下的mysql實現雙擊熱備功能,現把相關的配置方法總結如下。
Window 軟件環境信息
Windows Server 2008
Mysql version 5.1.5
IP:192.168.0.200
Linux mysql 服務信息
Linux 5.0
Mysql version 5.0.3
IP:192.168.0.210
以下服務器Windows Server 2008 上的mysql簡稱W服務器,linux服務器上的mysql簡稱L服務器
前言:
配置之前必須確保兩個數據庫的表結構及數據完全一樣,數據庫的名稱建議一樣。這里將W服務器的數據庫同步到L服務器上,這里是這樣實現的,W服務器上通過phpMyAdmin將數據庫導出MyDBName.sql文件,然后壓縮成標准的zip格式文件,拷貝到L服務器上,在L服務器上通過phpMyAdmin先創建數據庫MyDBName,之后將MyDBName.zip導入到的MyDBName數據庫中即可。
這里注意兩點:
1) 這里數據庫名稱用MyDBName有大小寫主要是為了介紹的方便,建議數據庫名稱最好都用小寫;
2) 為了保證W服務器上導出的數據庫的sql文件能在L服務器上正常執行,建議用phpMyAdmin工具進行數據導出,因為linux環境下phpMyAdmin工具非常好用,這樣可以避免因工具不懂而導致的不必要的問題。
一、主從熱備
主數據庫服務器:W服務器
備份服務器:L服務器
1.1 主服務器配置(W服務器上myql服務的配置)
先配置W服務器上的mysql.ini信息,主要是在配置文件里[mysqld] 節點下添加如下三行代碼
log-bin= #二進制日志路徑很重要,如果沒有logs文件夾可以自己建立,默認在mysql-bin目錄下,也可自己指定目錄
server-id=1 #主服務器ID,唯一性
binlog-do-db=MyDBName #需同步的數據庫,如果沒有本行,即表示同步所有的數據庫
上面三行代碼有時候在配置文件里面存在,只需把代碼前面的“#”刪除即可,添加完成上面三行代碼,需要重啟mysql服務.
接下來在W的mysql服務器上為L的mysql服務器添加一個專用的數據同步的用戶帳號(repl),然后授權
grant replication slave on *.* to 'repl'@'192.168.0.210' identified by '123456';
之后通過命令myql –h192.168.0.200 –uroot –psa進入數據庫,查看master狀態
Mysql>show master status;
可看到這里有兩個狀態變量,它們十分重要
mysql > SHOW MASTER STATUS;
+--------------------+------------+---------------------+-------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+------------+---------------------+------------------------+
| mysql-bin.003 | 73 | MyDBName| mysql |
+--------------------+------------+---------------------+-------------------------+
注意 File 是 mysql-bin.003 而 position 是 73
這個文件是對MyDBName 這個數據庫的二進制日志記錄,記錄數據變化的當前記錄條數是 73 ,對備份服務器非常重要,需要記住,后面要用到。
1.2 備份服務器配置(L服務器上的myql服務的配置)
在L服務器上打開mysql.cnf
在[mysqld]節點下添加如下內容
server-id=2
master-host=192.168.0.200 #主服務器ip
master-user=repl #主服務器分配的用戶名
master-password=123456 #主服務器分配的用戶名對應的密碼
master-port=3306 #主服務器mysql端口,默認3306
master-connect-retry=10 #重復連接的次數
這里這樣配置有時候可以,有時候會導致mysql服務無法啟動,建議最好采用下面這種方式
在[mysqld]節點下添加如下內容
server-id=2
修改完成后,需要重啟mysql服務。
然后通過命令行登錄msyql(mysql –hlocalhost –uroot -ppwd)
Mysql>slave stop; #先停止slave服務
然后執行
Mysql>change master to
>master_host='192.168.0.200',
>master_user='repl',
>master_password='123456',
>master_log_file=' mysql-bin.003' , #上面主服務器查詢的值,有用吧
>master_log_pos=73; #上面主服務器查詢的值有用吧
正常執行之后,啟動slave服務即可
Mysql>slave start;
之后查看slave狀態
Mysql>show slave status; 能查看到信息,表示備份服務器設置成功。
接下來要做的工作就是測試主服務器數據庫中表的字段信息修改后,備份服務器是不是會正常會被修改。
二、互為主從熱備
在第一節主從熱備配置中可以實現W數據庫服務器表中字段信息修改直接同步到L服務器的數據庫中,實現主從熱備。
在主從熱備的基礎上配置,互為主從熱備,步驟差不多。
2.1主服務器配置:L服務器上的myql服務的配置
在L數據庫服務器上運行mysql命令
Mysql>show master status;
顯示的信息為empty,沒有記錄,需要在配置文件mysql.cnf中的[mysqld]添加如下幾行信息即可
log-bin= #可為空,也可寫mysql-bin
binlog-do-db=MyDBName #待同步的數據庫名稱
binlog-ignore-db=mysql #忽略mysql數據庫的同步
重啟mysql服務
命令行執行Mysql>show master status; 可以看到結果
mysql > SHOW MASTER STATUS;
+--------------------+------------+---------------------+-------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+------------+---------------------+------------------------+
| mysql-bin.001 | 106 | MyDBName| mysql |
+--------------------+------------+---------------------+-------------------------+
表示設置成功,同時執行命令mysql>show slave status;
可以看到很多信息,表明設置成功。
2.2備份服務器的配置:W服務器上mysql服務的配置
這里配置很簡單,只需要執行mysql幾個命令即可
通過命令行登錄msyql(mysql –hlocalhost –uroot -ppwd)
Mysql>slave stop; #先停止slave服務
然后執行
Mysql>change master to
>master_host='192.168.0.210', #L服務器的IP
>master_user='repl', #L服務器為W服務器創建的同步賬戶
>master_password='123456', #L服務器為W服務器創建的同步賬戶的密碼
>master_log_file=' mysql-bin.001' , #上面主服務器查詢的值
>master_log_pos=106; #上面主服務器查詢的值
正常執行之后,啟動slave服務即可
Mysql>slave start;
至此,mysql主從互為熱備配置完成。類似的方法在網上搜索會有很多,以上內容是本人在實際工作中的總結,經過實踐檢驗。
在實際的配置過程中,可能會存在其他的問題,一般都能很快解決,本次總結希望以后能夠比較快速的處理類似的問題。
