记录一下两台服务器上 mysql 的主从配置

开发一个新项目需要用到 mysql 主从读写分离,开发环境来搭建一主一从的 mysql 满足基本需要,记录一下具体步骤。

现状和需求

有两台服务器分别运行一个 mysql 5.7 的实例:

服务器IP 端口 mysql实例 主从
192.168.0.10 3306 mysql1
192.168.0.11 3307 mysql2

mysql1 有需要设置主从的数据库 paca,设置 mysql1 为主库,mysql2 为从库,为数据库 paca 设置一主一从,具体操作步骤。

实现步骤

配置主服务器 mysql1

修改 mysql1 配置

mysql1 服务器上,设置服务 id 并打开二进制日志,打开 MySQL 配置文件(通常是 /etc/my.cnf/etc/mysql/my.cnf),并进行以下修改:

[mysqld]
server-id = 1
log-bin = mysql-bin

重启 mysql

重启 mysql 确保配置生效,并确认二进制日志 log bin 已开启。

sudo systemctl restart mysql

进入 mysql 确认已开启。

mysql> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set, 1 warning (0.00 sec)

创建复制用户

进入 mysql 创建用于复制的用户,这里创建的用户为 repl_user,密码 12346,根据需求修改。

CREATE USER 'repl_user'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;

记录二进制

进入 mysql 查看当前二进制日志文件和位置。

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |   110200 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

记录 FilePosition 的值,后面会在配置从服务器时用到。

配置从服务器

编辑 MySQL 配置文件

mysql2 服务器上,打开 MySQL 配置文件,并进行以下修改:

[mysqld]
server-id=2
replicate_do_db=paca

这里的 replicate_do_db 表示需要复制的数据库,如果不在从数据库配置这个参数,将会复制 mysql1 上的所有数据库。

重启 mysql

sudo systemctl restart mysql

从主服务器复制数据库

使用 mysqldump 或其他数据库同步工具将主服务器的 paca 数据库同步到从服务器的 paca

设置从服务器复制配置

进入 mysql 运行以下命令配置从服务器。

CHANGE MASTER TO
    MASTER_HOST='192.168.0.10',
    MASTER_PORT=3306,
    MASTER_USER='repl_user',
    MASTER_PASSWORD='123456',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=110200;

START SLAVE;

其中的 MASTER_LOG_FILEMASTER_LOG_POS 的值使用上面记录的主服务器的二进制文件和位置信息。

检查复制状态

SHOW SLAVE STATUS\G;

看到类似的输出:

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.10
                  Master_User: repl_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 110200
               Relay_Log_File: f2bb61719e78-relay-bin.000004
                Relay_Log_Pos: 108106
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: paca
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 110200
              Relay_Log_Space: 108320
...

可以看到 Slave_IO_Running: YesSlave_SQL_Running: Yes 并且 Slave_IO_State: Waiting for master to send event 可见主从已经设置成功了。

接下来可以在主库做一些增删改操作,可以看到从库自动同步了。

注意问题

  1. 在开始配置到确认配置前,应该保证没有新的增删改发生在主服务器,如果数据发生了变化,为保证数据一致,则需要重新将变化同步到从服务器的数据库且配置从服务器的 Position
  2. 保证从服务器可以访问主服务器的 mysql 服务,可以在配置前在从服务器上使用 mysql 命令连接主服务器测试。

标题:记录一下两台服务器上 mysql 的主从配置

原文链接:https://beltxman.com/4407.html

若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。

发表评论

您的电子邮箱地址不会被公开。

Scroll to top