mysql數據庫備份之主從同步配置

主從同步意義?html

  • 主從同步使得數據能夠從一個數據庫服務器複製到其餘服務器上,在複製數據時,一個服務器充當主服務器(master),其他的服務器充當從服務器(slave)。由於複製是異步進行的,因此從服務器不須要一直鏈接着主服務器,從服務器甚至能夠經過撥號斷斷續續地鏈接主服務器。經過配置文件,能夠指定複製全部的數據庫,某個數據庫,甚至是某個數據庫上的某個表。mysql

機制
  • Mysql服務器之間的主從同步是基於二進制日誌機制,主服務器使用二進制日誌來記錄數據庫的變更狀況,從服務器經過讀取和執行該日誌文件來保持和主服務器的數據一致。sql

  • 在使用二進制日誌時,主服務器的全部操做都會被記錄下來,而後從服務器會接收到該日誌的一個副本。從服務器能夠指定執行該日誌中的哪一類事件(譬如只插入數據或者只更新數據),默認會執行日誌中的全部語句。docker

配置主從同步的基本步驟

有不少種配置主從同步的方法,能夠總結爲以下的步shell

  • 在主服務器上,必須開啓二進制日誌機制和配置一個獨立的ID 開啓方法數據庫

  • 在每個從服務器上,配置一個惟一的ID,建立一個用來專門複製主服務器數據的帳號ubuntu

  • 在開始複製進程前,在主服務器上記錄二進制文件的位置信息bash

  • 若是在開始複製以前,數據庫中已經有數據,就必須先建立一個數據快照(可使用mysqldump導出數據庫,或者直接複製數據文件)服務器

  • 配置從服務器要鏈接的主服務器的IP地址和登錄受權,二進制日誌文件名和位置異步

案例:將騰訊雲服務器上的mysql備份到本地服務器中。

   遠程騰訊雲服務mysql------------------------主

   本地服務器daocker容器中的mysql -------從

第一步:

   在本地服務器中的docker容器中安裝 mysql_docker鏡像(mysql_docker_5722.tar文件地址 提取碼:f9np)

   將鏡像文件下載到本地,而後經過工具上傳到本地服務器中(我使用的是如下工具進行上傳和下載直接拖拽便可完成)

使用xshell進入本地服務器中查看文件是否上傳到了home/ubuntu目錄下

   

第一步:

仍是在本地服務器中使用docker安裝鏡像,執行 docker load -i mysql_docker_5722.tar

檢查鏡像是否安裝成功。

 

第二步:

   在本地服務器中建立一個用於備份的虛擬環境

 

 第三步:

  在遠程騰訊雲服務器中的/home/ubuntu目錄中建立一個mysql_slave目錄,進入該目錄在建立一個data目錄

 

第四步:

   將遠程騰訊雲服務器中的mysql配置信息複製到上面建立的mysql_slave目錄中 執行命令:cp -r /etc/mysql/mysql.conf.d ./

 

第五步: 

   進入mysql.conf.d目錄中對mysqld.cnf文件進行編輯(注意,這裏我複製過來的全部配置至關於從服務器中的配置,由於後面我會將整個mysql_slave文件夾傳到我本地服務器中)

   修改內容以下:

 

  注意server-id 必定不能重複

第六步:

  接下來,咱們就將上述mysql_slave文件夾傳到我本地服務器中(經過下面的軟件將mysql_slave下載到電腦本地,而後在經過這個軟件上傳到本地的Linux系統)

 

 

 

第七步:  

  在本地Linux系統中建立docker容器 

docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/ubuntu/mysql_slave/data:/var/lib/mysql -v /home/ubuntu/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d  mysql:5.7.22

  

 

第八步:

  測試上面建立的容器查看原始數據庫中信息

  mysql -uroot -pmysql -h 127.0.0.1 --port=8306

 

第九步:

   備份主服務器原有數據到從服務器

  在遠程騰訊雲服務器中執行數據庫備份命令:備份主服務器原有數據到從服務器$ mysqldump -u用戶名 -p密碼 --all-databases --lock-all-tables > ~/master_db.sql

 

  • --all-databases :導出全部數據庫

  • --lock-all-tables :執行操做時鎖住全部表,防止操做時有數據修改

  • ~/master_db.sql :導出的備份數據(sql文件)位置,可本身指定

同時將主服務器中備份的master_db.sql文件上傳到本地Linux系統中

先從遠程騰訊雲服務器(主)下載到本地

在從本地上傳到Linux系統中(從)

 

第十步:  

  進入本地服務器(從)在docker容器中導入數據:mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql

 

執行完成後,主數據庫內容就備份到了從服務器中

 第十一步:

   登入遠程騰訊雲主服務器Ubuntu中的mysql,建立用於從服務器同步數據使用的賬號

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'Slave@mysql520';

  刷新權限

FLUSH PRIVILEGES;

  

 

 

第十二步 取主服務器的二進制日誌信息

 show variables like 'log_bin';

SHOW MASTER STATUS;
SHOW MASTER STATUS;

  

 

第十三步:

  在本地Linux系統中進入docker中的mysql,執行如下命令

change master to master_host='遠程服務器IP(主)', master_user='上面建立受權的用戶名', master_password='上面建立受權的密碼',master_log_file='對應上面File', master_log_pos=對應上面的Position;
  • master_host:主服務器Ubuntu的ip地址

  • master_log_file: 前面查詢到的主服務器日誌文件名

  • master_log_pos: 前面查詢到的主服務器日誌文件位置

 

第十四步:

  啓動slave服務器,並查看同步狀態

start slave;
show slave status \G

  

檢查狀態:show slave status \G

若是標記的地方兩個參數都是yes說明就啓動成功了。

 

 

 

 後面就能夠測試了,在遠程的服務器mysql中建立庫獲取操做表,再到本地查看是否也發生變化。只要數據庫內容保持一致,說明就配置成功了。

相關文章
相關標籤/搜索