CentOS8.2 MySQL8主从复制的实现
作者:温新
时间: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_Running
和Slave_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
配置文件,遇到了不少的问题。由于版本的不同,出现的问题也可能不一样,但是配置一次后,还是会发现,其实挺简单的,问题就是记不住。因此,笔记就来了。
我是温新
每天进步一点,就一点点