找回密码
 立即注册
首页 业界区 业界 Centos 实现 MySql 8.0.40 主从配置

Centos 实现 MySql 8.0.40 主从配置

恃液 前天 22:21
MySql 版本:8.0.40
服务器:10.120.75.50,10.120.75.51(共两台)
1.png

1. 配置主服务器(10.120.75.50)

1.1 编辑 MySQL 配置文件

首先,登录到主服务器,编辑 MySQL 配置文件(通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf)。
  1. vim /etc/my.cnf
复制代码
  1. [mysqld]
  2. # 基础配置
  3. port=6305                    # MySQL 服务监听端口(需与客户端连接配置一致)
  4. basedir=/usr/local/mysql     # MySQL 安装目录
  5. datadir=/usr/local/mysql/data # 数据文件存储目录(包含数据库文件、日志等)
  6. socket=/usr/local/mysql/data/mysql.sock # Unix 套接字文件路径(本地连接使用)
  7. # 连接与安全
  8. max_connect_errors=10000     # 允许的最大连接错误次数(防暴力破解,建议设为较大值)
  9. character-set-server=utf8mb4 # 默认字符集(支持 Emoji 和扩展字符)
  10. default-storage-engine=INNODB # 默认存储引擎(推荐 InnoDB,支持事务、行级锁)
  11. user=ydroot                  # MySQL 服务运行用户(需与系统用户一致)
  12. # 复制相关配置
  13. # skip-grant-tables          # 跳过权限验证(谨慎使用,仅用于密码恢复)
  14. skip-name-resolve            # 禁用 DNS 解析(加快连接速度,但禁用主机名验证)
  15. # 唯一服务器标识(主从复制必须唯一)
  16. server-id = 1               
  17. # 二进制日志配置(复制和恢复的核心)
  18. log-bin = mysql-bin          # 启用二进制日志(文件名前缀)
  19. binlog-do-db = datasynchron # 仅同步指定数据库(若需全库同步,删除此行)
  20. # 数据包与通信
  21. max_allowed_packet=512M      # 允许的最大数据包大小(大文件传输需调大)
  22. # GTID 配置(增强复制可靠性)
  23. gtid_mode = ON               # 启用全局事务标识符
  24. enforce_gtid_consistency = ON # 强制 GTID 一致性(禁止非事务性操作)
  25. # 二进制日志格式(ROW 模式记录行级变化,推荐用于复制)
  26. binlog_format = ROW
  27. # 日志清理策略(自动清理 7 天前的二进制日志)
  28. binlog_expire_logs_seconds = 604800  # 7 天(单位:秒)
  29. [client]
  30. port=6305                                            # 客户端连接端口(需与服务器端一致)
  31. socket=/usr/local/mysql/data/mysql.sock # 客户端套接字路径(本地连接使用)
  32. default-character-set=utf8mb4                         # 客户端默认字符集
  33. [mysqld_safe]
  34. log-error=/usr/local/mysql/data/localhost.localdomain.err # 错误日志路径
  35. pid-file=/usr/local/mysql/data/localhost.localdomain.pid  # PID 文件路径(记录进程 ID)
复制代码
1.2 重启 MySQL 服务

配置完毕后,重启 MySQL 服务使配置生效:
  1. sudo systemctl restart mysql
复制代码
  1. 或手动关闭后启动
  2. pkill mysqld
  3. /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
复制代码
1.3 创建复制账号

在主服务器上创建一个用于复制的 MySQL 用户:
  1. CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password'; #生产环境禁止这样使用
  2. CREATE USER 'replication_user'@'specific_ip' IDENTIFIED BY 'password' REQUIRE SSL; #产环境使用,强制使用 SSL 加密
  3. -- 授予全局复制权限
  4. GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'specific_ip';
  5. #刷新权限
  6. FLUSH PRIVILEGES;
复制代码
1.4 获取二进制日志文件和位置

运行以下命令,记录当前二进制日志文件和位置,这些信息会在从服务器上配置时使用。
  1. SHOW MASTER STATUS;
复制代码
例如,您可能会得到如下输出:
  1. +------------------+----------+--------------+------------------+
  2. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  3. +------------------+----------+--------------+------------------+
  4. | mysql-bin.000001 | 107      | your_database|                  |
  5. +------------------+----------+--------------+------------------+
