1、主從原理
從《高性能mysql》書中講解主從原理大致有三個步驟:
在主庫上把數(shù)據(jù)更改記錄到二進(jìn)制日志中(Binary Log)中,這些記錄稱為二進(jìn)制日志事件。
從庫通過IO線程將主庫上的日志復(fù)制到自己的中繼日志(Relay Log)中。
從庫通過SQL線程讀取中繼日志中的事件,將其重放到自己數(shù)據(jù)上。
原理圖為:

2、主從配置
演示的環(huán)境如下:
名稱 IP
msyql-master(主庫) 192.168.82.112
mysql-slave(從庫) 192.168.194.12
(1)、配置主庫
-
修改my.cnf文件,在[mysqld]加入下面的內(nèi)容:
# 服務(wù)的唯一編號 server-id = 1 # 開啟mysql binlog功能 log-bin = mysql-bin # binlog記錄內(nèi)容的方式,記錄被操作的每一行 binlog_format = ROW # 減少記錄日志的內(nèi)容,只記錄受影響的列 binlog_row_image = minimal # 指定需要復(fù)制的數(shù)據(jù)庫名為mytest binlog-do-db = mytest -
修改好配置文件,重啟mysql服務(wù)
service mysqld restart -
創(chuàng)建從庫同步數(shù)據(jù)的賬號
grant replication slave on *.* to 'test123'@'192.168.197.136' identified by 'test@123'; flush privileges;注意:上面這兩個命令是在mysql的終端執(zhí)行的。
-
查看主庫的狀態(tài):
mysql的終端執(zhí)行:
show master status\G;返回的信息為:
*************************** 1\. row *************************** File: mysql-bin.000071 Position: 623 Binlog_Do_DB: mytest Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)
注意:這個623和mysql-bin.000071配置從庫需要用到
(2)、配置從庫
-
修改my.cnf文件,在[mysqld]加入下面的內(nèi)容:
# 服務(wù)的唯一編號 server-id = 2 # 開啟mysql binlog功能 log-bin = mysql-bin # binlog記錄內(nèi)容的方式,記錄被操作的每一行 binlog_format = ROW # 減少記錄日志的內(nèi)容,只記錄受影響的列 binlog_row_image = minimal # 指定需要復(fù)制的數(shù)據(jù)庫名為mytest replicate-do-db = mytest -
修改好配置文件,重啟mysql服務(wù)
service mysqld restart -
執(zhí)行同步命令
mysql的終端執(zhí)行:
# 設(shè)置主服務(wù)器ip,同步賬號密碼,同步位置 change master to master_host='192.168.82.112',master_user='test123',master_password='test@123',master_log_file='mysql-bin.000071',master_log_pos=623; # 開啟同步功能 start slave; -
查看從庫的狀態(tài)
mysql的終端執(zhí)行:
show slave status\G;返回信息為:

注意:Slave_IO_Running和Slave_SQL_Running的狀態(tài)都為Yes時,說明從庫配置成功。
3、測試
(1)進(jìn)入主庫的mytest數(shù)據(jù)庫,
use mytest;
(2)、在主庫上的mytest數(shù)據(jù)庫創(chuàng)建comm_config表,即:
CREATE TABLE comm_config (configId varchar(200) NOT NULL ,configValue varchar(1024) DEFAULT NULL ,description varchar(2000) DEFAULT NULL ,PRIMARY KEY (configId)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
(3)、在主庫上往comm_config表中插入一條記錄,即:
insert into comm_config(configId, configValue, description) values('name', '主從復(fù)制', '測試一下');
(4)、在從庫上進(jìn)入mytest數(shù)據(jù)庫,并查看數(shù)據(jù)表
use mytest;
show tables;
(5)、在從庫上查看jgyw模式下的表及數(shù)據(jù),即:
use jgyw;
show tables;
結(jié)果為:

說明表同步好了,再查看數(shù)據(jù),即:
select * from comm_config;
結(jié)果為:
+----------+--------------+--------------+
| configId | configValue | description |
+----------+--------------+--------------+
| name | 主從復(fù)制 | 測試一下 |
+----------+--------------+--------------+
1 row in set (0.00 sec)
說明數(shù)據(jù)也同步過來了。