要在 Ubuntu 20.04 上配置 MySQL 主从同步,需要在两台服务器上进行一系列配置。以下是详细的步骤:

在主服务器上(172.10.12.195):

  1. 配置 MySQL
    编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 文件,确保以下配置已设置:

    [mysqld]
    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = [NameOfYourDatabase]
    

    其中 NameOfYourDatabase 是您想要复制的数据库名称。如果您想复制所有数据库,可以省略 binlog_do_db 行。

  2. 重启 MySQL 服务

    sudo systemctl restart mysql
    
  3. 创建复制用户
    登录到 MySQL:

    mysql -u root -p
    

    创建一个具有复制权限的用户:

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

    'replicaPassword' 替换为一个安全的密码。

  4. 锁定数据库(短暂):
    为了获取一致的数据快照,需要锁定数据库:

    FLUSH TABLES WITH READ LOCK;
    
  5. 记录二进制日志位置
    在 MySQL 中,运行以下命令并记下文件名和位置:

    SHOW MASTER STATUS;
    

    您会看到 FilePosition 的值,稍后需要用到。

  6. 备份数据库
    在新的终端窗口中,使用 mysqldump 创建一个数据库的备份(确保替换 [NameOfYourDatabase]):

    mysqldump -u root -p [NameOfYourDatabase] > db_backup.sql
    
  7. 解锁数据库
    回到 MySQL 终端解锁表:

    UNLOCK TABLES;
    

在从服务器上(172.10.12.200):

  1. 配置 MySQL
    编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 文件,添加或修改以下行:

    [mysqld]
    server-id = 2
    relay_log = /var/log/mysql/mysql-relay-bin.log
    log_bin = /var/log/mysql/mysql-bin.log
    read_only = 1
    

    设置 read_only 确保从服务器只能读取。

  2. 重启 MySQL 服务

    sudo systemctl restart mysql
    
  3. 导入数据库备份
    将之前创建的数据库备份 (db_backup.sql) 传输到从服务器,并导入:

    mysql -u root -p < db_backup.sql
    
  4. 配置复制
    登录到 MySQL:

    mysql -u root -p
    

    使用之前记录的文件名和位置配置复制:

    CHANGE MASTER TO
    MASTER_HOST='172.10.12.195',
    MASTER_USER='replicator',
    MASTER_PASSWORD='replicaPassword',
    MASTER_LOG_FILE='[RecordedFileName]',
    MASTER_LOG_POS=[RecordedPosition];
    

    [RecordedFileName][RecordedPosition] 替换为之前记录的值。

  5. 启动复制进程

    START SLAVE;
    
  6. 验证复制状态

    SHOW SLAVE STATUS\G
    

    检查输出,确保 Slave_IO_RunningSlave_SQL_Running 都是 Yes

完成这些步骤后,从服务器应该开始从主服务器复制数据。注意,这种设置在生产环境中可能需要更多的安全和优化措施。此外,确保网络设置允许两台服务器之间的通信。

01-13 11:28