MySQL主從同步配置
1. 主從同步的定義
主從同步使得數(shù)據(jù)可以從一個數(shù)據(jù)庫服務(wù)器復(fù)制到其他服務(wù)器上,在復(fù)制數(shù)據(jù)時,一個服務(wù)器充當(dāng)主服務(wù)器(master),其余的服務(wù)器充當(dāng)從服務(wù)器(slave)。因為復(fù)制是異步進行的,所以從服務(wù)器不需要一直連接著主服務(wù)器,從服務(wù)器甚至可以通過撥號斷斷續(xù)續(xù)地連接主服務(wù)器。通過配置文件,可以指定復(fù)制所有的數(shù)據(jù)庫,某個數(shù)據(jù)庫,甚至是某個數(shù)據(jù)庫上的某個表。
使用主從同步的好處:
- 通過增加從服務(wù)器來提高數(shù)據(jù)庫的性能,在主服務(wù)器上執(zhí)行寫入和更新,在從服務(wù)器上向外提供讀功能,可以動態(tài)地調(diào)整從服務(wù)器的數(shù)量,從而調(diào)整整個數(shù)據(jù)庫的性能。
- 提高數(shù)據(jù)安全,因為數(shù)據(jù)已復(fù)制到從服務(wù)器,從服務(wù)器可以終止復(fù)制進程,所以,可以在從服務(wù)器上備份而不破壞主服務(wù)器相應(yīng)數(shù)據(jù)
- 在主服務(wù)器上生成實時數(shù)據(jù),而在從服務(wù)器上分析這些數(shù)據(jù),從而提高主服務(wù)器的性能
2. 主從同步的機制
[圖片上傳失敗...(image-699086-1558281788204)]
Mysql服務(wù)器之間的主從同步是基于二進制日志機制,主服務(wù)器使用二進制日志來記錄數(shù)據(jù)庫的變動情況,從服務(wù)器通過讀取和執(zhí)行該日志文件來保持和主服務(wù)器的數(shù)據(jù)一致。
在使用二進制日志時,主服務(wù)器的所有操作都會被記錄下來,然后從服務(wù)器會接收到該日志的一個副本。從服務(wù)器可以指定執(zhí)行該日志中的哪一類事件(譬如只插入數(shù)據(jù)或者只更新數(shù)據(jù)),默認(rèn)會執(zhí)行日志中的所有語句。
每一個從服務(wù)器會記錄關(guān)于二進制日志的信息:文件名和已經(jīng)處理過的語句,這樣意味著不同的從服務(wù)器可以分別執(zhí)行同一個二進制日志的不同部分,并且從服務(wù)器可以隨時連接或者中斷和服務(wù)器的連接。
主服務(wù)器和每一個從服務(wù)器都必須配置一個唯一的ID號(在my.cnf文件的[mysqld]模塊下有一個server-id配置項),另外,每一個從服務(wù)器還需要通過CHANGE MASTER TO語句來配置它要連接的主服務(wù)器的ip地址,日志文件名稱和該日志里面的位置(這些信息存儲在主服務(wù)器的數(shù)據(jù)庫里)
3. 配置主從同步的基本步驟
有很多種配置主從同步的方法,可以總結(jié)為如下的步驟:
- 在主服務(wù)器上,必須開啟二進制日志機制和配置一個獨立的ID
- 在每一個從服務(wù)器上,配置一個唯一的ID,創(chuàng)建一個用來專門復(fù)制主服務(wù)器數(shù)據(jù)的賬號
- 在開始復(fù)制進程前,在主服務(wù)器上記錄二進制文件的位置信息
- 如果在開始復(fù)制之前,數(shù)據(jù)庫中已經(jīng)有數(shù)據(jù),就必須先創(chuàng)建一個數(shù)據(jù)快照(可以使用mysqldump導(dǎo)出數(shù)據(jù)庫,或者直接復(fù)制數(shù)據(jù)文件)
- 配置從服務(wù)器要連接的主服務(wù)器的IP地址和登陸授權(quán),二進制日志文件名和位置
4. 詳細(xì)配置主從同步的方法
主和從的身份可以自己指定,我們將虛擬機Ubuntu中MySQL作為主服務(wù)器,將Windows中的MySQL作為從服務(wù)器。 在主從設(shè)置前,要保證Ubuntu與Windows間的網(wǎng)絡(luò)連通。
4.1 備份主服務(wù)器原有數(shù)據(jù)到從服務(wù)器
如果在設(shè)置主從同步前,主服務(wù)器上已有大量數(shù)據(jù),可以使用mysqldump進行數(shù)據(jù)備份并還原到從服務(wù)器以實現(xiàn)數(shù)據(jù)的復(fù)制。
4.1.1 在主服務(wù)器Ubuntu上進行備份,執(zhí)行命令:
mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql
[圖片上傳失敗...(image-3db9b1-1558281788204)]
說明
- -u :用戶名
- -p :示密碼
- --all-databases :導(dǎo)出所有數(shù)據(jù)庫
- --lock-all-tables :執(zhí)行操作時鎖住所有表,防止操作時有數(shù)據(jù)修改
- ~/master_db.sql :導(dǎo)出的備份數(shù)據(jù)(sql文件)位置,可自己指定
4.1.2 在從服務(wù)器Windows上進行數(shù)據(jù)還原
找到Windows上mysql命令的位置
[圖片上傳失敗...(image-56348a-1558281788204)]
新打開的命令窗口,在這個窗口中可以執(zhí)行類似在Ubuntu終端中執(zhí)行的mysql命令
[圖片上傳失敗...(image-c1e223-1558281788204)]
將從主服務(wù)器Ubuntu中導(dǎo)出的文件復(fù)制到從服務(wù)器Windows中,可以將其放在上面mysql命令所在的文件夾中,方便還原使用
[圖片上傳失敗...(image-fc3348-1558281788204)]
在剛打開的命令黑窗口中執(zhí)行還原操作:
mysql –uroot –pmysql < master_db.sql
[圖片上傳失敗...(image-f2c87c-1558281788204)]
4.2 配置主服務(wù)器master(Ubuntu中的MySQL)
4.2.1 編輯設(shè)置mysqld的配置文件,設(shè)置log_bin和server-id
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
[圖片上傳失敗...(image-5a2770-1558281788204)]
[圖片上傳失敗...(image-b204e6-1558281788204)]
4.2.2 重啟mysql服務(wù)
sudo service mysql restart
[圖片上傳失敗...(image-ef5225-1558281788203)]
4.2.3 登入主服務(wù)器Ubuntu中的mysql,創(chuàng)建用于從服務(wù)器同步數(shù)據(jù)使用的帳號
mysql –uroot –pmysql
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
FLUSH PRIVILEGES;
[圖片上傳失敗...(image-5a0275-1558281788203)]
4.2.4 獲取主服務(wù)器的二進制日志信息
SHOW MASTER STATUS;
[圖片上傳失敗...(image-452c28-1558281788203)]
File為使用的日志文件名字,Position為使用的文件位置,這兩個參數(shù)須記下,配置從服務(wù)器時會用到
4.3 配置從服務(wù)器slave(Windows中的MySQL)
4.3.1 找到Windows中MySQL的配置文件
[圖片上傳失敗...(image-ed97b3-1558281788203)]
4.3.2 編輯my.ini文件,將server-id修改為2,并保存退出。
[圖片上傳失敗...(image-c14c63-1558281788203)]
4.3.3 打開windows服務(wù)管理
可以在開始菜單中輸入services.msc找到并運行
[圖片上傳失敗...(image-e31850-1558281788203)]
4.3.4 在打開的服務(wù)管理中找到MySQL57,并重啟該服務(wù)
[圖片上傳失敗...(image-cee4a8-1558281788203)]
5. 進入windows的mysql,設(shè)置連接到master主服務(wù)器
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:主服務(wù)器Ubuntu的ip地址
- master_log_file: 前面查詢到的主服務(wù)器日志文件名
- master_log_pos: 前面查詢到的主服務(wù)器日志文件位置
[圖片上傳失敗...(image-502e9-1558281788203)]
6. 開啟同步,查看同步狀態(tài)
[圖片上傳失敗...(image-be7870-1558281788203)]
7. 測試主從同步
在Ubuntu的MySQL中(主服務(wù)器)創(chuàng)建一個數(shù)據(jù)庫 [圖片上傳失敗...(image-34095c-1558281788203)]
在Windows的MySQL中(從服務(wù)器)查看新建的數(shù)據(jù)庫是否存在 [圖片上傳失敗...(image-c57f6a-1558281788203)]