1. 程式人生 > >mysql資料庫備份之主從同步配置

mysql資料庫備份之主從同步配置

主從同步意義?

  • 主從同步使得資料可以從一個數據庫伺服器複製到其他伺服器上,在複製資料時,一個伺服器充當主伺服器(master),其餘的伺服器充當從伺服器(slave)。因為複製是非同步進行的,所以從伺服器不需要一直連線著主伺服器,從伺服器甚至可以通過撥號斷斷續續地連線主伺服器。通過配置檔案,可以指定複製所有的資料庫,某個資料庫,甚至是某個資料庫上的某個表。

機制
  • Mysql伺服器之間的主從同步是基於二進位制日誌機制,主伺服器使用二進位制日誌來記錄資料庫的變動情況,從伺服器通過讀取和執行該日誌檔案來保持和主伺服器的資料一致。

  • 在使用二進位制日誌時,主伺服器的所有操作都會被記錄下來,然後從伺服器會接收到該日誌的一個副本。從伺服器可以指定執行該日誌中的哪一類事件(譬如只插入資料或者只更新資料),預設會執行日誌中的所有語句。

配置主從同步的基本步驟

有很多種配置主從同步的方法,可以總結為如下的步

  • 在主伺服器上,必須開啟二進位制日誌機制和配置一個獨立的ID 開啟方法

  • 在每一個從伺服器上,配置一個唯一的ID,建立一個用來專門複製主伺服器資料的賬號

  • 在開始複製程序前,在主伺服器上記錄二進位制檔案的位置資訊

  • 如果在開始複製之前,資料庫中已經有資料,就必須先建立一個數據快照(可以使用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中建立庫獲取操作表,再到本地檢視是否也發生變化。只要資料庫內容保持一致,說明就配置成功了。

&n