ubuntu mysql 8.0.42 基于二进制日志文件位置和GTID主从复制配置
目录
1 操作系统信息
2 MySql数据库版本
3 主机列表
4 MySQL服务器都安装依赖
5 主库服务器安装mysql软件步骤:
6 从服务器安装mysql软件步骤
7 基于二进制日志文件位置的主从复制配置
8 使用全局事务标识符进行主从复制(GTID)
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 'repl@192.168.254.51: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;