麒麟V10离线部署MySQL 5.7集群必须用对应架构二进制包手动初始化并配置systemd服务;需彻底清除MariaDB残留、统一时钟、关闭SELinux与防火墙,主从my.cnf中server-id、log-bin、read_only须按角色差异化配置。

直接说结论:麒麟V10上离线部署MySQL 5.7集群,**不能用RPM包,必须用aarch64/x86_64二进制包 + 手动初始化 + 自定义systemd服务**;主从复制本身不依赖网络安装源,但前提是每个节点的MySQL二进制环境完全一致、时钟同步、SELinux和防火墙已关闭——否则CHANGE MASTER TO会卡在IO线程启动或报ERROR 2003 (HY000)。
确认架构并下载对应二进制包
麒麟V10有x86_64和aarch64两种主流版本,混用会导致mysqld: cannot execute binary file: Exec format error。必须先执行:
uname -m
输出aarch64就去华为镜像站或可信社区找mysql-5.7.27-aarch64.tar.gz这类明确带aarch64后缀的包;输出x86_64则用MySQL官网归档页的mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz。别信“通用版”“兼容版”——ARM服务器跑x86包必失败。
常见错误现象:
- 解压后
bin/mysqld无法执行,file bin/mysqld显示“ELF 64-bit LSB pie executable, x86-64”却在aarch64系统运行 -
./mysqld --version直接段错误(Segmentation fault)
初始化前必须清理MariaDB残留
麒麟V10默认预装深度定制版MariaDB,其/etc/my.cnf、/var/lib/mysql、共享库(如libmysqlclient.so.18)会与MySQL 5.7冲突,导致初始化时mysqld静默退出或报Table 'mysql.plugin' doesn't exist。
彻底卸载命令必须包含:
rpm -qa | grep -E 'mariadb|mysql' | xargs rpm -e --nodeps
然后手动删除:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
rm -rf /var/lib/mysql /etc/my.cnf* /usr/lib64/libmysqlclient*- 检查
ls /usr/lib64/ | grep mysql,删掉所有残留so文件 - 运行
find / -name "*mysql*" -type d 2>/dev/null | grep -E "(var|etc|usr)"确认无隐藏配置目录
主从节点的my.cnf关键差异项
同一套二进制包可复用于所有节点,但my.cnf中以下三项必须逐节点手工修改,不能复制粘贴:
-
server-id:必须为整数且全集群唯一(如主库设1,从库分别设2、3);设成相同值会导致主从复制中断且无明显报错 -
log-bin:仅主库开启(log-bin = mysql-bin),从库必须注释或删除该行,否则启动失败 -
read_only:从库建议设为1(防止误写),主库必须为0或不配置
其他如datadir、basedir、字符集等可保持一致。注意socket路径要统一(推荐/tmp/mysql.sock),否则mysql -S连接会报Can't connect to local MySQL server through socket。
systemd服务文件不能直接用support-files/mysql.server
麒麟V10使用systemd,而MySQL 5.7自带的support-files/mysql.server是SysV init脚本,在systemd下chkconfig无效,且无法正确传递--defaults-file参数,导致启动时读不到/etc/my.cnf,进而用默认datadir=/var/lib/mysql——这会初始化失败或数据写到错误位置。
正确做法是手写/etc/systemd/system/mysqld.service:
[Unit] Description=MySQL Server After=network.target [Service] Type=forking User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize Restart=on-failure [Install] WantedBy=multi-user.target
然后执行:
systemctl daemon-reload systemctl enable mysqld systemctl start mysqld
若systemctl status mysqld显示Active: failed,优先检查journalctl -u mysqld -n 50里是否有unknown variable或Can't open the mysql.plugin table——基本都是my.cnf路径没传进去或MariaDB残留未清干净。
最易被忽略的一点:主从集群中,从库执行START SLAVE后,必须立刻检查SHOW SLAVE STATUS\G里的Seconds_Behind_Master和Slave_IO_Running/Slave_SQL_Running。只要其中任一为No,就不能认为复制建立成功;此时Last_IO_Error或Last_SQL_Error字段才是真实线索,而不是重试START SLAVE。

















