1. 程式人生 > >一. Mysql讀寫分離 :Linux上配置,通過binlog進行主從同步

一. Mysql讀寫分離 :Linux上配置,通過binlog進行主從同步

mysql主從複製,讀寫分離配置

  1.主資料庫:
  
   a.在主資料庫裡建立一個同步賬號
     #每個從資料庫會使用一個MySQL賬號來連線主資料庫,所以我們要在主資料庫裡建立一個賬號,並且該賬號要授予 REPLICATION SLAVE 許可權,你可以為每個從資料庫分別建立賬號,當然也可以用同一個!)
     #下面來建立一個賬號,賬號名:repl,密碼:123456,只允許192.168.1.的IP段登入,如下:
     CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY '123456';
     GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
     #如果開發防火牆,可能要配置下埠,如下:
     firewall-cmd --zone=public --add-port=3306/tcp --permanent
     firewall-cmd --reload
     
   b.配置主資料庫
    #需要關閉MySQL和編輯my.cnf或者my.ini檔案,在 [mysqld] 節點下新增或修改配置。
    vim my.cnf
    #新增或修改配置以下內容:
    log-bin=mysql-bin # 啟用二進位制日誌,日誌檔名以“mysql-bin”作為字首
    server-id=1 # 如果不配置server-id或者配置值為0,那麼主伺服器將拒絕所有從伺服器的連線。
    binlog-do-db=mstest # mstest是要同步的資料庫名稱
    innodb_flush_log_at_trx_commit=1 
    sync_binlog=1
    binlog-ignore-db=mysql # 要忽略的資料庫
    #重啟mysql
    mysql> show master status;
    #執行上面命令記錄好File和Position,後面要用
 
   2.從資料庫配置:
   
    a.vim my.cnf
      #新增或修改配置以下內容:
      server-id=2 # 如果有多個從伺服器,每個伺服器的server-id不能重複,跟IP一樣是唯一標識,如果你沒設定server-id或者設定為0,則從伺服器不會連線到主伺服器。
      replicate-do-db = mstest #在master端不指定binlog-do-db,在slave端用replication-do-db來過濾
      replicate-ignore-db = mysql #忽略的庫
      relay-log=mysqld-relay-bin
      
    b.配置連線主伺服器的資訊
      mysql> stop slave;
      mysql> CHANGE MASTER TO
      -> MASTER_HOST='192.168.1.233',
      -> MASTER_USER='repl',
      -> MASTER_PASSWORD='123456',
      -> MASTER_LOG_FILE='mysql-bin.000002', #配置主資料庫show master status的File
      -> MASTER_LOG_POS=313; #配置主資料庫show master status的Position
      mysql> start slave;
      
    c.檢視從伺服器狀態
    mysql> show slave status \G;
    如果slave_io_running和slave_sql_running都為yes,那麼表明可以成功同步了     
   
   3.測試資料同步
    測試,Navicat連線主伺服器 ,添加了表 
    然後再連線上 從伺服器mysql,發現也自己同步建立了該表即成功

    
備註:以上是以mysql5.5為例,而 MariaDB可能有點不同,
      那些server—id的配置需要在 /etc/my.cnf.d/server.cnf 或者目錄下有名為 Data的名為 my.ini 的文字檔案 增加相關配置;
    
navicat 連線虛擬機器mysql連不上問題:

1.登陸mysql
    #mysql -u root -p
2.修改mysql庫的user表,將host項,從localhost改為%。%這裡表示的是允許任意host訪問,如果只允許某一個ip訪問,
  則可改為相應的ip,比如可以將localhost改為192.168.1.123,這表示只允許區域網的192.168.1.123這個ip遠端訪問mysql。
  更改資料庫使用者許可權grant all privileges on portal.* to

[email protected] identified by 'root';
    mysql> use mysql; 
    mysql> grant all privileges on portal.* to [email protected] identified by 'root';
    mysql> update user set host = '%' where user = 'root'; 
    #若出現ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 不予理會,繼續即可
    mysql> flush privileges;