主从复制搭建

本文详细描述了如何在三台虚拟机上配置MySQL主从复制,包括调整防火墙、SELinux状态、设置复制用户、初始化数据、使用GTID模式以及半同步复制选项。步骤涉及修改my.cnf文件、执行SQL命令和备份恢复操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三台虚拟机

10.0.0.51 db01
10.0.0.52 db02
10.0.0.53 db03
防火墙关闭
systemctl disable firewalld
selinux 关闭
sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config
重启物理机
reboot
#清理环境:

pkill mysqld
rm -rf /data/3306/*
mkdir -p /data/3306/data /data/3306/binlog
chown -R mysql.mysql /data/*

准备配置文件

主库db01:

mv /etc/my.cnf /tmp
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql80
datadir=/data/3306/data
socket=/tmp/mysql.sock
server_id=51
port=3306
secure-file-priv=/tmp
log_bin=/data/3306/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
innodb_undo_directory=/data/3306/data
innodb_undo_tablespaces = 2
innodb_undo_logs = 128
[mysql]
prompt=db01 [\\d]>
EOF

slave1(db02):

mv /etc/my.cnf /tmp
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql80
datadir=/data/3306/data
socket=/tmp/mysql.sock
server_id=52
port=3306
secure-file-priv=/tmp
log_bin=/data/3306/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
innodb_undo_directory=/data/3306/data
innodb_undo_tablespaces = 2
innodb_undo_logs = 128
[mysql]
prompt=db02 [\\d]>
EOF

slave2(db03):

mv /etc/my.cnf /tmp
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql80
datadir=/data/3306/data
socket=/tmp/mysql.sock
server_id=53
port=3306
secure-file-priv=/tmp
log_bin=/data/3306/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
innodb_undo_directory=/data/3306/data
innodb_undo_tablespaces = 2
innodb_undo_logs = 128
log-slave-updates=1
[mysql]
prompt=db03 [\\d]>
EOF

初始化数据

mysqld --initialize-insecure --user=mysql --basedir=//usr/local/mysql80 --datadir=/data/3306/data

启动数据库

/usr/local/mysql80/support-files/mysql.server start

3.1 通过mysqldump(XBK)备份构建传统主从
a.各节点检查server_id、server_uuid、binlog

mysql -e "select @@server_id; select @@server_uuid;show variables like 'log_bin%';"

b.主库(51)创建复制用户和远程管理用户

mysql -e "create user repl@'10.0.0.%' identified with mysql_native_password by '123';grant replication slave on *.* to repl@'10.0.0.%';"

mysql -e "create user root@'10.0.0.%' identified with mysql_native_password by '123';grant all on *.* to root@'10.0.0.%';"

mysql -e "select user,host,plugin from mysql.user;"

主库创建复制用户

alter user root@'localhost' identified with mysql_native_password by '123';

使用pos位点创建主从同步。

change master to master_host='10.0.0.51',master_port=3306,master_user='repl',
master_password='123',master_log_file='binlog.000001',master_log_pos=156, master_connect_retry=30;
 
# master_host:对应主服务器的IP地址。
# master_port:对应主服务器的端口。
# master_user:在主数据库创建的用于同步数据的用户账号。
# master_password:在主数据库创建的用于同步数据的用户密码。
# master_log_file:指定从数据库要复制数据的日志文件,对应show master status显示。
# 的File字段的取值,我这里是master-bin.000001。
# master_log_pos:指定从数据库从哪个位置开始复制数据,对应show master status显示的Position字段# 的取值,我这里是154。

复制相关命令

start slave;  #启动数据库
stop slave;  #关闭数据库
reset slave; #重置数据库

基于GTID复制(保证从库的干净。不要在从库上哪怕建一个用户。)

mysql -e  "CHANGE MASTER TO MASTER_HOST='10.0.0.51', MASTER_USER='repl', MASTER_PASSWORD='123',  MASTER_PORT=3306,  MASTER_AUTO_POSITION=1;"

半同步、增强半同步开启

下面的俩参数 timeout 代表当前事务提交10s没有返回ack断掉变成异步复制的方式。
slave_enabled=1,代表只要一个从库复制成功就返回ack。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2ea967d57b5f467eac6bdc4b9c8908b9.png

问题4业务比较集中的时候可以选择不设置半同步锁的事务。
在这里插入图片描述

MGR架构原理

在这里插入图片描述

change master to master_host=‘127.0.0.1’,master_port=3306,master_user=‘repl’,
master_password=‘123’,master_log_file=‘log.000010’,master_log_pos=154, master_connect_retry=30;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值