CentOS8.2 MySQL8主从复制的实现

作者: 温新

分类: 【MySql】

阅读: 2372

时间: 2021-10-25 12:17:53

作者:温新

时间:2021-10-25

之前基于MySQL5.7.26实现过主从复制,详记windows下MySQL主从复制的实现。无论是MySQL5.x还是MySQL8.x,主从复制实现的原理都是一样的。但是,MySQL8有点不同了。安装完成后,就会发现MySQL的配置文件没有了,这一个,另外配置文件从my.ini变成了my.cnf。

MySQL8.x中,它的配置文件在哪?my.cnf配置文件在/etc目录下。下面简单记录Linux下实现MySQL主从复制。

所有记录,都是亲自实测并实现后记录的。MySQL8实现主从复制,关于my.cny的配置就出现的很多问题,最后给出一个最简单的记录实现。

MySQL主从复制原理

  • 1)master主库开启bin-log二进制日志文件,当有对MySQL操作的事件时,会开启一个线程,把内容写入到二进制日志,然后再执行相关操作;
  • 2)slave从库连接到主库,启动复制后,从库创建一个I/O线程,监听主库bin-log的变化,当有变化时将内容写入到slave的relay log中继日志;还会创建一个SQL线程用于监听relay log的变化,从中读取内容到数据库。

MySQL主从配置注意点

  • 操作系统一致(不一致也可以实现)
  • 数据库版本最好一致

我使用的环境说明

虚拟机中准备两个数据库。我使用源码安装。

  • 系统:CentOS8.2
  • 数据库:MySQL-8.0.22
  • IP地址:主库(master) 192.168.157.129; 从库(slave)192.168.157.132

实现主从复制

master主库的配置

第一步:新建配置文件

vim /etc/my.cnf

第二步:添加配置内容到my.cnf保存并退出

[mysqld]
log-bin=mysql-bin
server-id=1
# 指定从库同步的数据库
binlog-do-db=master_slave_test

第三步:重启MySQL

systemctl restart mysql.service

第四步:创建用于从库复制的用户

# 创建从库复制的用户
mysql> create user 'myslave'@'182.168.157.132' identified with mysql_native_password by '123456';
# 分配壄
mysql> grant replication slave on *.* to 'myslave'@'182.168.157.132';

# 刷新
mysql> flush privileges;

第五步:查看master主库 binary log文件名和position位置

需要登录到MySQL中。

mysql> show master status;

+------------------+----------+-------------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB      | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+-------------------+------------------+-------------------+
| mysql-bin.000003 |      379 | master_slave_test |                  |                   |
+------------------+----------+-------------------+------------------+-------------------+
1 row in set (0.00 sec)

slave从库配置

第一步:新建配置文件

vim /etc/my.cnf

第二步:添加配置内容到my.cnf保存并退出

[mysqld]
server-id=2

第三步:重启MySQL

systemctl restart mysql.service

第四步:在slave从库上设置连接主库参数。需要登录从库的mysql

mysql> CHANGE MASTER TO
MASTER_HOST='192.168.157.129',
MASTER_USER='myslave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=379;

MASTER_HOST 为主库地址

MASTER_USER 是在主库创建的,用于复制使用的用户

MASTER_LOG_FILE 为二进制节点

MASTER_LOG_POS 为从这个位置开始复制

第五步:启动slave复制

mysql> start slave;

其他命令

  • reset slave 重置从库
  • stop slave 停止从库

第六步:查看是否开启复制

mysql> show master status\G;

注意,这一步需要关注两个非常重要的信息,它说明了是否成功开启了主从复制,信息如下:

               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.157.129
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 379
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 324
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

只有当Slave_IO_RunningSlave_SQL_Running全部为Yes时,才说明主从复制已经成功。

主从复制测试

第一步:master主库中创建一个表

mysql> use master_slave_test;
mysql> create table t1(id int not null);

第二步:slave从库查看是否同步成功

mysql> use master_slave_test;
mysql> show tables;
+-----------------------------+
| Tables_in_master_slave_test |
+-----------------------------+
| t2                          |
+-----------------------------+
1 row in set (0.00 sec)

可以看到主从复制已经完成。

总结:我在配置MySQL8的主从时,因为my.cnf配置文件,遇到了不少的问题。由于版本的不同,出现的问题也可能不一样,但是配置一次后,还是会发现,其实挺简单的,问题就是记不住。因此,笔记就来了。

我是温新

每天进步一点,就一点点

请登录后再评论