ChenZhen 搜索
首页 标签 归档 留言板 友链 ChatGPT 提示库 AI工具导航网 🚇开往 关于我

MySQl高级篇-主从复制

# 主从复制 ## 复制的基本原理 `slave`会从`master`读取`binlog`来进行数据同步 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6328d3b1531842ccb7a8c36697eff764.png) MySQL复制过程分成三步: 1. `master`将改变记录到二进制日志(`binary log`)。这些记录过程叫做二进制日志事件,`binary log events`;

ChenZhen 2024-07-14T20:28:35

MySQl高级篇-主从复制

主从复制

复制的基本原理

slave会从master读取binlog来进行数据同步 在这里插入图片描述 MySQL复制过程分成三步:

  1. master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
  2. slavemasterbinary log events拷贝到它的中继日志(relay log) ;
  3. slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的且串行化的

复制的基本原则:

  1. 每个slave只有一个master
  2. 每个slave只能有一个唯一的服务器ID
  3. 每个master可以有多个salve

复制的最大问题是延迟。

一主一从常见配置

准备工作

一、mysql版本一致且后台以服务运行

二、主从都配置在[mysqld]结点下,都是小写

服务器配置

一、主机修改my.cnf配置文件:

1.、[必须]主服务器唯一ID:

server-id=1

2、[必须]启用二进制日志(指定日志存放位置)

log-bin=/var/lib/mysql/mysql-bin

3、 [可选]启用错误日志

log-err=自己本地的路径/mysqlerr

4、[可选]根目录

basedir="本地路径"

5、[可选]临时目录

tmpdir=“自己本地路径”

6、[可选]数据目录

datadir=“自己本地路径/Data/”

7、主机,读写都可以

read-only=O

8、[可选]设置不要复制的数据库

binlog-ignore-db=mysql

9、[可选]设置只复制某个数据库

binlog-do-db=需要复制的主数据库名字

二、从机修改my.cnf配置文件:

1、[必须]从服务器唯一ID

server-id=2

2、[可选]启用二进制日志

log-bin=/var/lib/mysql/mysql-bin

三、配置文件,请主机+从机都重启后台mysql服务

linux中:

service mysql stop
service mysql start

如果你和我一样是用的docker容器可以这样重启:

docker restart xxxxxx

四、在主机上建立帐户并授权slave

在主服务器上执行此命令,允许从服务器使用指定的用户名和密码连接到主服务器,并读取二进制日志进行数据复制。

创建用户并设置密码:

CREATE USER 'xxxx'@'从机器数据库IP' IDENTIFIED BY '123456';

授予用户复制权限:

GRANT REPLICATION SLAVE ON *.* TO 'xxxx'@'从机器数据库IP';

刷新权限

FLUSH PRIVILEGES;
  • GRANT 是MySQL中的一个命令,用于授予用户特定的权限。
  • REPLICATION SLAVE 是授予的权限类型,允许指定用户读取主服务器的二进制日志,以便进行数据复制。
  • ON *.**.*表示权限适用于所有数据库和所有表。也就是说,这个用户可以访问主服务器上的所有数据库进行复制操作。
  • TO 'xxxx'@'从机器数据库IP'xxxx是要创建或更新的用户名,不要使用root
  • IDENTIFIED BY 用于设置或更新指定用户的密码,123456 是该用户的密码。

查询master的状态

show master status;

记录下FilePosition的值 在这里插入图片描述 执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

五、在Linux从机上配置需要复制的主机

在MySQL命令行中执行以下命令:

CHANGE MASTER TO MASTER_HOST='主机IP',
MASTER_USER='xxxx',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='File文件名',
MASTER_LOG_POS=Position数字;

启动从服务器复制功能:

start slave;

查看主从配置状态:

show slave status\G

下面两个参数都是Yes,则说明主从配置成功!

在这里插入图片描述

如果上面的position输错了,可以重置

reset slave;

然后暂停主从复制

stop slave;

重新配置

CHANGE MASTER TO MASTER_HOST='主机IP',
MASTER_USER='xxxx',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='File文件名',
MASTER_LOG_POS=Position数字;

然后开启

start slave;

六、主机新建库、新建表、insert记录,从机复制

主机输入:

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE testtable (id INT PRIMARY KEY, value VARCHAR(50));
INSERT INTO testtable VALUES (1, 'Hello World');

在这里插入图片描述

从机自动同步

在这里插入图片描述

七、如何停止从服务复制功能

stop slave;

如果有一段数据暂时不要,从机可以停止主从复制后,从主机那里查询新的position刻度,重新开始复制。

© 版权声明
😀😃😄😁😆😅🤣😂🙂🙃😉😊😇🥰😍🤩😘😗😚😙😋😛😜🤪😝🤑🤗🤭🤫🤔🤐🤨😐😑😶😏😒🙄😬🤥😌😔😪🤤😴😷🤒🤕🤢🤮🤧🥵🥶🥴😵🤯🤠🥳😎🤓🧐😕😟🙁☹️😮😯😲😳🥺😦😧😨😰😥😢😭😱😖😣😞😓😩😫🥱😤😡😠🤬