复制代码
记下 File 和 Position 字段的值,稍后在从服务器上使用。
  1. mysql> SHOW MASTER STATUS;
  2. +------------------+----------+--------------+------------------+-------------------+
  3. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +------------------+----------+--------------+------------------+-------------------+
  5. | mysql-bin.00003 |    157   | datasynchron |                  |                   |
  6. +------------------+----------+--------------+------------------+-------------------+
复制代码
2. 配置从服务器(10.120.75.51)

2.1 编辑 MySQL 配置文件

登录到从服务器,编辑 MySQL 配置文件:
  1. sudo vi /etc/my.cnf
复制代码
  1. [mysqld]
  2. # MySQL服务基础配置
  3. port=6306                    # MySQL服务监听端口(非默认3306,避免冲突)
  4. basedir=/usr/local/mysql     # MySQL安装根目录
  5. datadir=/usr/local/mysql/data # 数据库文件存储路径
  6. socket=/usr/local/mysql/data/mysql.sock # 本地连接使用的套接字文件
  7. # 连接安全配置
  8. max_connect_errors=10000     # 允许的最大连接错误次数(防暴力破解)
  9. skip-name-resolve            # 禁用DNS解析(提升连接速度,但要求授权使用IP而非主机名)
  10. # 字符集与存储引擎
  11. character-set-server=utf8mb4 # 设置默认字符集(支持emoji及扩展字符)
  12. default-storage-engine=INNODB # 设置默认存储引擎
  13. # 主从复制相关配置
  14. server-id = 100              # 服务器唯一标识(主从节点必须不同)
  15. relay-log = mysql-relay-bin  # 中继日志文件(用于主从同步)
  16. log-bin = mysql-bin          # 二进制日志文件(记录所有更改数据的SQL)
  17. # GTID(全局事务标识)配置(用于增强主从复制可靠性)
  18. gtid_mode = ON               # 启用GTID模式
  19. enforce-gtid-consistency = ON # 强制GTID一致性(防止非事务性操作破坏复制)
  20. # 性能与网络配置
  21. max_allowed_packet=512M      # 允许的最大数据包大小(处理大字段查询/传输)
  22. binlog-do-db = datasynchron  # 指定需要同步的数据库(主从复制过滤)
  23. [client]
  24. # 客户端连接配置
  25. port=6306                    # 客户端连接端口
  26. socket=/usr/local/mysql/data/mysql.sock # 客户端使用的套接字文件
  27. default-character-set=utf8mb4 # 设置客户端默认字符集
复制代码
2.2 重启 MySQL 服务

配置完毕后,重启 MySQL 服务使配置生效:
  1. sudo systemctl restart mysql
复制代码
2.3 配置从服务器的主服务器信息

在从库停止复制并重置状态
  1. STOP REPLICA;
  2. RESET REPLICA;
复制代码
在从服务器上,运行以下命令来配置主服务器的信息:
  1. CHANGE MASTER TO
  2.   MASTER_HOST='10.120.75.50',                        # 主服务器的IP地址
  3.   MASTER_USER='replication_user',                 # 主服务器上创建的复制账号
  4.   MASTER_PASSWORD='your_password',          # 替换为实际密码
  5.   MASTER_LOG_FILE='mysql-bin.000003',         # 主库当前日志文件
  6.   MASTER_LOG_POS=197;                        # 主库当前日志位置
复制代码
确保将 MASTER_LOG_FILE 和 MASTER_LOG_POS 设置为从主服务器上获取的值。
2.4 启动从服务器复制进程

运行以下命令启动复制:
  1. start replica;
复制代码
2.5 检查复制状态

通过以下命令检查从服务器的复制状态:
  1. SHOW REPLICA STATUS\G
复制代码
确保 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes,这表示主从复制已经正常运行。
3. 测试主从复制

在主服务器上插入数据,检查从服务器是否同步:
  1. INSERT INTO your_database.table_name (column1, column2) VALUES ('value1', 'value2');
复制代码
然后,在从服务器上查询是否同步:
  1. SELECT * FROM your_database.table_name;
复制代码
如果从服务器正确同步数据,则表示主从复制已成功配置。
4. 解决常见问题


  • 网络问题:确保从服务器能访问主服务器,且防火墙允许 MySQL 端口(通常是 3306)的连接。
  • 复制延迟:如果出现复制延迟,可以检查 SHOW SLAVE STATUS 输出中的 Seconds_Behind_Master 字段,查看是否存在延迟。
  • 权限问题:确保在主服务器上创建的复制账号具有正确的权限。
通过这些步骤,您就可以成功配置 MySQL 主从复制。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册