记录生活中的点点滴滴

0%

mysql高级5:主从复制

这一篇博客来写一下MySQL的主从复制,说白了就是一个主机和一个从机,它们配置好之后,主机上创建的数据表,增加删除什么的,从机中也会进行对应的增加删除。

复制的基本原理

  • slave会从master读取binlog来进行数据同步

  • 三步骤+原理图如下:

    1. master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events
    2. slave将master的binary log events拷贝到它的中继日志(relay log)
    3. slave重做中继日志中的事件,将改变到自己的数据库中。MySQL复制是异步且串行化的。

复制的基本原则

  • 每个slave只能有一个master
  • 每个slave只能有一个唯一的服务器ID
  • 每个master可以有多个slave

主从配置

准备

首先要确定两者的版本一致且都在运行。

我之间在VMware 中选择克隆了一份虚拟机,还是挺方便的。

还有两条注意点很重要,因为这是我做接下来的步骤一直失败失败,然后去网上搜教程再改再尝试才解决的,血的教训呀:

  • 如果你也是像我一样,虚拟机是这样复制的,记得更改一下mysql的uuid,不改的话两者默认是一样的,后续肯定会出错。

    你如果查看从机的,这个uuid肯定是一样的,修改一下即可,我的是把从机的最后一位的e改成了f

  • 主机、从机的网络连接,我们大部分默认应该都是NAT模式,要全都改成桥接模式

主机配置

打开mysql的配置文件做以下配置:

  1. 【必须】主服务器唯一ID,server-id=1
  2. 【必须】启用二进制日志 log-bin=自己本地的路径/mysqlbin
  3. 【可选】启用错误日志 log-err=自己本地的路径/mysqlerr
  4. 【可选】根目录 basedir=自己本地的路径
  5. 【可选】临时目录 tmpdir=自己本地的路径
  6. 【可选】数据目录 datadir=自己本地的路径/data/
  7. read-only=0 代表主机读写都可以
  8. 【可选】设置不要复制的数据库 binlog-ignore-db=mysql
  9. 【可选】设置需要复制的数据库 binlog-do-db=数据库名字

我的主机最后的设置:

从机配置

  1. 【必须】从服务器唯一ID server-id=2
  2. 【可选】启用二进制日志

我的从机最后的配置:

因为修改了配置文件,主机从机的mysql服务都要重启一下。还要确保两者都关闭了防火墙。

主机建立账户并授权slave

主机进入mysql命令行输入命令:

1
2
3
GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'从机IP' IDENTIFIED BY '123456';
# 刷新一下
flush privileges;

查询master的状态

1
show master status;

记录下File和Position的值。

执行玩此步骤之后不要再操作主服务器MySQL,防止主服务器状态值变化。

从机配置需要复制的主机

从机进入mysql命令行输入命令:

1
2
3
4
CHANGE MASTER TO MASTER_HOST='主机IP',
MASTER_USER='zhangsan',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.具体数字',MASTER_LOG_POS=具体值;

然后启动从服务器复制功能 start slave;

再看看 show slave status\G; 的下列两个参数(Slave_IO_RunningSlave_SQL_Running),若都是YES,说明主从配置成功。

主机建表,从机自动复制

下面我们来演示,主机从机的都进入到MySQL命令行,主机创建数据表,并插入数据;之后去从机那边,会发现数据表还有数据都已经自动复制过来了。

对了,如果不想继续了的话,执行命令 stop slave; 来停止主从复制。