天天看點

mysql 5.5 主從_【轉】MySQL 5.5資料庫的主從複制

MySQL 5.5資料庫的主從複制

今天參照網上的資料進行mysql資料庫的主從複制研究,本來網上的資料已經很詳細,但是我在實踐中還是遇到了很多問題,下面就根據網上的資料以及我遇到的問題進行一個總結。

系統環境:Ubuntu12.04

軟體版本:mysql-server-5.5

主機IP:192.168.0.200

從機IP:192.168.0.201

操作:

1、主機操作:

1)、編輯mysql配置檔案my.cnf

[mysqld]

server-id=1

log-bin=mysql-bin

注:網上還有一些其他的配置,但是為了偷懶隻配置了這兩個重要的,當然這兩個也是必須的。

2)、用root登陸mysql執行下面的代碼

//建立一個使用者dean密碼123456,并賦予replication slave權限:

mysql>grant replication slave on *.* to 'dean'@'192.189.0.201' identified by '123456';  www.2cto.com

//讓權限立即生效

mysql>flush privileges;

//查詢二進制檔案的檔案名和狀态(後面要用)

mysql>show master status \G

File:mysql-bin.000006

Position:107

Binlog_Do_DB:

Binlog_Ignore_DB:

2、從機操作:

1)、編輯myslq配置檔案my.cnf:

[mysqld]

server-id=2   //隻要和主機不同即可

2)、登陸mysql,輸入以下指令:

a)、 mysql>change master to master_host='192.168.0.200',master_user='dean', \

master_password='123456',master_log_file='mysql-bin.000006',

master_log_pos=107;

b)、mysql>start slave;

c)、 mysql>show slave status \G

如果出現:Slave_IO_Running:Yes

Slave_SQL_Running:Yes

那麼說明沒有問題了,就可以在主機上面建庫建表寫測試資料,然後在從機上查詢看有沒有資料。一般是沒有問題了。

但是如果是出現:

Slave_IO_Running:Connecting

Slave_SQL_Running:Yes

那麼就表示主從服務有問題了,我也就是遇到這個問題下面是我的解決方案:

1)、在從機上直接遠端登陸主機mysql伺服器:

#mysql -udean -h 192.168.0.200 -p123456

如果被拒絕那麼就需要檢查主機的使用者dean的權限、防火牆等設定是否正确。(我的被拒絕了)

2)、檢查權限。

用root登入mysql 并選擇mysql庫

mysql>use mysql;

查詢使用者的通路  www.2cto.com

mysql>select host,user from user;

從查詢資料看沒有問題,有dean使用者 接受192.168.0.201的通路

3)、防火牆設定

将端口為3306 的通路設為允許

#sudo ufw allow 3306

将ip為192.168.0 .201的通路設為允許

#sudo ufw allow 192.168.0.201

檢視狀态

# sudo ufw status

設定完後還是從機還是不能直接遠端通路主機

4)、檢視端口監聽

#netstat -anpy|grep 3306

發現目前的端口3306隻在127.0.0.1監聽,找到問題所在。修改mysql配置檔案my.cnf将裡面的bind-address=127.0.0.1注釋調,重新察看端口監聽發現監聽是0.0.0.0:3306,好了測試一下果真可以進行遠端通路。

重新進行主機從機的操作,但是發現在從機中不能進行第2步a操作,執行下面指令

mysql>stop slave;//關閉slave

mysql>reset slave;//重置slave

繼續執行a操作并往下繼續操作。

最終完成了Mysql 資料庫的主從複制。

另:根據網上資料顯示,如果主機在搭建主從複制前已經有資料需要先在主機上加鎖:

mysql>flush tables with read lock;

然後打包資料目錄并拷貝到從機上,然後解鎖。(解鎖文法見如下說明)

今天在解決資料庫同步異常的時候用到了flush tables with read lock 這個指令,于是順便就學習了下鎖表的相關知識。

1.FLUSH TABLES WITH READ LOCK

這個指令是全局讀鎖定,執行了指令之後所有庫所有表都被鎖定隻讀。一般都是用在資料庫聯機備份,這個時候資料庫的寫操作将被阻塞,讀操作順利進行。

解鎖的語句也是unlock tables。

2.LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}

這個指令是表級别的鎖定,可以定制鎖定某一個表。例如: lock  tables test read; 不影響其他表的寫操作。

解鎖語句也是unlock tables。

這兩個語句在執行的時候都需要注意個特點,就是 隐式送出的語句。在退出mysql終端的時候都會隐式的執行unlock tables。也就是如果要讓表鎖定生效就必須一直保持對話。

P.S.  MYSQL的read lock和wirte lock

read-lock:  允許其他并發的讀請求,但阻塞寫請求,即可以同時讀,但不允許任何寫。也叫共享鎖

write-lock: 不允許其他并發的讀和寫請求,是排他的(exclusive)。也叫獨占鎖

作者 DeanJoson

posted on 2013-12-06 15:35 回憶之城 閱讀(66) 評論(0)  編輯 收藏 引用 所屬分類: 資料庫