openEuler MySQL 8.0 主从复制部署与排错步骤

openEuler MySQL 8.0 主从复制部署与排错步骤 openEuler MySQL 8.0 主从复制部署与排查步骤参考博客https://www.cnblogs.com/gxl2004/p/19931158一、前置环境准备1. 节点规划节点角色主机名IP 地址主库 Mastermaster192.168.10.229从库 Slaveslave192.168.10.2302. 双节点共同执行主 从都要操作以下命令在 master 和 slave 两台机器上完全一致均需执行。1配置主机名解析vim /etc/hosts文件末尾追加192.168.100.4 master 192.168.100.5 slave2关闭防火墙与 SELinux# 关闭防火墙并禁用开机自启 systemctl disable firewalld --now # 临时关闭SELinux setenforce 0 # 永久关闭SELinux sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config3安装 MySQL 8.0 并初始化# 安装服务 yum install -y mysql-server # 启动并设置开机自启 systemctl enable mysqld --now # 登录MySQL设置root密码 mysqlMySQL 命令行内执行alter user rootlocalhost identified by 你的root密码; flush privileges; exit;4设置系统时区timedatectl set-timezone Asia/Shanghai3. 分节点设置主机名【仅主库 master 执行】hostnamectl set-hostname master bash【仅从库 slave 执行】hostnamectl set-hostname slave bash4. 分节点配置 Chrony 时间同步【仅主库 master 执行】# 安装chrony yum install -y chrony systemctl enable chronyd --now # 修改配置文件 vim /etc/chrony.conf注释默认pool行添加以下内容server ntp.aliyun.com iburst server ntp.tencent.com iburst allow 192.168.0.0/16 local stratum 10重启并同步时间systemctl restart chronyd chronyc makestep【仅从库 slave 执行】# 安装chrony yum install -y chrony systemctl enable chronyd --now # 修改配置文件 vim /etc/chrony.conf注释默认pool行添加以下内容server master iburst重启并同步时间systemctl restart chronyd chronyc makestep二、主库Master专属配置步骤以下所有命令仅在 master 节点执行。1. 修改主配置文件/etc/my.cnfvim /etc/my.cnf找到[mysqld]段追加以下配置末尾保留!includedir有关相关核心参数含义可以参考文章首部博主帖子里面讲解的很详细[mysqld] # 主从复制核心参数 server-id 4 log_bin mysql-bin binlog_format ROW expire_logs_days 7 sync_binlog 1 binlog-ignore-db mysql binlog-ignore-db information_schema binlog-ignore-db performance_schema binlog-ignore-db sys # 性能优化参数 innodb_buffer_pool_size 2560M innodb_buffer_pool_instances 4 max_connections 500 character-set-server utf8mb4 collation-server utf8mb4_unicode_ci # 引入子配置目录默认已有则保留 !includedir /etc/my.cnf.d2. 创建子配置文件mysql-server.cnf说明MySQL 官方 RPM 包默认不自带该文件需手动创建。# 确保目录存在 mkdir -p /etc/my.cnf.d # 创建并编辑子配置 vim /etc/my.cnf.d/mysql-server.cnf写入内容[mysqld] datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock log-error/var/log/mysql/mysqld.log pid-file/run/mysqld/mysqld.pid3. 重启服务并验证配置生效systemctl restart mysqld验证核心参数mysql -uroot -p你的root密码 -e show variables like log_bin; mysql -uroot -p你的root密码 -e show variables like server_id; mysql -uroot -p你的root密码 -e show variables like binlog_format;预期结果log_bin ON、server_id 4、binlog_format ROW。4. 创建复制专用账号登录 MySQL 命令行mysql -uroot -p你的root密码执行 SQLcreate user replslave identified with mysql_native_password by Abc1234; grant replication slave on *.* to replslave; flush privileges;5. 记录 binlog 状态从库配置需要show master status;记下输出中的File如mysql-bin.000001和Position如864后续从库配置必须使用这两个值。三、从库Slave专属配置步骤以下所有命令仅在 slave 节点执行。1. 修改主配置文件/etc/my.cnfvim /etc/my.cnf找到[mysqld]段追加以下配置[mysqld] # 主从复制核心参数 server-id 5 relay-log mysql-relay-bin read_only 1 relay_log_recovery 1 # 并行复制优化 slave_parallel_type LOGICAL_CLOCK slave_parallel_workers 4 # 性能优化参数与主库一致 innodb_buffer_pool_size 2560M innodb_buffer_pool_instances 4 max_connections 500 character-set-server utf8mb4 collation-server utf8mb4_unicode_ci # 引入子配置目录 !includedir /etc/my.cnf.d2. 创建子配置文件mysql-server.cnf与主库完全一致手动创建mkdir -p /etc/my.cnf.d vim /etc/my.cnf.d/mysql-server.cnf[mysqld] datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock log-error/var/log/mysql/mysqld.log pid-file/run/mysqld/mysqld.pid3. 重启服务并验证配置生效systemctl restart mysqld验证核心参数mysql -uroot -p你的root密码 -e show variables like server_id; mysql -uroot -p你的root密码 -e show variables like read_only;预期结果server_id 5、read_only ON。4. 配置主从复制关联登录 MySQL 命令行mysql -uroot -p你的root密码执行 SQL填入主库记录的 binlog 文件名和偏移量CHANGE MASTER TO MASTER_HOSTmaster, MASTER_USERrepl, MASTER_PASSWORDAbc1234, MASTER_PORT3306, MASTER_LOG_FILEmysql-bin.000001, MASTER_LOG_POS864;5. 启动复制线程start slave;查看复制状态show slave status\G核心校验标准Slave_IO_Running: YesSlave_SQL_Running: YesLast_IO_Error和Last_SQL_Error为空四、主从同步功能验证【仅主库 master 执行】写入测试数据create database cloud; use cloud; create table user (id int auto_increment primary key, username varchar(50) not null); insert into user (username) values (test_data);【仅从库 slave 执行】查询验证use cloud; select * from user;能查询到test_data记录则主从复制部署成功。五、故障标准化排查步骤第一步【仅从库执行】检查复制核心状态必做第一步show slave status\G重点核对 4 个字段字段正常状态异常方向Slave_IO_RunningYes网络、账号、binlog 文件问题Slave_SQL_RunningYes数据不一致、SQL 执行报错Last_IO_Error空IO 线程具体报错信息Last_SQL_Error空SQL 线程具体报错信息第二步【仅主库执行】排查主库端问题当Slave_IO_Running No或主库操作未同步时执行。确认 binlog 已开启show variables like log_bin;若为OFF说明配置未生效需检查/etc/my.cnf并重启 MySQL。确认 server-id 生效show variables like server_id;值必须非 0且与从库不重复。检查复制账号权限show grants for replslave;必须包含REPLICATION SLAVE权限。确认操作已写入 binlogshow master status;执行写操作后Position数值应增长未增长说明操作被binlog-ignore-db规则忽略。避坑提醒binlog-ignore-db基于当前默认数据库判断若先use mysql再建业务库操作不会记录 binlog。第三步【仅从库执行】排查从库端问题测试主库网络与端口连通性# 测试3306端口 telnet master 3306 # 用复制账号直连主库 mysql -urepl -pAbc1234 -h master -P 3306连接失败需排查防火墙、主机名解析、账号权限。确认 server-id 不重复show variables like server_id;必须与主库数值不同。查看中继日志是否生成ls /var/lib/mysql/mysql-relay-bin*无文件说明 IO 线程未正常拉取日志。第四步数据一致性错误修复当Slave_SQL_Running No且报错为 1062主键冲突、1032记录不存在时执行。新搭建环境推荐方案主库全量备份数据记录最新File和Position从库清空对应数据库导入主库备份从库重新执行CHANGE MASTER TO填入最新位点再启动复制。临时应急方案生产慎用会导致数据不一致stop slave; set global sql_slave_skip_counter 1; start slave;六、典型问题速查问题现象执行节点解决方向/etc/my.cnf.d/mysql-server.cnf不存在主 从官方 RPM 默认不提供按本文步骤手动创建即可主库建库建表从库无数据先从后主先查从库复制线程状态再查主库 binlog 是否开启、操作是否被忽略Slave_IO_Running No主 从排查网络、端口、账号密码、server-id 重复、binlog 文件过期Slave_SQL_Running No从库查看具体报错修复数据一致性后重启复制同步延迟持续增大从库开启并行复制、优化大事务、提升从库硬件性能