mysql主从复制

一.理解主从复制
主从复制中分为「主服务器(master)「和」从服务器(slave)」,「主服务器负责写,而从服务器负责读」,Mysql的主从复制的过程是一个「异步的过程」。
这样读写分离的过程能够是整体的服务性能提高,即使写操作时间比较长,也不影响读操作的进行。
原理:
主要基于MySQL二进制日志
主要包括三个线程(2个I/O线程,1个SQL线程)
1、MySQL将数据变化记录到二进制日志中;
2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中;
3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库
详细步骤:
1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、
password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start
slave
2、从库的IO线程和主库的dump线程建立连接。
3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。
4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。
5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到
master.info中
6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的
relay 会自动被清理purge
二.完成主从复制
主库配置
1.配置参数

vim /etc/my.cnf
[mysqld]
log_bin = mysql-bin
server_id = 128

mysql主从复制_第1张图片

2.重启数据库

[root@localhost ~]# systemctl restart mysqld

3.建立同步账号
ps:这里的ip段写自己的

mysql>grant replication slave on *.* to 'rep'@'192.168.216.%' identified by'RedHat@123';

在这里插入图片描述

mysql>show grants for 'rep'@'192.168.216.%';

mysql主从复制_第2张图片
4.锁表设置只读
为后面备份准备,注意生产环境要提前申请停机时间;

mysql> flush tables with read lock;

在这里插入图片描述
提示:如果超过设置时间不操作会自动解锁。

mysql> show variables like '%timeout%';

mysql主从复制_第3张图片
测试锁表后是否可以创建数据库:
5.查看主库状态
查看主库状态,即当前日志文件名和二进制日志偏移量

mysql> show master status;

在这里插入图片描述

6.备份数据库数据
这里的/server/backup文件是自己创建的
-p后密码写自己的这里我的密码是RedHat@123

[root@localhost ~]# mkdir -p /server/backup
[root@localhost ~]# mysqldump -uroot -pRedHat@123 -A -B |gzip > /server/backup/mysql_bak.$(date +%F).sql.gz

在这里插入图片描述
7.解锁

mysql> unlock tables;

在这里插入图片描述
8.主库备份数据上传到从库
这里的ip写自己从库的ip地址
并在从库里面也要创建/server/backup

[root@localhost ~]# scp /server/backup/mysql_bak.2023-07-25.sql.gz 192.168.95.129:/server/backup/

在这里插入图片描述

从库上设置
1.设置server-id值(为自己主机ip的最后如我的ip为192.168.216.129参数为129)并关闭binlog参数

vim /etc/my.cnf
#log_bin = /data/mysql/data/mysql-bin
server_id = 129

在这里插入图片描述

重启数据库:
2.还原从主库备份数据

#cd /server/backup/
#gzip -d mysql_bak.2023-07-25.sql.gz

在这里插入图片描述
检查还原:

#mysql -uroot -p < mysql_bak.2023-07-25.sql.gz
#mysql -uroot -p -e 'show databases;'

mysql主从复制_第4张图片

3.设定从主库同步

mysql> change master to
MASTER_HOST='192.168.95.128',-----主库ip
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='RedHat@123',----数据库密码
MASTER_LOG_FILE='mysql-bin.000002',----master的二进制日志
MASTER_LOG_POS=440;

(用show master status;)我对应得就是如下
mysql主从复制_第5张图片
mysql主从复制_第6张图片
4.启动从库同步开关

mysql> start slave;

检查状态:

mysql> show slave status\G

mysql主从复制_第7张图片

你可能感兴趣的:(mysql,android,adb)