19. Mysql復制
19.1 復制概述
復制是指將主數據庫的DDL 和 DML 操作通過二進制日志
傳到從庫服務器中,然后在從庫上對這些日志重新執行(也叫重做),從而使得從庫和主庫的數據保持同步。
MySQL支持一台主庫同時向多台從庫進行復制, 從庫同時也可以作為其他從服務器的主庫,實現鏈狀復制。
19.2 復制原理
MySQL 的主從復制原理如下。
從上層來看,復制分成三步:
Master 主庫在事務提交時,會把數據變更作為時間 Events 記錄在二進制日志文件 Binlog 中。
主庫推送二進制日志文件 Binlog 中的日志事件到從庫的中繼日志 Relay Log 。
slave重做中繼日志中的事件,將改變反映它自己的數據。
19.3 復制優勢
MySQL 復制的有點主要包含以下三個方面:
主庫出現問題,可以快速切換到從庫提供服務。
可以在從庫上執行查詢操作,從主庫中更新,實現讀寫分離,降低主庫的訪問壓力。
可以在從庫中執行備份,以避免備份期間影響主庫的服務。
19.4 搭建步驟
19.4.1 master
1) 在master 的配置文件(/etc/my.cnf)中,配置如下內容:
#mysql 服務ID,保證整個集群環境中唯一
server-id=1
#mysql binlog 日志的存儲路徑和文件名
log-bin=/var/lib/mysql/mysqlbin
#錯誤日志,默認已經開啟
#log-err
#mysql的安裝目錄
#basedir
#mysql的臨時目錄
#tmpdir
#mysql的數據存放目錄
#datadir
#是否只讀,1 代表只讀, 0 代表讀寫
read-only=0
#忽略的數據, 指不需要同步的數據庫
binlog-ignore-db=mysql
#指定同步的數據庫
#binlog-do-db=db01
2) 執行完畢之后,需要重啟Mysql:
service mysql restart ;
3) 創建同步數據的賬戶,並且進行授權操作:為了完成主從復制
grant replication slave on *.* to 'wyz'@'%' identified by 'Wyz123.com'
flush privileges;
-- 主服務器的ip是1.14.103.243
-- 從服務器的ip是10.0.0.51
4) 查看master狀態:
show master status;
字段含義:
File : 從哪個日志文件開始推送日志文件
Position : 從哪個位置開始推送日志
Binlog_Ignore_DB : 指定不需要同步的數據庫
19.4.2 slave
1) 在 slave 端配置文件中,配置如下內容:
#mysql服務端ID,唯一
server-id=2
#指定binlog日志
log-bin=/var/lib/mysql/mysqlbin
2) 執行完畢之后,需要重啟Mysql:
systemctl mysql restart;
3) 執行如下指令 :
change master to master_host='1.14.103.243',master_user='wyz',master_password='Wyz123.com',master_log_file='mysqlbin.000003',master_log_pos=154;
-- 指定主節點的ip,賬戶,密碼,二進制日志文件名稱,以及從哪一行開始同步
指定當前從庫對應的主庫的IP地址,用戶名,密碼,從哪個日志文件開始的那個位置開始同步推送日志。
4) 開啟同步操作
start slave;
show slave status \G;
5) 停止同步操作
stop slave;
19.4.3 驗證同步操作
1) 在主庫中創建數據庫,創建表,並插入數據 :
create database db01;
use db01;
create table user(
id int(11) not null auto_increment,
name varchar(50) not null,
sex varchar(1),
primary key (id)
)engine=innodb default charset=utf8;
insert into user(id,name,sex) values(null,'Tom','1');
insert into user(id,name,sex) values(null,'Trigger','0');
insert into user(id,name,sex) values(null,'Dawn','1');
2) 在從庫中查詢數據,進行驗證 :
在從庫中,可以查看到剛才創建的數據庫:
在該數據庫中,查詢user表中的數據: