Python日常筆記(34) - Mysql主從數據庫

MySQL主從同步配置

  1. 主從同步的定義

主從同步使得數據可以從一個數據庫服務器複製到其他服務器上,在複製數據時,一個服務器充當主服務器(master),其餘的服務器充當從服務器(slave)。

因爲複製是異步進行的,所以從服務器不需要一直連接着主服務器,從服務器甚至可以通過撥號斷斷續續地連接主服務器。

通過配置文件,可以指定複製所有的數據庫,某個數據庫,甚至是某個數據庫上的某個表。

使用主從同步的好處:

通過增加從服務器來提高數據庫的性能,在主服務器上執行寫入和更新,在從服務器上向外提供讀功能,可以動態地調整從服務器的數量,從而調整整個數據庫的性能。

提高數據安全,因爲數據已複製到從服務器,從服務器可以終止複製進程,所以,可以在從服務器上備份而不破壞主服務器相應數據

在主服務器上生成實時數據,而在從服務器上分析這些數據,從而提高主服務器的性能

  1. 主從同步的機制

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

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

每一個從服務器會記錄關於二進制日誌的信息:文件名和已經處理過的語句,這樣意味着不同的從服務器可以分別執行同一個二進制日誌的不同部分,並且從服務器可以隨時連接或者中斷和服務器的連接。

主服務器和每一個從服務器都必須配置一個唯一的ID號(在my.cnf文件的[mysqld]模塊下有一個server-id配置項),另外,每一個從服務器還需要通過CHANGE MASTER TO語句來配置它要連接的主服務器的ip地址,日誌文件名稱和該日誌裏面的位置(這些信息存儲在主服務器的數據庫裏)

  1. 配置主從同步的基本步驟

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

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

在每一個從服務器上,配置一個唯一的ID,創建一個用來專門複製主服務器數據的賬號

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

如果在開始複製之前,數據庫中已經有數據,就必須先創建一個數據快照(可以使用mysqldump導出數據庫,或者直接複製數據文件)

配置從服務器要連接的主服務器的IP地址和登陸授權,二進制日誌文件名和位置

  1. 詳細配置主從同步的方法

主和從的身份可以自己指定,我們將虛擬機Ubuntu中MySQL作爲主服務器,將Windows中的MySQL作爲從服務器。在主從設置前,要保證Ubuntu與Windows間的網絡連通。

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

如果在設置主從同步前,主服務器上已有大量數據,可以使用mysqldump進行數據備份並還原到從服務器以實現數據的複製。

4.1.1 在主服務器Ubuntu上進行備份,執行命令:

mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql

說明

-u :用戶名

-p :示密碼

--all-databases :導出所有數據庫

--lock-all-tables :執行操作時鎖住所有表,防止操作時有數據修改

~/master_db.sql :導出的備份數據(sql文件)位置,可自己指定
mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql

說明

-u :用戶名

-p :示密碼

--all-databases :導出所有數據庫

--lock-all-tables :執行操作時鎖住所有表,防止操作時有數據修改

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

4.1.2 在從服務器Windows上進行數據還原

找到Windows上mysql命令的位置

新打開的命令窗口,在這個窗口中可以執行類似在Ubuntu終端中執行的mysql命令

將從主服務器Ubuntu中導出的文件複製到從服務器Windows中,可以將其放在上面mysql命令所在的文件夾中,方便還原使用

在剛打開的命令黑窗口中執行還原操作:

mysql –uroot –pmysql < master_db.sql

4.2 配置主服務器master(Ubuntu中的MySQL)

4.2.1 編輯設置mysqld的配置文件,設置log_bin和server-id

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

4.2.2 重啓mysql服務

sudo service mysql restart

4.2.3 登入主服務器Ubuntu中的mysql,創建用於從服務器同步數據使用的帳號

mysql –uroot –pmysql

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

FLUSH PRIVILEGES;

4.2.4 獲取主服務器的二進制日誌信息

SHOW MASTER STATUS;

File爲使用的日誌文件名字,Position爲使用的文件位置,這兩個參數須記下,配置從服務器時會用到

4.3 配置從服務器slave(Windows中的MySQL)

4.3.1 找到Windows中MySQL的配置文件

4.3.2 編輯my.ini文件,將server-id修改爲2,並保存退出。

4.3.3 打開windows服務管理

可以在開始菜單中輸入services.msc找到並運行

4.3.4 在打開的服務管理中找到MySQL57,並重啓該服務

  1. 進入windows的mysql,設置連接到master主服務器
change master to master_host='10.211.55.5', master_user='slave', master_password='slave',master_log_file='mysql-bin.000006', master_log_pos=590;

注:master_host:主服務器Ubuntu的ip地址
master_log_file: 前面查詢到的主服務器日誌文件名
master_log_pos: 前面查詢到的主服務器日誌文件位置

  1. 開啓同步,查看同步狀態

  2. 測試主從同步

在Ubuntu的MySQL中(主服務器)創建一個數據庫 在Windows的MySQL中(從服務器)查看新建的數據庫是否存在

來源黑馬python的主從筆記

作者:阿超
原創公衆號:『Python日常筆記』,專注於 Python爬蟲等技術棧和有益的程序人生,會將一些平時的日常筆記都慢慢整理起來,也期待你的關注和阿超一起學習,公衆號回覆【1024】優質資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章