Mysql主从复制

一、什么是主从复制

1、Master(主数据库)将用户的操作命令以二进制的方式保存到bin-log下。

2、Slave (从数据库)通过io进程,连接到主数据库,请求主数据库当中指定日志文件中的指定位置后的内容。

3、Master接收到io的请求后,负责将IO所需要指定请求信息,发送给Slave 的IO进程。

4、Slave的IO进程收到信息后,将日志信息发添加Slave到中继日志relay-log的最末端。

5、Slave在检测到中继日志添加内容后,会解析在Master其中执行的命令,并在Slave当中执行。

Mysql主从复制_第1张图片

二、、搭建主从复制

1、环境准备

需要准备两台服务器

安装mysql版本必须一致(mysql 8.4.5 )

2、两台服务器为了保住数据同步必须要时间同步

ntpdate ntp.aliyun.com

3、配置主服务器

1、修改主服务器配置文件/etc/my.cnf

[mysqld]
server-id = 1       
log-bin = master-bin        
log-slave-updates=true

#server-id 主从ID 必须不同
#log-bin  主服务器日志
log-slave-updates 允许从服务器更新 

2、重新启动mysql服务

 systemctl restart mysqld

3、进入mysql 数据库创建用户并授权

#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' ;

4、查看主服务器的二进制文件和位置(为了主服务器同步数据)

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)

4、配置从服务器

1、修改配置文件/etc/my.cnf

[mysqld]
server-id = 2 
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

2、重启myslq服务

 systemctl restart mysqld

3、进入mysql,从服务器连接主服务器

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;

5、.检查复制状态

SHOW replica STATUS;

6、主从复制验证是否成功

主服务器上面创建一个数据库和一个表


 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) - 刘宏缔的架构森林 - 博客园

你可能感兴趣的:(mysql,数据库)