1、Master(主数据库)将用户的操作命令以二进制的方式保存到bin-log下。
2、Slave (从数据库)通过io进程,连接到主数据库,请求主数据库当中指定日志文件中的指定位置后的内容。
3、Master接收到io的请求后,负责将IO所需要指定请求信息,发送给Slave 的IO进程。
4、Slave的IO进程收到信息后,将日志信息发添加Slave到中继日志relay-log的最末端。
5、Slave在检测到中继日志添加内容后,会解析在Master其中执行的命令,并在Slave当中执行。
需要准备两台服务器
安装mysql版本必须一致(mysql 8.4.5 )
ntpdate ntp.aliyun.com
[mysqld]
server-id = 1
log-bin = master-bin
log-slave-updates=true
#server-id 主从ID 必须不同
#log-bin 主服务器日志
log-slave-updates 允许从服务器更新
systemctl restart mysqld
#create创建用户名为test用户指定主机ip才可以登录 ,也可以不指定主机ip使用 %
CREATE USER 'test'@"192.168.19.134" IDENTIFIED BY 'xxx'
CREATE USER 'test'@"%" IDENTIFIED BY 'xxx'
#grant授权所有库文件给hisen用户
GRANT REPLICATION SLAVE ON *.* TO 'hisen'@'192.168.19.134' ;
SHOW BINARY LOG STATUS;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000007 | 860| | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (1.06 sec)
[mysqld]
server-id = 2
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
systemctl restart mysqld
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='主库ip',
SOURCE_USER='主库上复制用户',
SOURCE_PASSWORD='主库上复制用户的密码',
SOURCE_PORT=3306,
SOURCE_LOG_FILE='mysql-bin.000002',
SOURCE_LOG_POS=158,
SOURCE_SSL=1;
示例
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.19.134',
SOURCE_USER='hisen',
SOURCE_PASSWORD='Zs123456.',
SOURCE_PORT=3306,
SOURCE_LOG_FILE='master-bin.000007',
SOURCE_LOG_POS=860, SOURCE_SSL=1;
4、开启从复制
START replica;
SHOW replica STATUS;
主服务器上面创建一个数据库和一个表
create database fash;
use fash;
create table users (
-> id INT PRIMARY KEY,
-> name VARCHAR(50));
INSERT INTO users(id ,name) values (1, 'test');
从服务器去验证是否存在
show databases;
+--------------------+
| Database |
+--------------------+
| fash |
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
use fash;
mysql> select * FROM users;
+----+------+
| id | name |
+----+------+
| 1 | test |
+----+------+
#代表主从复制成功
借鉴:超详细!MySQL如何实现主从复制和读写分离(原理详解和实操)_mysql主从复制-CSDN博客
mysql8.4:搭建主从复制(mysql 8.4.1) - 刘宏缔的架构森林 - 博客园