MySql 主從複製

⒈主從複製的使用場景mysql

  1.數據自動備份,實現數據庫拓展,增強數據的安全性。sql

  2.提高數據庫的負載性能,讀寫分離,主寫數據,從讀數據,減輕主的壓力。docker

⒉實現原理數據庫

  MySQL之間數據複製的基礎是二進制日誌文件(binary log file)。一臺MySQL數據庫一旦啓用二進制日誌後,其做爲master,它的數據庫中全部操做都會以「事件」的方式記錄在二進制日誌中,其餘數據庫做爲slave經過一個I/O線程與主服務器保持通訊,並監控master的二進制日誌文件的變化,若是發現master二進制日誌文件發生變化,則會把變化複製到本身的中繼日誌中,而後slave的一個SQL線程會把相關的「事件」執行到本身的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了主從複製。vim

⒊MySql主從配置的前提條件安全

  一、服務器版本一致服務器

  二、主服務器日誌必須二進制ide

  三、主服務器-從服務器庫的數據要求一致性能

  四、從數據庫不能作寫操做spa

⒋實現流程

  1.配置主服務器MySql

    ①修改MySql my.cnf文件,添加如下內容

[mysqld]

server-id=1  #設置server-id
log-bin=mysql-bin  #開啓二進制日誌並定義binlog的前綴名
    *我使用的是Docker鏡像,執行如下操做
docker cp 6e246d8fdb51:/etc/mysql/my.cnf /fanqi/mysql/conf
docker cp my.cnf 6e246d8fdb51:/etc/mysql/my.cnf

    *Linux的MySql,執行如下操做

vim /etc/mysql/my.cnf

    ②在MySql數據庫中,創建用於同步數據庫的帳號

create user 'repl'@'%' identified with 'mysql_native_password' by '123456';  -- 建立用戶
GRANT replication slave ON *.* TO 'repl'@'%';  -- 分配權限
GRANT ALL privileges ON *.* TO 'repl'@'%';  -- 分配權限
flush privileges;	-- 刷新MySQL的系統權限相關表

    ③重啓MySql服務

    *我使用的是Docker鏡像,執行如下操做

docker restart 6e246d8fdb51

    *Linux的MySql,執行如下操做

systemctl restart mysqld.service

    ④查看MySql主服務器日誌

show master status
show master status\G(都可)

*記錄下File和Position的值,一下子在從服務器上配置時須要使用。 

 

    ⑤爲了同步前數據一致,鎖定表

1 flush tables with read lock;

   *完成主從配置後,應儘快解除表的鎖定

1 unlock tables;

 

  2.配置從服務器MySql

    ①修改MySql my.cnf文件,添加如下內容

  [mysqld]

  server-id=2
  log-bin=mysql-bin

    ②重啓MySql服務

    ③執行如下命令

1 stop slave;
2 change master to master_host='192.168.204.128', master_user='repl', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=1171;
3 start slave;
4 show slave status;

  輸入命令:show slave status後若是slave_io_running和slave_sql_running都爲yes,那麼代表能夠成功同步了 

  若是slave_io_running爲no,那麼多是如下緣由:

  (1)、你的主從MySql是拷貝的,安裝的UUID是同樣的。  

docker cp 6e246d8fdb51:/var/lib/mysql/auto.cnf /fanqi/mysql/conf 
docker cp auto.cnf 6e246d8fdb51:/var/lib/mysql/auto.cnf

  (2)、防火牆攔截

systemctl  stop firewalld

  (3)、沒有關閉SeLinux,臨時關閉SeLinux看是否可行

setenforce 0

  (4)、配置信息不正確,檢查Sql中的用戶名密碼、master_log_file等配置信息是否正確。

 

master開啓二進制日誌後默認記錄全部庫全部表的操做,能夠經過配置來指定只記錄指定的數據庫甚至指定的表的操做,具體在mysql配置文件的[mysqld]可添加修改以下選項:

複製代碼
# 不一樣步哪些數據庫  
binlog-ignore-db = mysql  
binlog-ignore-db = test  
binlog-ignore-db = information_schema  
  
# 只同步哪些數據庫,除此以外,其餘不一樣步  
binlog-do-db = game  
複製代碼
相關文章
相關標籤/搜索