注意:本文是在烏班圖和Windows10環境下配置,Centos與烏班圖略有不同,就是Centos的MySQL配置文件路徑為/etc/my.cnf,其他操作一致
1. 主從同步的定義
主從同步使得數據可以從一個數據庫服務器復制到其他服務器上,在復制數據時,一個服務器充當主服務器(master),其余的服務器充當從服務器(slave)。因為復制是異步進行的,所以從服務器不需要一直連接着主服務器,從服務器甚至可以通過撥號斷斷續續地連接主服務器。通過配置文件,可以指定復制所有的數據庫,某個數據庫,甚至是某個數據庫上的某個表。
使用主從同步的好處:
- 通過增加從服務器來提高數據庫的性能,在主服務器上執行寫入和更新,在從服務器上向外提供讀功能,可以動態地調整從服務器的數量,從而調整整個數據庫的性能。
- 提高數據安全,因為數據已復制到從服務器,從服務器可以終止復制進程,所以,可以在從服務器上備份而不破壞主服務器相應數據
- 在主服務器上生成實時數據,而在從服務器上分析這些數據,從而提高主服務器的性能
2. 主從同步的機制
Mysql服務器之間的主從同步是基於二進制日志機制,主服務器使用二進制日志來記錄數據庫的變動情況,從服務器通過讀取和執行該日志文件來保持和主服務器的數據一致。
在使用二進制日志時,主服務器的所有操作都會被記錄下來,然后從服務器會接收到該日志的一個副本。從服務器可以指定執行該日志中的哪一類事件(譬如只插入數據或者只更新數據),默認會執行日志中的所有語句。
每一個從服務器會記錄關於二進制日志的信息:文件名和已經處理過的語句,這樣意味着不同的從服務器可以分別執行同一個二進制日志的不同部分,並且從服務器可以隨時連接或者中斷和服務器的連接。
主服務器和每一個從服務器都必須配置一個唯一的ID號(在my.cnf文件的[mysqld]模塊下有一個server-id配置項),另外,每一個從服務器還需要通過CHANGE MASTER TO語句來配置它要連接的主服務器的ip地址,日志文件名稱和該日志里面的位置(這些信息存儲在主服務器的數據庫里)
3. 配置主從同步的基本步驟
有很多種配置主從同步的方法,可以總結為如下的步驟:
- 在主服務器上,必須開啟二進制日志機制和配置一個獨立的ID
- 在每一個從服務器上,配置一個唯一的ID,創建一個用來專門復制主服務器數據的賬號
- 在開始復制進程前,在主服務器上記錄二進制文件的位置信息
- 如果在開始復制之前,數據庫中已經有數據,就必須先創建一個數據快照(可以使用mysqldump導出數據庫,或者直接復制數據文件)
- 配置從服務器要連接的主服務器的IP地址和登陸授權,二進制日志文件名和位置
4. 詳細配置主從同步的方法
主和從的身份可以自己指定,我們將虛擬機Ubuntu中MySQL作為主服務器,將Windows中的MySQL作為從服務器。 在主從設置前,要保證Ubuntu與Windows間的網絡連通。
4.1 備份主服務器原有數據到從服務器
mysqldump -uroot -p --all-databases --lock-all-tables > ~/master_db.sql
說明:
- -u :用戶名
- -p :示密碼
- --all-databases :導出所有數據庫
- --lock-all-tables :執行操作時鎖住所有表,防止操作時有數據修改
- ~/master_db.sql :導出的備份數據(sql文件)位置,可自己指定
4.1.2 在從服務器Windows上進行數據還原
將master_db.sql從烏班圖上復制到windows上的任意盤符的根下(方便還原),執行命令還原數據庫
4.2.1 編輯設置mysqld的配置文件,設置log_bin和server-id
log_bin可以直接配置成mysql-bin.log
根據需求還可以配置如下字段
log_slave_updates=1
binlog-do-db=db_name # 需要同步的數據庫
binlog-ignore-db=mysql # 被忽略的數據庫
binlog_format=ROW
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
4.2.2 重啟mysql服務
sudo service mysql restart
4.2.3 登入主服務器Ubuntu中的mysql,創建用於從服務器同步數據使用的帳號
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,並保存退出。
同樣,根據需求可以配置如下字段
log-bin=mysql-bin
replicate-do-db=db_name #需要同步的數據庫名
4.2.3 打開windows服務管理
可以在開始菜單中輸入services.msc找到並運行
4.3.4 在打開的服務管理中找到MySQL57,並重啟該服務
5. 進入windows的mysql,設置連接到master主服務器
change master to master_host='192.168.204.129', master_user='slave', master_password='slave',master_log_file='mysql-bin.000001', master_log_pos=590;
注:
- master_host:主服務器Ubuntu的ip地址
- master_log_file: 前面查詢到的主服務器日志文件名
- master_log_pos: 前面查詢到的主服務器日志文件位置
6. 開啟同步,查看同步狀態
7. 測試主從同步
在Ubuntu的MySQL中(主服務器)創建一個數據庫
在Windows的MySQL中(從服務器)查看新建的數據庫是否存在