ubuntu mysql 8.0.42 基于二进制日志文件位置和GTID主从复制配置

目录

[1 操作系统信息](#1 操作系统信息)

[2 MySql数据库版本](#2 MySql数据库版本)

[3 主机列表](#3 主机列表)

[4 MySQL服务器都安装依赖](#4 MySQL服务器都安装依赖)

[5 主库服务器安装mysql软件步骤:](#5 主库服务器安装mysql软件步骤:)

[6 从服务器安装mysql软件步骤](#6 从服务器安装mysql软件步骤)

[7 基于二进制日志文件位置的主从复制配置](#7 基于二进制日志文件位置的主从复制配置)

[8 使用全局事务标识符进行主从复制(GTID)](#8 使用全局事务标识符进行主从复制(GTID))

[9 部署过程遇到问题](#9 部署过程遇到问题)


1 操作系统信息

root@u24-mysql-51:/mysql# cat /etc/issue

Ubuntu 24.04.2 LTS \n \l

2 MySql数据库版本

mysql-8.0.42-linux-glibc2.28-x86_64.tar.xz

3 主机列表

192.168.254.51 #主库

192.168.254.52 #从库

4 MySQL服务器都安装依赖

apt-get install libaio1

5 主库服务器安装mysql软件步骤:

tar -xf mysql-8.0.42-linux-glibc2.28-x86_64.tar.xz -C /usr/local

cd /usr/local

mv mysql-8.0.42-linux-glibc2.28-x86_64 mysql-8.0.42

#创建用户和组

groudadd mysql

useradd -g mysql -s /sbin/nologin mysql

#给MySql软件目录授权

chown -r mysql:mysql /usr/local/mysql-8.0.42

#编写my.cnf配置文件

root@u24-mysql-51:~# cat /etc/my.cnf

client

socket = /mysql/data/mysql.sock

mysqld

basedir = /usr/local/mysql-8.0.42

datadir = /mysql/data

user = mysql

port = 3306

socket = /mysql/data/mysql.sock

log_error = /mysql/data/mysqld.err

log_timestamps = system

log-bin = mysql-bin

server-id = 51

#初始化数据库

mkdir /mysql/data -p

chown -R mysql:mysql /mysql/data

/usr/local/mysql-8.0.42/bin/mysqld --defaults-file=/etc/my.cnf --initialize

#配置启动文件systemd

root@u24-mysql-52:/mysql/data# cat /lib/systemd/system/mysql.service

Unit

Description=MySQL server

Documentation=man:mysql(8)

After=network.target

Service

User=mysql

Group=mysql

Type=forking

PIDFile=/mysql/data/mysqld.pid

TimeoutSec=0

ExecStart=/usr/local/mysql-8.0.42/bin/mysqld --defaults-file=/etc/my.cnf --pid-file=/mysql/data/mysqld.pid --daemonize $MYSQLD_OTPS

EnvironmentFile=-/etc/sysconfig/mysql

LimitNOFILE=65535

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=False

Install

WantedBy=multi-user.target

Alias=mysqld.service

#启动MySQL

systemctl start mysql

systemctl enable mysql

#登录并修改密码

root@u24-mysql-51:~# grep password /mysql/data/mysqld.err

2025-05-28T23:13:58.538997+08:00 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: shAuAVU%f5a-

/usr/local/mysql-8.0.42/bin/mysql -uroot -p'shAuAVU%f5a-'

mysql>alter user user() identified by '123456';

#配置环境变量

echo 'export PATH=$PATH:/usr/local/mysql-8.0.42/bin' >>~/.bashrc

6 从服务器安装mysql软件步骤

#从主库复制软件和数据库文件

rsync -r /mysql 192.168.254.52:/

rsync -r /usr/local/mysql-8.0.42 192.168.254.52:/usr/local/

rsync /lib/systemd/system/mysql.service 192.168.254.52:/lib/systemd/system/mysql.service

rsync /etc/my.cnf 192.168.254.52:/etc/my.cnf

#创建用户和组

groupadd mysql

useradd -g mysql -s /sbin/nologin mysql

#给软件和数据库文件授权

chown -R mysql:mysql /mysql/

chown -R mysql:mysql /usr/local/mysql-8.0.42

#配置环境变量

echo 'export PATH=$PATH:/usr/local/mysql-8.0.42/bin' >>~/.bashrc

source ~/.bashrc

#启动MySQL

systemctl start mysql

systemctl enable mysql

7 基于二进制日志文件位置的主从复制配置

7.1 主库配置

添加server-id和开启binlog

root@u24-mysql-51:~# cat /etc/my.cnf

mysqld

log-bin = mysql-bin

server-id = 51

systemctl restart mysql

#创建用于复制的用户

mysql -uroot -p

mysql> CREATE USER 'repl'@'192.168.254.%' IDENTIFIED BY 'password';

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.254.%';

mysql> FLUSH TABLES WITH READ LOCK;

mysql> show master status \G;

*************************** 1. row ***************************

File: mysql-bin.000007

Position: 157

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

#使用 mysqldump 备份数据

root@u24-mysql-51:~# mysqldump -uroot -p --all-databases --source-data > data.sql

#解锁

mysql -uroot -p

mysql> unlock tables;

#将data.sql备份文件传送到从库

root@u24-mysql-51:~#rsync data.sql 192.168.254.52:~

7.2 从库配置(可以配置多台从库)

#添加server-id

root@u24-mysql-51:~# cat /etc/my.cnf

mysqld

server-id = 52

#修改uuid,保证主从服务器上uuid是唯一,否则出现问题1报错

root@u24-mysql-52:~# vi /mysql/data/auto.cnf

auto

server-uuid=5d7fd409-3bd6-11f0-9d66-000c29704178

#重启数据库

systemctl restart mysql

#将data.sql数据导入数据库

root@u24-mysql-52:~# mysql -uroot -p < data.sql

#在从库服务器上设置源配置

mysql>change replication source to source_host='192.168.254.51', source_user='repl', source_log_file='mysql-bin.000007', source_log_pos=157, SOURCE_PASSWORD='password',get_master_public_key=1;

mysql> start replica;

Query OK, 0 rows affected (0.41 sec)

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for source to send event

Master_Host: 192.168.254.51

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000007

Read_Master_Log_Pos: 157

Relay_Log_File: u24-mysql-52-relay-bin.000002

Relay_Log_Pos: 326

Relay_Master_Log_File: mysql-bin.000007

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

#出现以下两个yes说明主从复制已经完成

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

8 使用全局事务标识符进行主从复制(GTID)

8.1 主库配置

#在my.cnf添加以下参数

root@u24-mysql-51:~# cat /etc/my.cnf

mysqld

log-bin = mysql-bin

server-id = 51

gtid_mode=ON

enforce-gtid-consistency=ON

#创建用于复制的用户

mysql -uroot -p

mysql> CREATE USER 'repl'@'192.168.254.%' IDENTIFIED BY 'password';

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.254.%';

mysql> FLUSH TABLES WITH READ LOCK;

#使用 mysqldump 备份数据

root@u24-mysql-51:~# mysqldump -uroot -p --all-databases --source-data > data.sql

#解锁

mysql -uroot -p

mysql> unlock tables;

#将data.sql备份文件传送到从库

root@u24-mysql-51:~#rsync data.sql 192.168.254.52:~

8.2 从库配置

#在my.cnf添加以下参数

root@u24-mysql-51:~# cat /etc/my.cnf

mysqld

log-bin = mysql-bin

server-id = 52

gtid_mode=ON

enforce-gtid-consistency=ON

#修改uuid,保证主从服务器上uuid是唯一,否则出现问题1报错

root@u24-mysql-52:~# vi /mysql/data/auto.cnf

auto

server-uuid=5d7fd409-3bd6-11f0-9d66-000c29704178

#将data.sql数据导入数据库

root@u24-mysql-52:~# mysql -uroot -p < data.sql

#在从库服务器上设置源配置

mysql>change replication source to source_host='192.168.254.51', source_user='repl', SOURCE_PASSWORD='password',SOURCE_AUTO_POSITION = 1,get_master_public_key=1;

mysql> start replica;

Query OK, 0 rows affected (0.41 sec)

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for source to send event

Master_Host: 192.168.254.51

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000007

Read_Master_Log_Pos: 157

Relay_Log_File: u24-mysql-52-relay-bin.000002

Relay_Log_Pos: 326

Relay_Master_Log_File: mysql-bin.000007

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

#出现以下两个yes说明主从复制已经完成

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

9 部署过程遇到问题

问题1:

mysql> show replica status \G

Source_SSL_Verify_Server_Cert: Yes

Last_IO_Errno: 13117

Last_IO_Error: Fatal error: The replica I/O thread stops because source and replica have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

解决方法:

修改server-uuid的值,保证集群唯一

root@u24-mysql-52:/mysql/data# vi auto.cnf

auto

server-uuid=5d7fd409-3bd6-11f0-9d66-000c29704178

问题2:

mysql> show replica status \G;

Source_SSL_Verify_Server_Cert: Yes

Last_IO_Errno: 2061

Last_IO_Error: Error connecting to source '[email protected]:3306'. This was attempt 11/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

解决方法:

添加:get_master_public_key=1 参数

mysql>change replication source to source_host='192.168.254.51', source_user='repl', source_log_file='mysql-bin.000007', source_log_pos=157, SOURCE_PASSWORD='password',,get_master_public_key=1;

相关推荐
�FENG3 小时前
MySQL常见故障排查与性能优化
mysql·性能优化·常见故障
不剪发的Tony老师3 小时前
sqlite-vec:谁说SQLite不是向量数据库?
数据库·人工智能·sqlite
敲键盘的小夜猫5 小时前
Milvus向量Search查询综合案例实战(下)
数据库·python·milvus
钢铁男儿5 小时前
深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制
java·数据库·c#
有时间要学习6 小时前
MySQL——事务
数据库·mysql
翻滚吧键盘6 小时前
Spring Boot,注解,@ComponentScan
java·数据库·spring boot
not coder6 小时前
Pytest Fixture 详解
数据库·pytest
小光学长6 小时前
基于vue框架的独居老人上门护理小程序的设计r322q(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
weixin_472339466 小时前
MySQL优化全链路实践:从慢查询治理到架构升级
数据库·mysql·架构
运维老曾6 小时前
MySQ-8.42 MGR 组复制部署及详解
数据库·mysql