这一篇博客来写一下MySQL的主从复制,说白了就是一个主机和一个从机,它们配置好之后,主机上创建的数据表,增加删除什么的,从机中也会进行对应的增加删除。
复制的基本原理
slave会从master读取binlog来进行数据同步
三步骤+原理图如下:
- master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events
- slave将master的binary log events拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件,将改变到自己的数据库中。MySQL复制是异步且串行化的。
复制的基本原则
- 每个slave只能有一个master
- 每个slave只能有一个唯一的服务器ID
- 每个master可以有多个slave
主从配置
准备
首先要确定两者的版本一致且都在运行。
我之间在VMware 中选择克隆了一份虚拟机,还是挺方便的。
还有两条注意点很重要,因为这是我做接下来的步骤一直失败失败,然后去网上搜教程再改再尝试才解决的,血的教训呀:
如果你也是像我一样,虚拟机是这样复制的,记得更改一下mysql的uuid,不改的话两者默认是一样的,后续肯定会出错。
你如果查看从机的,这个uuid肯定是一样的,修改一下即可,我的是把从机的最后一位的e改成了f
主机、从机的网络连接,我们大部分默认应该都是NAT模式,要全都改成桥接模式
主机配置
打开mysql的配置文件做以下配置:
- 【必须】主服务器唯一ID,
server-id=1
- 【必须】启用二进制日志
log-bin=自己本地的路径/mysqlbin
- 【可选】启用错误日志
log-err=自己本地的路径/mysqlerr
- 【可选】根目录
basedir=自己本地的路径
- 【可选】临时目录
tmpdir=自己本地的路径
- 【可选】数据目录
datadir=自己本地的路径/data/
read-only=0
代表主机读写都可以- 【可选】设置不要复制的数据库
binlog-ignore-db=mysql
- 【可选】设置需要复制的数据库
binlog-do-db=数据库名字
我的主机最后的设置:
从机配置
- 【必须】从服务器唯一ID
server-id=2
- 【可选】启用二进制日志
我的从机最后的配置:
因为修改了配置文件,主机从机的mysql服务都要重启一下。还要确保两者都关闭了防火墙。
主机建立账户并授权slave
主机进入mysql命令行输入命令:
1 | GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'从机IP' IDENTIFIED BY '123456'; |
查询master的状态
1 | show master status; |
记录下File和Position的值。
执行玩此步骤之后不要再操作主服务器MySQL,防止主服务器状态值变化。
从机配置需要复制的主机
从机进入mysql命令行输入命令:
1 | CHANGE MASTER TO MASTER_HOST='主机IP', |
然后启动从服务器复制功能 start slave;
再看看 show slave status\G;
的下列两个参数(Slave_IO_Running
、 Slave_SQL_Running
),若都是YES,说明主从配置成功。
主机建表,从机自动复制
下面我们来演示,主机从机的都进入到MySQL命令行,主机创建数据表,并插入数据;之后去从机那边,会发现数据表还有数据都已经自动复制过来了。
对了,如果不想继续了的话,执行命令 stop slave;
来停止主从复制。