咸宁市网站建设_网站建设公司_服务器维护_seo优化
2025/12/23 13:39:36 网站建设 项目流程

麒麟系统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

image

二. 安装部署

安装主库,从库也是如此,在此不赘述

[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/datalower_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:

[root@localhost ~]# /usr/local/mysql-8.0.44/bin/mysqld  --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql

 使用system管理MySQL(推荐):

[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是不需要密码的。

[root@localhost ~]# mysql -S /var/lib/mysql/mysql.sockmysql> alter user 'root'@'localhost' identified by '123456';
mysql> flush privileges;

修改密码后,就不能用sock方式登录,需要用以下方式登录:

[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 - GPLCopyright (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 同步的工作原理

  1. 产生标识: 当主库(Master)提交一个事务时,会自动给这个事务分配一个 GTID,并记录到 binlog 中。

  2. 传输日志: 事务传送到从库(Slave)并存储在 relay log 中。从库会读取这个 GTID 并将其设置为自己的 Retrieved_Gtid_Set

  3. 执行并排除: 从库的 SQL 线程读取事务。在执行前,它先检查这个 GTID 是否已经在自己的 Executed_Gtid_Set(已执行清单)中。

    • 如果没有:执行该事务。

    • 如果已经有:说明该事务已经同步过,直接忽略(这种幂等性保证了数据不会重复)。

 

192.168.10.1(主库)

192.168.10.2(从库)

3.1 配置 my.cnf(重点)

Master 节点 /etc/my.cnf

[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

[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/datalower_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️⃣ 创建复制用户

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)

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️⃣ 启动复制

mysql> START SLAVE;

3️⃣ 检查状态

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
mysql> SHOW SLAVE STATUS\G*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.10.1Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000002Read_Master_Log_Pos: 870Relay_Log_File: relay-bin.000003Relay_Log_Pos: 1086Relay_Master_Log_File: mysql-bin.000002Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 870Relay_Log_Space: 2194Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_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: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1Master_UUID: bd6584ff-dfad-11f0-b121-00163e32e122Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: bd6584ff-dfad-11f0-b121-00163e32e122:1-6Executed_Gtid_Set: bd6584ff-dfad-11f0-b121-00163e32e122:1-6Auto_Position: 1Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0Network_Namespace: 
1 row in set, 1 warning (0.00 sec)
 
 

3.4 验证 GTID 主从

主库

主库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)

从库

从库
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)
验证成功!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询