MySQL 主从配置超详细教程

文章目录


前言

MySQL 主从配置是一种实用的数据库架构,主服务器处理写入操作,从服务器负责只读操作,能提升性能、加强冗余、扩展可读性 。下面以常见的 Linux 系统(CentOS 7 )、MySQL 8.0 版本为例,为你介绍配置步骤。


一、安装 MySQL

MySQL8.0 超详细安装配置教程(附安装包):https://blog.csdn.net/u014164303/article/details/145493332

在主服务器和从服务器上都执行以下操作:

  • 更新系统软件包:打开终端,输入命令sudo yum update -y ,更新系统已安装的软件包。
  • 安装 MySQL 官方仓库:执行sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm ,安装 MySQL 官方的 yum 源。
  • 安装 MySQL 服务器:输入sudo yum install -y mysql-server ,安装 MySQL 服务器程序。
  • 启动 MySQL 服务:使用sudo systemctl start mysqld ,启动 MySQL 服务。
  • 设置开机自启:执行sudo systemctl enable mysqld ,让 MySQL 服务在开机时自动启动。
    初始化 MySQL:
  • 获取临时密码:通过sudo grep 'temporary password' /var/log/mysqld.log ,获取初始的临时密码。
  • 登录 MySQL:输入mysql -u root -p ,然后粘贴刚才获取的临时密码登录。
  • 修改密码:运行ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword'; ,把密码修改为自己设定的新密码。

二、主服务器(Master)配置

  1. 编辑 MySQL 配置文件:使用命令sudo vi /etc/my.cnf 打开配置文件,添加或修改以下内容:
  • server-id = 1 :设置服务器唯一 ID,必须是正整数,且主从服务器的 ID 不能相同。
  • log-bin = mysql-bin :开启二进制日志,用于记录数据库的更改操作。
  • expire-logs-days = 10 :指定二进制日志的过期时间,可按需调整。
  • max-binlog-size = 100M :设置二进制日志文件的最大大小。
  • binlog-do-db = your_database_name :指定允许复制的数据库,可根据实际情况修改,若要复制多个数据库,可重复此配置项。
  • 保存并退出文件后,执行sudo systemctl restart mysqld 重启 MySQL 服务使配置生效。
  1. 创建用于复制的用户:登录 MySQL,执行以下命令:

CREATE USER'repl_user'@'%' IDENTIFIED BY 'YourReplicationPassword';

GRANT REPLICATION SLAVE ON . TO'repl_user'@'%';

FLUSH PRIVILEGES;

上述命令创建了名为repl_user的用户,设置其密码为YourReplicationPassword ,并赋予其主从复制相关权限,最后刷新权限。

  1. 获取二进制日志信息:在 MySQL 中执行SHOW MASTER STATUS; ,记录下File和Position的值,后续配置从服务器时会用到。

三、从服务器(Slave)配置

  1. 编辑 MySQL 配置文件:用sudo vi /etc/my.cnf 打开文件,添加或修改以下配置:
    server-id = 2 :设置从服务器唯一 ID,不能与主服务器及其他从服务器相同。
    保存并退出后,执行sudo systemctl restart mysqld 重启 MySQL 服务。
  2. 配置从服务器连接主服务器:登录 MySQL,执行以下命令配置从服务器连接主服务器:

CHANGE MASTER TO

MASTER_HOST='主服务器IP',

MASTER_USER='repl_user',

MASTER_PASSWORD='YourReplicationPassword',

MASTER_LOG_FILE='主服务器二进制日志文件名',

MASTER_LOG_POS=主服务器二进制日志位置;

将MASTER_LOG_FILE和MASTER_LOG_POS替换为在主服务器上执行SHOW MASTER STATUS; 时记录的值。

  1. 启动从服务器复制进程:在 MySQL 中执行START SLAVE; ,启动从服务器的复制进程。

  2. 检查从服务器状态:执行SHOW SLAVE STATUS\G; ,确保Slave_IO_Running和Slave_SQL_Running的值都为Yes ,表示复制进程正常运行。

四、测试主从复制

在主服务器上创建测试数据库和表:登录主服务器的 MySQL,执行以下命令:

CREATE DATABASE test_db;

USE test_db;

CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));

INSERT INTO test_table (name) VALUES ('Test Data');

在从服务器上检查数据复制情况:登录从服务器的 MySQL,执行以下命令:

USE test_db;

SELECT * FROM test_table;

若能看到主服务器上插入的数据,说明主从复制配置成功。

五、注意事项

  • 网络连接:主从服务器间需能正常通信,确保防火墙允许 MySQL 端口(默认 3306 )的流量通过。
  • 数据一致性:配置主从复制前,保证主从服务器数据一致,可通过数据备份和恢复来实现。
  • 日志管理:定期清理二进制日志文件,避免占用过多磁盘空间,可依据expire-logs-days和max-binlog-size配置管理。
相关推荐
波波玩转AI1 分钟前
MyBatis核心
数据库·mybatis
会编程的林俊杰1 小时前
Redis事务机制
数据库·redis·缓存
叁沐1 小时前
MySQL 24 MySQL是怎么保证主备一致的?
mysql
阿蒙Amon1 小时前
详解Python标准库之互联网数据处理
网络·数据库·python
77qqqiqi3 小时前
解决忘记修改配置密码而无法连接nacos的问题
java·数据库·docker·微服务
ALLSectorSorft3 小时前
相亲小程序用户注册与登录系统模块搭建
java·大数据·服务器·数据库·python
Cyber4K3 小时前
MySQL--组从复制的详解及功能演练
运维·数据库·mysql·云原生
tangchao340勤奋的老年?3 小时前
[Qt]QString 与Sqlite3 字符串互动[汉字不乱码]
数据库·sqlite
netho04 小时前
nuxt3: trpc-nuxt和sqlite导致的503错误
数据库·sqlite·vue·nuxt
MMMMMMMMMMemory4 小时前
使用 MySQL Shell 进行 MySQL 单机到 InnoDB Cluster 的数据迁移实践
mysql