mysql主从工作原理、搭建

目录

一、mysql为什么要用主从架构?

二、mysql数据库主从复制原理是什么?

详细的主从复制过程如下图:

主从复制过程概述:

三、mysql主从如何搭建?

本次安装的数据库版本为mysql5.7

1、准备两台服务器(配置如下)

2、增加yum源安装mysql

3、查看安装的mysql

4、安装mysql

5、启动mysql并查看状态

6、查看mysql的临时root密码,并登录修改密码

[7、修改主库mysql_master /etc/my.cnf 的配置文件](#7、修改主库mysql_master /etc/my.cnf 的配置文件)

[8、修改从库master /etc/my.cnf 的配置文件](#8、修改从库master /etc/my.cnf 的配置文件)

9、重启mysql_master、mysql_slave

10、登录主库mysql_master,创建主从连接帐号与授权

11、登录mysql_slave建立主从连接

12、确认配置并验证

13、在主库创建库、表、插入数据进行测试。


一、mysql为什么要用主从架构?

1、高可用,实时灾备,用于故障切换。比如主库挂了,可以切从库;

2、读写分离,提供查询服务,减少主库压力,提升性能;

3、备份数据,避免影响业务。

二、mysql数据库主从复制原理是什么?

详细的主从复制过程如下图:

主从复制过程概述:

1、主库的更新SQL(update、insert、delete)被写到binlog;

2、从库发起连接,连接到主库;

3、此时主库创建一个binlog dump thread,把bin log的内容发送到从库;

4、从库启动之后,创建一个I/O线程,读取主库传过来的bin log内容并写入到中继日志relay log;

5、从库还会创建一个SQL线程,从relay log里面读取内容,从ExecMasterLog_Pos位置开始执行,读取到的更新事件,将更新内容写入到slave的db。

三、mysql主从如何搭建?

本次安装的数据库版本为mysql5.7

主从关系: Mysql_master为主,Mysql_slave为从

1、准备两台服务器(配置如下)

mysql_master ip:192.168.40.142

mysql_slave ip: 192.168.40.143

镜像:Centos7.9

虚机配置:4U4G 100G存储

/boot 800MB

/swap 4G

/ 95.2G

虚拟机安装完成后配置网卡

root@localhost \~\]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet BOOTPROTO=dhcp DEFROUTE=yes NAME=ens33 DEVICE=ens33 ONBOOT=yes 关闭防火墙 systemctl stop firewalld \&\& systemctl disable firewalld 关闭selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 下载并配置163的yum源 cd /etc/yum.repos.d \&\& mkdir bak \&\& mv CentOS\* bak \&\& curl http://mirrors.163.com/.help/CentOS7-Base-163.repo \>163.repo 下载常用工具 yum clean all \&\& yum makecache \&\& yum install net-tools vim wget lrzsz -y

2、增加yum源安装mysql

vim /etc/yum.repos.d/163.repo

在最下方插入如下配置

mysql-innovation-community

name=MySQL5.7 Release Community Server

baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/

enabled=1

gpgcheck=0

3、查看安装的mysql

yum repolist all | grep mysql

4、安装mysql

yum -y install mysql-community-server --nogpgcheck

5、启动mysql并查看状态

systemctl start mysqld

systemctl status mysqld

6、查看mysql的临时root密码,并登录修改密码

grep 'temporary password' /var/log/mysqld.log

mysql -uroot -p

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password@123';

设置mysql_master root密码为Password@123 mysql_slave root密码为Password@1234

master节点设置

slave节点设置

7、修改主库mysql_master /etc/my.cnf 的配置文件

8、修改从库master /etc/my.cnf 的配置文件

9、重启mysql_master、mysql_slave

systemctl restart mysqld

10、登录主库mysql_master,创建主从连接帐号与授权

CREATE USER 'slave'@'%' IDENTIFIED BY 'Password@12345';

grant replication slave ON *.* TO 'slave'@'%';

flush privileges;

show master status; #这里要记住 file和position,后面配置slave会用到

11、登录mysql_slave建立主从连接

stop slave; #关闭slave

change master to master_host='192.168.40.142', master_user='slave', master_password='Password@12345',master_log_file='mysql-bin.000001',master_log_pos=749;

start slave; #开启同步

12、确认配置并验证

从库查看

show slave status \G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

表示主从配置成功。

show slave status \G;命令输出如下:

mysql> show slave status \G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.40.142

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 749

Relay_Log_File: localhost-relay-bin.000002

Relay_Log_Pos: 320

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 749

Relay_Log_Space: 531

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_UUID: aa5b3240-696c-11ee-9ab7-000c293bd2c8

Master_Info_File: /var/lib/mysql/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

Replicate_Rewrite_DB:

Channel_Name:

Master_TLS_Version:

1 row in set (0.00 sec)

ERROR:

No query specified

mysql>

13、在主库创建库、表、插入数据进行测试。

create database test;

use test;

create table emp(

id int auto_increment comment 'ID' primary key ,

name varchar(10) not null comment '姓名',

age int comment '年龄',

job varchar(20) comment '职位',

salary int comment '薪资',

entrydate date comment '入职时间',

managerid int comment '直属领导id',

dept_id int comment '部门id'

) CHARSET=utf8 comment '员工表';

insert into emp (id, name, age, job, salary, entrydate, managerid, dept_id)

values (1,'金庸',45,'总裁',50000,'2000-10-12',null,5),

(2,'杨逍',33,'开发',20000,'2005-10-21',1,1),

(3,'张无忌',30,'项目经理',30000,'2008-11-12',1,1);

从库查询

use test;

select * from emp;

验证OK,主从搭建完成。

百度网盘获取搭建视频及文档:

链接:https://pan.baidu.com/s/1lqkN8DelnBjYCogoHcmWdg

提取码:4xpe

参考博客:https://blog.csdn.net/qq_39871711/article/details/123494048

相关推荐
qq_1249870753几秒前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha1 分钟前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_6 分钟前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Gain_chance12 分钟前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习
此生只爱蛋37 分钟前
【Redis】主从复制
数据库·redis
马猴烧酒.1 小时前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
天天爱吃肉82181 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
大巨头2 小时前
sql2008 数据库分页语句
数据库
m0_715575342 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
老邓计算机毕设2 小时前
SSM智慧社区家政服务系统80q7o(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架