MySQL主從同步配置

MySQL主從同步

1. 主從同步的定義

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

使用主從同步的好處:mysql

(1) 經過增長從服務器來提升數據庫的性能,在主服務器上執行寫入和更新,在從服務器上向外提供讀功能,能夠動態地調整從服務器的數量,從而調整整個數據庫的性能。sql

(2) 提升數據安全,由於數據已複製到從服務器,從服務器能夠終止複製進程,因此,能夠在從服務器上備份而不破壞主服務器相應數據docker

(3) 在主服務器上生成實時數據,而在從服務器上分析這些數據,從而提升主服務器的性能shell

2. 主從同步的機制

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

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

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

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

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

有不少種配置主從同步的方法,能夠總結爲以下的步驟:服務器

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

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

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

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

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

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

1)安裝mysql

咱們在ubuntu中已經有安裝一臺mysql了,如今使用docker安裝另一臺mysql

獲取mysql的鏡像,主從同步儘可能保證多臺mysql的版本相同,咱們的ubuntu中存在的mysql是5.7.22版本,因此獲取5.7.22版本的鏡像

docker image pull mysql:5.7.22
或
docker load -i mysql_docker_5722.tar

運行mysql docker鏡像,須要在宿主機中創建文件目錄用於mysql容器保存數據和讀取配置文件。

在家目錄中(/home/python)中建立目錄,將mysql的配置文件放到此目錄中

cd ~
mkdir mysql_slave
cd mysql_slave
mkdir data
cp /etc/mysql/mysql.conf.d ./

咱們要將docker運行的mysql做爲slave來運行,開啓前須要修改配置文件。

編輯 ~/mysql_slave/mysql.conf.d/mysqld.cnf 文件,修改

port  =  8306
general_log  = 0
server-id  = 2

咱們讓此臺mysql運行在8306端口上,且mysql編號爲2

建立docker容器

docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/python/mysql_slave/data:/var/lib/mysql -v /home/python/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d  mysql:5.7.22
  • MYSQL_ROOT_PASSWORD 是建立mysql root用戶的密碼

測試,在ubuntu中使用mysql命令嘗試鏈接docker容器中的mysql

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

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

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

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

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

  • -u :用戶名

  • -p :示密碼

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

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

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

在docker容器中導入數據

mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql

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

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

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

重啓mysql服務

sudo service mysql restart

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

mysql –uroot –pmysql

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

FLUSH PRIVILEGES;

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

SHOW MASTER STATUS; 

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

4)配置從服務器slave (docker中的mysql)

進入docker中的mysql

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

執行

change master to master_host='127.0.0.1', 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: 前面查詢到的主服務器日誌文件位置

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

start slave; show slave status \G 

 

相關文章
相關標籤/搜索