MySQL:第一次看到有人把 MYSQL 主从复制讲解的这么清楚,mysql 教程菜鸟
1)、master 将改变记录到二进制日志(
binary log
)。这些记录过程叫做二进制日志事件,binary log events
;2)、slave 将 master 的
binary log events
拷贝到它的中继日志(relay log);3)、slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化的。
简单来说: slave 会从 master 读取 binlog 来进行数据同步
Mysql 的复制(replication)是一个异步的复制。
实现整个复制操作主要由三个进程完成的,其中两个进程在 Slave(Sql 进程和 IO 进程),另外一个进程在 Master(IO 进程)上。
要实施复制,首先必须打开 Master 端的binary log(bin-log)
功能,否则无法实现。
因为整个复制过程实际上就是 Slave 从 Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。
复制的详细过程:
(1)Slave 上面的 IO 进程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
(2)Master 接收到来自 Slave 的 IO 进程的请求后,通过负责复制的 IO 进程根据请求信息读取制定日志指定位置之后的日志信息,返回给 Slave 的 IO 进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到 Master 端的
bin-log
文件的名称以及bin-log
的位置;
(3)Slave 的 IO 进程接收到信息后,将接收到的日志内容依次添加到 Slave 端的
relay-log
文件的最末端,并将读取到的 Master 端的 bin-log 的文件名和位置记录到master-info
文件中,以便在下一次读取的时候能够清楚的高速 Master“我需要从某个 bin-log 的哪个位置开始往后的日志内容,请发给我”;
(4)Slave 的 Sql 进程检测到 relay-log 中新增加了内容后,会马上解析 relay-log 的内容成为在 Master 端真实执行时候的那些可执行的内容,并在自身执行。
原则:
每个 slave 只有一个 master;
每个 slave 只能有一个唯一的服务器 ID;
每个 master 可以有多个 salve;
演示主机为Windows
(配置文件为my.ini
文件),从机为Linux
(配置文件为my.cnf
)
1、主机配置(windows 的 my.ini)
1)、[必须]主服务器唯一 ID;
2)、[必须]启用二进制日志;
log-bin=自己本地的路径/data/mysqlbin
。log-bin=D:/devSoft/MySQLServer5.5/data/mysqlbin
。3)、[可选]启用错误日志
log-err=自己本地的路径/data/mysqlerr
。log-err=D:/devSoft/MySQLServer5.5/data/mysqlerr
。4)、[可选]根目录
basedir="自己本地路径"
。basedir="D:/devSoft/MySQLServer5.5/"
。5)、[可选]临时目录
tmpdir="自己本地路径"
。tmpdir="D:/devSoft/MySQLServer5.5/"
。6)、[可选]数据目录
datadir="自己本地路径/Data/"
。datadir="D:/devSoft/MySQLServer5.5/Data/"
。7)、[可选]设置不要复制的数据库
binlog-ignore-db=mysql
。8)、[可选]设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
。
2、从机配置(linux 的 my.cnf)
[必须]从服务器唯一 ID;
[可选]启用二进制日志;
3、因修改过配置文件,请主机+从机都重启后台 mysql 服务
4、主从机都关闭 linux 防火墙
windows 手动关闭;
关闭虚拟机 linux 防火墙
service iptables stop
;
5、在 Windows 主机上建立帐户并授权 slave
GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'从机器数据库IP' IDENTIFIED BY '123456';
。刷新一下配置
flush privileges;
。查询 master 的状态。
show master status;
记录下 File 和 Position 的值;
执行完此步骤后不要再操作主服务器 MYSQL,防止主服务器状态值变化。
评论