mysql讀寫分離實戰二-windows 上mysql主從資料庫搭建及問題總結

flzhang發表於2017-07-07

根據前篇web專案的搭建後,需要搭建主從資料庫,這裡在windows伺服器上搭建了主從結構的mysql,這裡在記錄下在本機模擬搭建過程
在windows上安裝和linux還是有些不同,不注意就會耽誤不少時間
一 下載安裝包和安裝
https://dev.mysql.com/downloads/file/?id=469273 下載的安裝包是Archive
需要手工安裝且建立服務和初始化data目錄,具體可以在網上搜尋有很多具體安裝方法。
二 建立從節點
1把主伺服器的安裝目錄C:\Program Files\MySQL\MySQL Server 5.7所有檔案都copy到另一個目錄D:\anzhuang\MySQL\mysqlSlave\MySQL Server 5.7。
2修改複製過來的my.ini檔案引數
包括埠和路徑
port = 3307
basedir = "D:\anzhuang\MySQL\mysqlSlave\MySQL Server 5.7"
datadir = "D:\anzhuang\MySQL\mysqlSlave\MySQL Server 5.7\data"
3建立mysql從伺服器服務
mysqld install MySQLM --defaults-file="D:\anzhuang\MySQL\mysqlSlave\MySQL Server 5.7\my.ini"
4修改對應登錄檔裡服務啟動項的內容
登錄檔HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MySQL57\ImagePath裡使用的路徑改成
"D:\anzhuang\MySQL\mysqlSlave\MySQL Server 5.7\bin\mysqld" --defaults-file=D:\anzhuang\MySQL\mysqlSlave\MySQL Server 5.7\my.ini MySQLS
mysqld_multi.pl --defaults-extra-file=D:\anzhuang\MySQL\mysqlSlave\MySQL Server 5.7\my.ini start 3307
以便啟動mysql時可以找到對應my.ini檔案啟動
三 主節點配置
1修改主節點和從節點上my.ini
[mysqld]
server-id = 1  
binlog-do-db=test #要同步的資料庫
#binlog-ignore-db=mysql   #不同步的資料庫,如果指定了binlog-do-db這裡應該可以不用指定的
log-bin=mysql-bin #要生成的二進位制日記檔名稱

修改從配置檔案:
[mysqld]
server-id = 2
log-bin    = mysql-bin
replicate-do-db=test

2上建立使用者並授權
create user 'repla'@'127.0.0.1' identified by 'test';
GRANT REPLICATION SLAVE ON *.* TO 'repla'@'127.0.0.1';
3建立test資料庫

4 物理備份test目錄到從庫
把datadir指定的目錄的data目錄copy到從目錄
5 show master status
檢視file和position欄位對應的引數;
+------------------+----------+--------------+------------------+--------------
----+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid
Set |
+------------------+----------+--------------+------------------+--------------
----+
| mysql-bin.000006 |     1847 | test         |                  |
    |
+------------------+----------+--------------+------------------+--------------


四從節點配置
1啟動從節點mysql服務
mysql -uroot -P3307 -p123456 如果埠不同,必須制定埠,才能在一臺機器上同時啟動多例項

2 接收主節點傳送日誌
change master to master_host='127.0.0.1',master_port=3306,master_user='repla',master_password='test',master_log_file='mysql-bin.000006',master_log_pos=1847;

3啟動從資料庫複製功能
start slave

最後在主庫插入資料後,從庫就能看到主庫的資料了。

問題總結
1這裡的my.ini檔案在登錄檔裡有指定,無論是否使用命令指示使用自己命令的ini,系統都會根據登錄檔裡的my.ini檔案位置去讀取並啟動db。
比如用命令C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql --defaults-file="D:\anzhuang\MySQL\my.ini" -uroot -p
想使用自己定義的my.ini.但登錄檔HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MySQL57\ImagePath裡使用的路徑不是
這個路徑時,還會按照登錄檔的路徑讀取檔案。
如果在windows上安裝,要正確識別my.ini位置,具體可根據服務選擇或登錄檔資訊判斷my.ini位置

2 備份時可採用物理備份和邏輯備份,如果是物理備份注意把主庫的data目錄下的全部檔案複製到slave
這個data目錄一定是datadir引數中指定的目錄,這點可能會採用軟體安裝目錄下的data目錄而不是資料目錄
3 採用物理備份時很可能把auto.cnf檔案也複製到slave,造成主備之間的UUID不一致,這裡的解決辦法是在slave
重新命名auto.cnf,然後重啟備庫,重新生成新的UUID
可以參考網址http://www.linuxidc.com/Linux/2015-02/113564.htm
4 在slave上需要驗證主從是否開始傳送日誌方法
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 127.0.0.1
                  Master_User: repla
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000011
          Read_Master_Log_Pos: 1684
               Relay_Log_File: SDSC-WIN7-ZHANGLU-relay-bin.000002
                Relay_Log_Pos: 1595
        Relay_Master_Log_File: mysql-bin.000011
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: test
    ......
 Slave_IO_Running: Yes Slave_SQL_Running: Yes都是Yes 就對了。
 可能出現問題是要多次stop slave後多次執行change master to命令。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/750077/viewspace-2141702/,如需轉載,請註明出處,否則將追究法律責任。

相關文章