在三台虚拟机搭建一主两从数据库全流程

打印 上一主题 下一主题

主题 968|帖子 968|积分 2906

环境预备


  • 虚拟机配置

    • 三台虚拟机(比方:master、slave1、slave2),发起利用相同操纵系统(如 CentOS 7)。
    • 确保三台呆板网络互通(通过内网 IP 或主机名解析)。
    • 开放 MySQL 默认端口 3306,并关闭防火墙或配置防火墙规则:
      1. # 关闭防火墙(临时)
      2. systemctl stop firewalld
      3. # 禁止开机启动防火墙
      4. systemctl disable firewalld
      复制代码

  • 主机名解析
    在三台呆板的 /etc/hosts 文件中添加内容。
安装MySQL

在三台虚拟机上安装 MySQL 5.7(推荐利用 yum 安装以制止编译问题)。

  • 添加 MySQL Yum 仓库
    1. wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
    2. sudo rpm -ivh mysql80-community-release-el7-7.noarch.rpm
    3. # 启用 MySQL 5.7 仓库
    4. sudo yum-config-manager --disable mysql80-community
    5. sudo yum-config-manager --enable mysql57-community
    复制代码
  • 安装 MySQL
    1. sudo yum install -y mysql-community-server
    复制代码
  • 启动 MySQL 并设置开机自启
    1. sudo systemctl start mysqld
    2. sudo systemctl enable mysqld
    复制代码
  • 获取初始暗码
    1. grep 'temporary password' /var/log/mysqld.log
    复制代码
  • 安全配置 MySQL
    1. mysql_secure_installation
    复制代码
主库配置


  • 修改主库配置文件
    编辑 /etc/my.cnf,添加以下内容:
    1. [mysqld]
    2. server-id=1
    3. log-bin=mysql-bin
    4. binlog-format=ROW
    5. binlog-do-db=your_database_name  # 需要同步的数据库(可选)
    复制代码
  • 重启 MySQL 服务
    1. sudo systemctl restart mysqld
    复制代码
  • 创建复制用户
    登录 MySQL 主库:
    1. CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
    2. GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    3. FLUSH PRIVILEGES;
    复制代码
  • 检察主库状态
    1. SHOW MASTER STATUS;
    复制代码
    记录 File(如 mysql-bin.000001)和 Position(如 154),供从库利用。
从库配置

在 slave1 和 slave2 上执行以下操纵

  • 修改从库配置文件
    编辑 /etc/my.cnf,添加以下内容(留意 server-id 不同):
    1. [mysqld]
    2. server-id=2  # slave1 设为 2,slave2 设为 3
    3. relay-log=mysql-relay-bin
    4. read-only=1
    复制代码
  • 重启 MySQL 服务
    1. sudo systemctl restart mysqld
    复制代码
  • 配置主从复制
    登录 MySQL 从库,执行:
    1. CHANGE MASTER TO
    2. MASTER_HOST='master',
    3. MASTER_USER='repl',
    4. MASTER_PASSWORD='repl_password',
    5. MASTER_LOG_FILE='mysql-bin.000001',
    6. MASTER_LOG_POS=154;
    复制代码
  • 启动复制
    1. START SLAVE;
    复制代码
  • 检查复制状态
    1. SHOW SLAVE STATUS\G
    复制代码
    确认以下两项为 Yes:

    • Slave_IO_Running: Yes
    • Slave_SQL_Running: Yes

数据同步

1.导出主库数据:
  1. mysqldump -u root -p --all-databases --master-data > master_dump.sql
复制代码

2.导入数据到从库:
  1. mysql -u root -p < master_dump.sql
复制代码
验证主从同步

在主库创建测试数据:
  1. CREATE DATABASE test_db;
  2. USE test_db;
  3. CREATE TABLE test_table (id INT);
  4. INSERT INTO test_table VALUES (1);
复制代码

在从库检查数据:
  1. SELECT * FROM test_db.test_table;
复制代码
常见问题排查



  • 主从复制中断

    • 检查 SHOW SLAVE STATUS\G 中的 Last_IO_Error 和 Last_SQL_Error。
    • 若数据不划一,重新执行 CHANGE MASTER TO 并重置复制:
      1. STOP SLAVE;
      2. RESET SLAVE;
      3. START SLAVE;
      复制代码

  • 网络问题

    • 利用 ping 或 telnet master 3306 检查网络连通性。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表