麒麟系统V10部署MySQL8及主从复制🫚
CPU架构是arm版,需下载对应的MySQL包。ARM 架构请用 aarch64 包。
一. 下载安装包
官网:https://dev.mysql.com/downloads/mysql/8.0.html
[root@localhost ~]# wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.44-linux-glibc2.28-aarch64.tar.xz

二. 安装部署
安装主库,从库也是如此,在此不赘述。
如有mariadb,先卸载再安装MySQL。
[root@localhost ~]# rpm -qa | grep -i mariadb
[root@localhost ~]# rpm -e --nodeps $(rpm -qa | grep -i mariadb)
解压安装:
[root@localhost ~]# tar -xvf mysql-8.0.44-linux-glibc2.28-aarch64.tar.xz -C /usr/local/
[root@localhost local]# cd /usr/local/
[root@localhost local]# mv mysql-8.0.44-linux-glibc2.28-aarch64/ mysql-8.0.44
创建mysql用户及组:
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -r -g mysql -s /sbin/nologin mysql
创建数据及日志目录:
[root@localhost ~]# mkdir /var/lib/mysql
[root@localhost ~]# mkdir /var/lib/mysql/data
[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql
[root@localhost ~]# mkdir /var/log/mysql
[root@localhost ~]# chown -R mysql:mysql /var/log/mysql
创建MySQL配置文件:
cat /etc/my.cnf
[client]
# 默认连接 MySQL 时使用的字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
[mysqld]
user=mysql
socket=/var/lib/mysql/mysql.sock
port=3306
pid-file=/var/lib/mysql/mysql.pid
basedir=/usr/local/mysql-8.0.44
datadir=/var/lib/mysql/data
lower_case_table_names = 1
#日志配置
log-error=/var/log/mysql/error.log
slow-query-log=1
slow-query-log-file=/var/log/mysql/mysql-slow.log
long_query_time=2
binlog_expire_logs_seconds=604800
# 字符集设置及排序规则
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-authentication-plugin=mysql_native_password
配置MySQL环境变量:
[root@localhost ~]# vim /etc/profile
export PATH=$PATH:/usr/local/mysql-8.0.44/bin
[root@localhost ~]# source /etc/profile
初始化MySQL:
bash
[root@localhost ~]# /usr/local/mysql-8.0.44/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql
使用system管理MySQL(推荐):
bash
[root@localhost ~]# vim /usr/lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql-8.0.44/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=65535
LimitCORE=0
Restart=on-failure
RestartSec=10
PrivateTmp=true
[Install]
WantedBy=multi-user.target
开机自启MySQL:
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable --now mysql
登录MySQL并修改密码:
本地首次使用sock文件登录mysql是不需要密码的。
bash
[root@localhost ~]# mysql -S /var/lib/mysql/mysql.sock
mysql> alter user 'root'@'localhost' identified by '123456';
mysql> flush privileges;
修改密码后,就不能用sock方式登录,需要用以下方式登录:
bash
[root@localhost ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.44 MySQL Community Server - GPL
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
三. 配置主从复制
采用GTID方式配置主从复制。
GTID(Global Transaction Identifier,全局事务标识符)是 MySQL 5.6 引入,并在 8.0 版本中完善的一项核心技术。它为每一个提交的事务分配一个在全复制拓扑结构内全球唯一的编号。
1. GTID 的构成
一个 GTID 的格式通常如下: 3E11FA47-71CA-11E1-9E33-C80AA9429562:23
它分为两部分:
-
Source_ID (UUID): 产生该事务的源服务器的唯一标识(在
auto.cnf中定义)。 -
Transaction_ID: 在该服务器上产生的事务序列号,从 1 开始自增。
2. GTID 同步的工作原理
-
产生标识: 当主库(Master)提交一个事务时,会自动给这个事务分配一个 GTID,并记录到 binlog 中。
-
传输日志: 事务传送到从库(Slave)并存储在 relay log 中。从库会读取这个 GTID 并将其设置为自己的
Retrieved_Gtid_Set。 -
执行并排除: 从库的 SQL 线程读取事务。在执行前,它先检查这个 GTID 是否已经在自己的
Executed_Gtid_Set(已执行清单)中。-
如果没有:执行该事务。
-
如果已经有:说明该事务已经同步过,直接忽略(这种幂等性保证了数据不会重复)。
-
192.168.10.1(主库)
192.168.10.2(从库)
3.1 配置 my.cnf(重点)
Master 节点 /etc/my.cnf
bash
[root@localhost ~]# vim /etc/my.cnf
[client]
# 默认连接 MySQL 时使用的字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
[mysqld]
# ===== 基础配置 =====
user=mysql
port=3306
basedir=/usr/local/mysql-8.0.44
datadir=/var/lib/mysql/data
socket=/var/lib/mysql/mysql.sock
pid-file=/var/lib/mysql/mysql.pid
# ===== 表名大小写 =====
lower_case_table_names=1
# ===== InnoDB核心配置 =====
#innodb_data_file_path=ibdata1:12M:autoextend
#innodb_buffer_pool_size=128M
#innodb_log_file_size=48M
#innodb_file_per_table=ON
# ===== 主从配置 =====
server-id=1
log-bin=mysql-bin # 使用相对路径,会在datadir下创建
#log-bin=/var/lib/mysql/binlog/mysql-bin
# ===== GTID 核心 =====
gtid_mode=ON
enforce_gtid_consistency=ON
log_replica_updates=ON
# ===== 日志配置 =====
log-error=/var/log/mysql/error.log
slow-query-log=1
slow-query-log-file=/var/log/mysql/mysql-slow.log
long_query_time=2
binlog_expire_logs_seconds=604800
# ===== 字符集配置 =====
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
authentication_policy=mysql_native_password
Slave 节点 /etc/my.cnf
bash
[root@localhost ~]# vim /etc/my.cnf
[client]
# 默认连接 MySQL 时使用的字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
[mysqld]
user=mysql
socket=/var/lib/mysql/mysql.sock
port=3306
pid-file=/var/lib/mysql/mysql.pid
basedir=/usr/local/mysql-8.0.44
datadir=/var/lib/mysql/data
lower_case_table_names = 1
#主从配置
server-id=2
log-bin=mysql-bin
binlog_format=ROW
relay-log=/var/lib/mysql/binlog/relay-bin
#设置只读
#read_only=1
#super_read_only=1
# ===== GTID 核心 =====
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
#日志配置
log-error=/var/log/mysql/error.log
slow-query-log=1
slow-query-log-file=/var/log/mysql/mysql-slow.log
long_query_time=2
binlog_expire_logs_seconds=604800
# 字符集设置及排序规则
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-authentication-plugin=mysql_native_password
3.2 主库配置(Master)
1️⃣ 创建复制用户
sql
mysql> CREATE USER 'repl'@'192.168.10.%' IDENTIFIED BY 'Repl@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.10.%';
mysql> FLUSH PRIVILEGES;
3.3 从库配置(Slave)
1️⃣ 设置主库信息(不再指定 binlog)
sql
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.10.1',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='Repl@123',
-> MASTER_PORT=3306,
-> SOURCE_AUTO_POSITION=1;
2️⃣ 启动复制
sql
mysql> START SLAVE;
3️⃣ 检查状态
sql
mysql> SHOW SLAVE STATUS\G
必须看到:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Auto_Position: 1
Retrieved_Gtid_Set: uuid:1-xxx
Executed_Gtid_Set: uuid:1-xxx
Seconds_Behind_Master: 0
sql
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 192.168.10.1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 870
Relay_Log_File: relay-bin.000003
Relay_Log_Pos: 1086
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 870
Relay_Log_Space: 2194
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: bd6584ff-dfad-11f0-b121-00163e32e122
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: bd6584ff-dfad-11f0-b121-00163e32e122:1-6
Executed_Gtid_Set: bd6584ff-dfad-11f0-b121-00163e32e122:1-6
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set, 1 warning (0.00 sec)
3.4 验证 GTID 主从
主库
sql
主库
mysql> CREATE DATABASE gtid_test;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE TABLE gtid_test.t1(id INT);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO gtid_test.t1 VALUES (100);
Query OK, 1 row affected (0.01 sec)
从库
sql
从库
mysql> SELECT * FROM gtid_test.t1;
+------+
| id |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| gtid_test |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
验证成功!