mysql 主从分离搭建

本文详细介绍了MySQL 8.0版本的主从复制配置过程,包括配置文件修改、用户创建、主从节点参数设置、错误排查及解决。重点强调了由于克隆导致的server-uuid冲突问题及其解决方法,确保了主从数据的一致性与同步。

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

MySQL 主从复制的方式有多种,本文主要演示基于基于日志(binlog)的主从复制方式。

MySQL 主从复制(也称 A/B 复制) 的原理

Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,
这些记录叫做二进制日志事件(binary log events);

Slave 通过 I/O 线程读取 Master 中的 binary log events 并写入到它的中继日志(relay log);

Slave 重做中继日志中的事件, 把中继日志中的事件信息一条一条的在本地执行一次,完
成数据在本地的存储, 从而实现将改变反映到它自己的数据(数据重放)。

主从配置需要注意的点

主从服务器操作系统版本和位数一致;

Master 和 Slave 数据库的版本要一致;

Master 和 Slave 数据库中的数据要一致;

Master 开启二进制日志, Master 和 Slave 的 server_id 在局域网内必须唯一;

以上内容抄的:原文链接:https://blog.youkuaiyun.com/zyhlwzy/article/details/80569422

注意:

        我是使用VM虚拟机安装的ubuntu系统,安装的是最新的mysql 8.0,然后克隆出来一个实例

        主节点IP:192.168.75.129

        从节点IP:192.168.75.130

1、主节(Master)点配置

 修改 Master 的配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf

cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf

在mysqld.cnf文件中加入如下配置内容

[mysqld]
log-bin=mysql-bin
server-id=1

2、从节点(Slave)配置

修改 Slave 的配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf

cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf

在my.cnf文件中加入如下配置内容

[mysqld]
server-id=2

3、创建用于复制操作的用户

在主节点创建一个用户repl,用于从节点链接主节点时使用。

mysql> CREATE USER 'repl'@'192.168.75.130' IDENTIFIED WITH mysql_native_password BY 'Ron_master_1';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.75.130';


刷新授权表信息

mysql> flush privileges;


4、获取主节点当前binary log文件名和位置(position)

mysql> SHOW MASTER STATUS;

5、在从(Slave)节点上设置主节点参数

mysql> CHANGE MASTER TO MASTER_HOST='192.168.75.129',MASTER_USER='repl',MASTER_PASSWORD='Ron_master_1',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=156;

6、查看主从同步状态

mysql> show slave status\G;

7、开启主从同步

mysql> start slave;

8、再查看主从同步状态

mysql> show slave status\G;

查看状态时,可能会出现I/O任务启动失败的情况,即如下错误:

 从报错来看,最先以为是server-id冲突了,然后运行命令看了,发现主从mysql的server-id都是正确的,没有冲突

mysql>show variables like 'server_id';

主服务器

从服务器

 后来网上搜了下,因为我是克隆的实例,所以两个mysql的 server-uuid是一样的(仔细看报错,也说明了server-uuid),解决方案如下:

修改uuid配置文件

# sudo find / -name 'auto.cnf'
# sudo vim /data/mysql/auto.cnf
[auto]
server-uuid=804f2ebe-3a1c-11e8-ab46-000c29133368 # 按照这个16进制格式,修改server-uuid,重启mysql即可

获取uuid可以在mysql命令行运行

MySQL [hb3]> select uuid();
+--------------------------------------+
| uuid()                               |
+--------------------------------------+
| a39fd903-3a1c-11e8-ab46-000c29133368 |
+--------------------------------------+
1 row in set (0.00 sec)

9、重新开启同步并查看装态

mysql> start slave;
mysql> show slave status\G;

如果出现报错:ERROR 3021(HY000):this operation cannot be performed with a running salve io thread

可用以下方法尝试

1、停止已经启动的绑定
    stop slave
2、重置绑定
    reset master
3、执行复制主机命令
    change master to master_host = '192.168.12.1' master_user = 'slave' ,master_password ='123456' ,master_log_file = 'mysql-bin.000004',master_log_pos = '881'
4、发现此时已经不报错
5、启动复制
    start slave

最终这就表示成功了

 

 10、测试

我们可以在主库创建个数据库,这个时候从库可会同步过来

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值