主从复制有一主一从、一主多从、多主一从等多种模式,这里搭建一主一从模式,其他模式搭建过程的类似。

1、准备工作

  准备两台虚拟机,这里准备了两台虚拟机,并在两个节点安装MySQL。

192.168.33.55 (主节点)
192.168.33.11 (从节点)
mysql version : 8.0.31

2、主从复制搭建

2.1、在主从节点同时创建mall数据库

  

2.2、创建表

CREATE TABLE `order` (
 `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
 `price` decimal(10,2) NOT NULL COMMENT '价格',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ci;

2.3、添加配置

3.3.1、主节点配置

vi /etc/my.cnf

  添加如下配置:

#在mysqld模块中添加如下配置信息
log-bin=mysql-bin #二进制文件名称
binlog-format=ROW  #二进制日志格式
server-id=53306        #服务id,各节点不能相同,一般使用ip最后一位 + 数据库端口号
binlog-do-db=mall     #同步的数据库名称
binlog-ignore-db=mysql  #忽略的数据库名称

3.3.2、从节点配置

vi /etc/my.cnf

  添加如下配置:

#在mysqld模块中添加如下配置信息
log-bin=mysql-bin       #二进制文件的名称
binlog-format=ROW       #二进制文件的格式
server-id=13306         #服务器的id

3.3.3、注意事项

  主从配置一定要添加在[mysqld]下,我第一次配置将配置内容添加在了[mysqld_safe]下,my.cnf配置的文件内容未生效,导致主从的服务id相同,丛节点出现如下错误:

  修改完配置后,重启数据库。

2.4、登录主库,创建绑定账号

  登录主数据库 mysql -u root -p

4.4.1、创建绑定用户

  登录主数据库mysql -u root -p,创建绑定用户:

--授权操作
create user 'snails'@'%' IDENTIFIED BY 'snails';
GRANT REPLICATION SLAVE ON *.* TO 'snails'@'%';
alter user 'snails'@'%' IDENTIFIED WITH mysql_native_password BY 'snails';

4.4.2、查看主库状态

show master status

   记录File和Position,在从数据库连接主数据库时需要用到。

4.4.3、登录从数据库连接主服务器

  登录从数据库 mysql -u root -p,执行连接主数据库的命令:

change master to master_host='192.168.33.55',master_user='snails',master_password='snails',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=1254;

4.4.4、启动slave

start slave;

4.4.5、查看slave状态

show slave status\G

   当IO、SQL运行为Yes时,表示主从复制配置成功。

4.4.6、验证主从复制

  在主数据库中添加记录:

    

  稍等片刻,登录从数据库,查看数据同步情况。

  

3、搭建过程中出现的问题

3.1、主从配置my.cnf未生效导致服务id重复

  执行show slave status\G,查看从库状态时出现:

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

   在my.cnf配置文件中,主节点数据库的server-id配置为 53306,从节点数据库的server-id配置的为13304。但登录主从数据库mysql -u root -p,执行查看服务id命令:

show variables like 'server_id';

  发现无论是主节点还是从节点,server_id都为 1,my.cnf配置文件没有生效。

问题原因:

  my.cnf的配置内容写在了[mysqld_safe]标签后面,导致未生效。

解决方案:

  将配置内容设置到[mysqld]标签后,[mysqld_safe]标签前。

3.2、主库默认插件导致同步权限问题

  执行show slave status\G,查看从库状态时出现:

Last_IO_Error: error connecting to master ‘slave@192.168.33.55:3306’ – retry-time: 60 retries: 1 message: Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.

问题原因:

  主库plugin是caching_sha2_password 导致连接不上,修改为mysql_native_password即可解决。

解决方案:

  登录主数据库mysql -u root -p,执行如下命令:

alter user 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave';

3.3、binlog日志文件不匹配同步失败

  执行show slave status\G,查看从库状态时出现:

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’

 问题原因:

  日志文件读取错误,在从数据与主数据库建立关系时,master_log_file文件名称与主数据库中的文件名称不一致,导致无法读取日志文件

  从数据库与主数据库建立关系的日志名称:

  主数据库,show master status\G 的 File名称。

3.4、相同的server UUIDS问题

  执行show slave status\G,查看从库状态时出现:

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

问题原因:

  主数据库与从数据的server UUID相同。登录主从数据库mysql -u root -p,查看uuid值:

show variables like '%server_uuid%';

解决方案:

  执行如下命令,查看auto.cnf配置文件,一般在mysql的数据文件目录中。

find -name auto.cnf

  修改auto.cnf中的uuid值使得主从数据库的uuid不同即可。

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。