mysql數據庫讀寫分離數據同步 我是用了兩個xp(一個主的,一個從的)的系統測試成功的,linux系統我也做測試了,沒有成功,不過我想我所遇到的問題是同一個問題,xp下的可以成功,linux下的應該也可以成功,稍候會測試,然後更新結果! PS:剛測試了下linux 可以同步成功,主服務器是xp,從服務器是centos,可以成功。 例: A機器 192.168.0.2 B機器 192.168.0.3 兩個機器可以ping通,互相訪問 先配置主服務端 首先配置一個同步帳號 Sql代碼 1 GRANT FILE ON *.* TO ‘backup’@'192.168.0.3' IDENTIFIED BY ‘1234’; 2 GRANT REPLICATION SLAVE ON *.* TO ‘backup’@'193.168.0.3' IDENTIFIED BY ‘1234’; 帳號名是backup,密碼1234,ip為從服務器的ip 這時候我們在服務端增加一個同步數據庫 Sql代碼 1 create database test 2 use test 3 create table mytest (username varchar(20),password varchar(20)) 打開my.ini 在[mysqld]輸入下面的內容 log-bin=c:\master.log//日志文件地址,在linux系統下,這個項就不要加了,我加了之後,不知道為什麼報錯了,mysqld啟動不起來,我給注釋就好了,也沒有影響其它的 binlog-do-db=test//要同步的數據庫, 這裡區別下主服務器同步數據庫的命令和客戶端的是不一樣的 主服務端的是binlog-do-db,從服務器用的是replicate-do-db #replicate-ignore-db = mysql 這個是禁止同步的數據庫 server_id=1 //這個數字不能和從服務器的id一樣 然後重啟下mysql 服務,可以輸入 Sql代碼 1 show master status 來查看相關的信息,這個命令比較重要,後面在配置從服務器的時候要用到 接來下是配置從服務器 跟上面的步驟一樣,先建立一個和主服務器上一模一樣的數據庫 然後是配置主服務器的一些信息,這個地方需要注意下,我在網上看的大多教程都是這樣的 Ini代碼 1 server-id=2 2 master-host=192.168.0.2 3 master-user=backup #同步用戶帳號 4 master-password=1234 5 master-port=3306 6 master-connect-retry=60 #預設重試間隔60秒 7 replicate-do-db=test #告訴slave只做backup數據庫的更新 把上面的這段代碼放到my.ini裡,但是我在試的時候,加了這段代碼之後,mysql的服務啟動不起來,看了下日志文件,發現提示:111121 21:11:56 [ERROR] wampmysqld: unknown variable 'master-host=192.168.0.2' 後來在網上找了下,在Mysql版本從5.1.7以後開始就不支持“master-host”類似的參數;所以,這時候需要使用這個樣的方法來進行配置 使用mysql工具 Sql代碼 1 mysql -uroot -p 2 3 change master to master_host='192.168.0.2', master_user='backup', master_password='1234', master_log_file='mysql-bin.000010', master_log_pos=16860; 這裡也特別需要注意下,我想我在linux下沒有配置成功,可能就是這個地方的原因,最後的兩項 master_log_file= master_log_pos= 這兩項的值,要在主服務端使用show master status 命令查看,查看的結果中 File就是master_log_file的值,Position就是master_log_pos的值 我當時就是這兩個配置錯了,導致同步失敗,這兩個很重要。 然後打開my.ini文件在mysqld節點,加入 Ini代碼 1 replicate-ignore-db = mysql //禁止同步的數據庫 2 replicate-do-db = test // 要同步的數據庫 3 replicate-ignore-db = information_schema//禁止同步的數據庫 禁止同步的數據庫不是必須的,但是要同步的數據庫是必須的 配置好之後,重啟下mysql服務 這時候,客戶端就配置完了 我們在主服務端,使用insert into語句,插入兩個記錄 然後在從服務端select 查詢下看看結果吧, 最終在mysql 命令行工具中可以使用show slave status命令來查看相關的狀態 Slave_IO_State: Waiting for master to send event 當你使用show slave status查出來的第一行,狀態是上面的那種狀態,那麼就說明成功了,其它的狀態貌似是無法同步