当前位置:首页 > 问答 > 正文

一步步教你慢慢弄懂MariaDB主从复制到底咋配的

咱们要搞清楚主从复制是个啥,你可以把它想象成照镜子,主数据库(Master)就是你自己,从数据库(Slave)就是镜子里的你,你做什么动作,镜子里的你就跟着做什么动作,主数据库里一旦有数据变化,比如新增了一条记录,修改了某个数据,从数据库就会自动地、几乎实时地把这个变化也做一遍,这样做的最大好处就是,万一主数据库这台服务器突然坏掉了(比如硬盘坏了或者断电了),我们可以立刻让从数据库顶上去,保证业务不中断,我们还可以把一些只读的查询操作(比如生成报表、数据统计)放到从数据库上去做,减轻主数据库的压力。

我们开始一步步配置,你需要准备两台安装了MariaDB(或者MySQL,它俩配置这个非常相似)的服务器,一台当作主库,一台当作从库,假设主库的IP地址是192.168.1.100,从库的IP地址是192.168.1.101。

第一步:配置主数据库(Master)

  1. 修改主库的配置文件:你需要找到MariaDB的配置文件,通常叫my.cnf或者my.ini,用文本编辑器打开它。

    • [mysqld] 这个部分下面,找到或者添加以下几行:
      server-id = 1
      log-bin = mysql-bin
      binlog-format = ROW
    • server-id = 1:这是给数据库服务器起的一个唯一编号,主库和从库不能一样,这里我们设主库为1。
    • log-bin = mysql-bin:这行是开启“二进制日志”功能,你可以把二进制日志理解成主数据库的“操作记录本”,它会把所有改动数据的操作(比如INSERT, UPDATE, DELETE)都详细地记下来,从库就是通过读这个本子来同步数据的。mysql-bin是日志文件的前缀名,用默认的就行。
    • binlog-format = ROW:这是指定二进制日志的记录格式,用ROW模式比较稳妥,兼容性好。
    • 配置好后,保存文件,然后重启MariaDB服务,让配置生效。
  2. 为主库创建复制账号:现在我们需要在主库上创建一个专门的账号,这个账号是给从库用来登录主库并读取那个“操作记录本”(二进制日志)的。

    • 用root账号登录到主库的MariaDB。
    • 执行下面的SQL命令(你可以自己改个密码,这里用replication_password举例):
      CREATE USER 'replica_user'@'192.168.1.101' IDENTIFIED BY 'replication_password';
      GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'192.168.1.101';
      FLUSH PRIVILEGES;
    • 注意:'replica_user'@'192.168.1.101' 的意思是,只允许从IP地址为168.1.101的服务器上用replica_user这个账号登录,这样做更安全。
  3. 查看主库状态:这是非常关键的一步,在主库上执行这个命令:

    SHOW MASTER STATUS;
    • 你会看到一个表格,请牢牢记住里面的两个值:FilePosition,比如可能是 mysql-bin.000001328,这相当于告诉你,当前主库的“操作记录本”写到了哪个文件的第几行,从库待会儿就要从这个位置开始同步。

第二步:配置从数据库(Slave)

  1. 修改从库的配置文件:同样,找到从库的my.cnf文件并编辑。

    • [mysqld] 部分添加或修改:
      server-id = 2
    • 注意这里的server-id必须和主库不一样,我们设为2。
    • 保存,然后重启从库的MariaDB服务。
  2. 告诉从库主库在哪里:现在我们要让从库知道它要同步谁,以及从哪个位置开始同步。

    • 用root账号登录到从库的MariaDB。
    • 执行下面的命令,把参数替换成你实际的信息:
      CHANGE MASTER TO
      MASTER_HOST='192.168.1.100',
      MASTER_USER='replica_user',
      MASTER_PASSWORD='replication_password',
      MASTER_LOG_FILE='mysql-bin.000001',
      MASTER_LOG_POS=328;
    • 这里就是在设置:主库的IP地址(MASTER_HOST)、登录账号密码(MASTER_USERMASTER_PASSWORD)、以及最关键的主库状态信息(MASTER_LOG_FILEMASTER_LOG_POS),也就是你上一步用SHOW MASTER STATUS记下来的那两个值。
  3. 启动复制:在从库上执行:

    START SLAVE;

第三步:检查复制是否正常工作

配置到最后一步了,怎么知道成没成功呢?在从库上执行这个命令:

SHOW SLAVE STATUS\G

(这里的\G是为了让结果显示得更整齐,更容易看)

在输出的一大片信息里,你要重点关注这两行:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

如果这两项都是Yes,那么恭喜你!主从复制已经成功配置好了,如果其中一个是No或者Connecting,那就说明有问题,常见问题包括:网络不通、主库地址写错了、复制账号密码不对、或者MASTER_LOG_FILEMASTER_LOG_POS的位置不对,你需要根据SHOW SLAVE STATUS结果里Last_IO_ErrorLast_SQL_Error字段的提示去排查错误。

最后测试一下

你可以在主库上创建一个新的数据库、一张新表,或者插入一条测试数据,然后立刻到从库上查看,如果从库也出现了同样的变化,那就证明一切OK,镜像已经照起来了!

就是配置MariaDB主从复制的完整流程,整个过程的核心就是:主库记录操作日志,从库读取日志并重放操作,只要网络通畅,配置无误,它就能自动地、默默地为你工作。

一步步教你慢慢弄懂MariaDB主从复制到底咋配的