数据库中的主从复制就是将主数据库中的 DDL 和 DML 操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做),从而使得从数据库的数据与主数据库保持一致。
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。
MySQL复制是基于主服务器在二进制日志中跟踪所有对数据库的更改。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到日志的数据。
当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
MySQL复制是异步的且串行化的。主节点中一个用户请求一个写操作时,主节点并不需要等待从服务器也将这些写入操作执行完成后再响应用户,而是只要主节点把写入操作完成后就响应用户,因此从节点中的数据有可能会落后主节点。
主从复制的作用有以下:
主要有以下三步:
第一步:master 在每个事务更新数据完成之前,将该操作记录串行地写入到 binlog 文件中。master 将数据改变的记录到二进制日志(binary log),
这个记录的过程叫做二进制日志事件(binary log events)。
第二步:slave开启一个I/O Thread,该线程在master打开一个普通连接,主要工作是将 master 的 binlog 拷贝到它的中继日志(relay log) 中
。如果读取的进度已经跟上了master,就进入睡眠状态并等待master产生新的事件。
第三步:SQL Thread 会读取中继日志,并顺序执行该日志中的 SQL 事件,从而保持与主数据库中的数据一致。MySQL复制是异步的且串行化的。
(Binary log:主数据库的二进制日志。Relay log:从服务器的中继日志)
主从复制的原则主要有:
主从服务器的 mysql 版本尽量要保持一致。
准备两台服务器:
主数据库:192.168.32.130
从数据库:192.168.32.131
vim /etc/my.cnf
GRANT REPLICATION SLAVE ON *.* TO '备份账号'@'从机数据库的IP' IDENTIFIED BY '密码'; -- 示例 GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'192.168.32.131' IDENTIFIED BY '123456';