MySQL 主從復制
Replication 的原理
image
主服務器上面的任何修改都會通過自己的 I/O tread(I/O 線程)保存在二進制日志 Binary log 里面。
從服務器上面也啟動一個 I/O thread婴谱,通過配置好的用戶名和密碼, 連接到主服務器上面請求讀取二進制日志欠橘,然后把讀取到的二進制日志寫到本地的一個Realy log(中繼日志)里面谴蔑。
從服務器上面同時開啟一個 SQL thread 定時檢查 Realy log(這個文件也是二進制的),如果發(fā)現有更新立即把更新的內容在本機的數據庫上面執(zhí)行一遍智末。
配置 Replication
1.在主服務器上颠焦,您必須啟用二進制日志記錄并配置唯一的服務器ID。需要重啟服務器粥谬,如果省略server-id(或將其顯式設置為默認值0),則主服務器拒絕來自從服務器的任何連接辫塌。為了在使用帶事務的InnoDB進行復制設置時盡可能提高持久性和一致性漏策,應該在主服務器(master)的 my.cnf文件中使用以下配置項:
[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
2.創(chuàng)建日志目錄并賦予權限,重啟服務
mkdir /var/log/mysql
chown mysql.mysql /var/log/mysql
systemctl restart mysqld
3.應該創(chuàng)建一個專門用于復制數據的用戶
每個從服務器需要使用MySQL 主服務器上的用戶名和密碼連接到主站,例如,計劃使用用戶 repl 可以從任何主機上連接到 master 上進行復制操作, 并且用戶 repl 僅可以使用復制的權限臼氨。
在 主服務器 上執(zhí)行如下操作
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' identified by
'QFedu123!';
mysqldump -u用戶名 -p密碼 --all-databases --master-data=1 > dbdump.db
=1 dump文件中含有主服務器二進制日志的文件名和位置
=2 也有上面提到的信息掺喻,但是,語句是被注釋的狀態(tài)
4.在從服務器上使用剛才的用戶進行測試連接
// my.cnf 文件
[mysqld]
server-id=2
重啟
mysql -urepl -p'QFedu123!'
/導入數據/
方式一:mysql> source dbdump.db
方式二: MySQL -u -p < dbdump.db
/配置復制通道/
CHANGE MASTER TO
MASTER_HOST='10.0.122.85',
MASTER_USER='repl',
MASTER_PASSWORD='QFedu123!',
方式二必須加這兩個
(MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=437;)
mysql> start slave;
Query OK, 0 rows affected (0.09 sec)
mysql> show slave status\G
輸出結果中應該看到 I/O 線程和 SQL 線程都是 YES, 就表示成功。