msyql主从复制(全网最详细的讲解)

本文详细介绍了MySQL主从复制的原理和实践步骤,包括设置server_id、开启binlog、创建复制账号、数据备份传输、从库配置、启动复制及检查复制状态等。在实践中,通过逻辑备份将主库数据传输到从库,并配置相应的复制参数,确保主从数据一致。文章还提供了在CentOS7.8环境下MySQL8.0的安装教程。
摘要由CSDN通过智能技术生成

msyql主从复制

一、原理

下面简单描述下 MySQ Replication 复制的原理及过程

1 )在 slave 服务器上执行 start slave 命令,主从复制开始进行

2)此时,slave 服务器的 I/O 线程 会通过在 Master 上已经授权的用户请求连接 Master 服务器 ,并请求从指定 binlog 日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行 change master 命令指定的)之后开始发送 binlog 日志内容
3) Master 服务器接收到来自 slave 服务器的 I/O 线程的请求之后,其上负责复制的 binlog dump 线程会根据请求的信息,分批读取指定 binlog 日志文件所指定位置之后的 binlog 日志信息,然后返回给 Slave 端的 I/O 线程。 返回的信息中除了 binlog 日志内容之外,还包括在 Master 服务器端记录的新的 binlog 文件名称, 以及在新的 binlog 中的下一个指定的更新位置

4)当 slave 服务器的 I/O 线程获取到 Master 服务器上 I/O 线程发送的日志内容及 日志文件和位置点之后 ,会将 binlog 日志内容依次写入到 Slave 端自身的 Relay Log (即中继日志)文件( MySQL-relay-bin.xxxxxx )的最末端,并将新的 binlog 文件名和位置记录到 master info 文件中,以便下次读取 Master 端新 binlog 日志时,能够告诉 Master 服务器需要从新 binlog 日志的指定文件及位置开始请求新的 binlog 日志内容

5 ) Slave 服务器端的 SQL 线程会实时地检测本地 Relay Log 中 I/O 线程新增加的日志内容,然后及时地把 Relay Log 文件中的内容解析成 SQL 语句, 并在自身 slave 服务器上按解析 SQL 语句的位置顺序执行,并将当前应用中继日志的文件名及位置点记录在 relay- log.info

经过了上面的过程,就可以确保在 Master 端和 slave 端执行了同样的 SQL 语句 在复制状态正常的情况下, Master 端和 Slave 端的数据是完全一样 当然, MySQ 复制机制也包含一些特殊的情况。

二、实践

1、实验环境

主:centos 7.8 网络环境桥接

从:centos 7.8 网络环境桥接

数据库: Mysql 8.0

关闭selinux

关闭firewall(或开放相应端口) 具体可看之前的详细文档《防火墙firewall》

2、linux Mysql 8.0 的安装

1.下载mysql的yum仓库
[root@xingdian-mysql-1 /]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
2.安装mysql的yum仓库
[root@xingdian-mysql-1 /]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm
3.安装数据库
[root@xingdian-mysql-1 /]# yum -y install mysql-server mysql
4.查看数据库的初始密码
[root@localhost ~]# systemctl start mysqld
[root@xingdian-mysql-1 /]# grep 'password' /var/log/mysqld.log
2019-07-13T15:14:31.176905Z 1 [Note] A temporary password is generated for root@localhost:k12zPB1r;2Ta
5.修改数据库密码
[root@xingdian-mysql-1 /]# mysqladmin -u root -p'旧密码' password'Litaimin@123'
密码:大小写有特殊字符数字

3、实验步骤

3.1 主库部署

(1)设置server-id的值并开启binlog功能

1、
vim /etc/my.cnf

[mysqld]
...
server_id=132
log_bin=/application/mysql/logs/qianhui_bin      //后面可以不带等号部分, MySQL使用默认路径及日志名。
...

2、修改了配置信息需要重启mysql服务

3、登录数据库检查参数的更改情况
mysql> show variables like 'log_bin' ;     //如果显示下图所示,表示binlog功能开启

log_bin     | ON         


查看server_id
mysql> show variables like 'server_id';

查看主库状态
mysql> show master status;

(2)创建用于主从复制的账号,在主库上给从库提供一个账号

create user 'slave'@'192.168.80.%' identified by 'password';
grant all privileges on *.* to 'slave'@'192.168.80.%';
FLUSH PRIVILEGES;

(3)对主数据库锁表只读(当前窗口不要关掉)的命令如下:

 mysql> flush table with read lock;
 
 #查看解锁时间
 mysql> show variables like '%timeout%';
 
 | interactive_timeout               | 28800    |
3.2 数据备份并传送

(1)逻辑备份

mysqldump -uroot -p -A >./bak_$(date +%F).sql.gz

(2)传输文件

scp bak_2020-11-18.sql.gz root@ip:~/
3.3 从库部署

(1)修改配置文件,添加server_id(从库不能开启log_bin功能)

# vim /etc/my.cnf

...
server_id =215
...


重启服务

(2)将备份数据导入

# zcat ./bak_2020-11-18.sql.gz |mysql -uroot -p     

(3)登录从库配置复制参数

mysql> change master to master_host='192.168.3.48',master_port=3306,master_user='slave',master_password='Litaimin@123',master_log_file='qianhui_bin.000003',master_log_pos=1676;

#参数详解
MASTER_HOST  //这里是主库的工
MASTER_PORT      //这里是主库的端口,从库的端口可以与主库的不同
MASTER_USER     //这里是主库上建立的用于复制的用户 rep
MASTER_PASSWORD  //这里是 rep 用户的密码
MASTER_LOG_FILE   //这里是 show master status 时查看到的二进制日志文件名称,注意不能多出空格
MASTER_LOG_POS      //这里是 show master status 时查看到的二进制日志偏移量,注意不能多出空格

(4)启动从库主从复制开关

start slave ;

(5)查看复制状态

show slave status \G;

主从复制是否配置成功了,最关键的是查看下面3项状态参数:
Slave IO_Running       : Yes
Slave_SQL_Running     : Yes
Seconds_Behind_Master : O           // 从库比主库延迟的秒数

(6) 解锁表

mysql> unlock tables;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值