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

相关推荐
计算机学姐7 分钟前
基于PHP的电脑线上销售系统
开发语言·vscode·后端·mysql·编辑器·php·phpstorm
小光学长22 分钟前
基于vue框架的宠物寻回小程序8g7el(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库
一叶飘零_sweeeet24 分钟前
深入理解 MySQL MVCC:多版本并发控制的核心机制
数据库·mysql
中文很快乐33 分钟前
springboot结合p6spy进行SQL监控
java·数据库·sql
小电玩35 分钟前
谈谈你对Spring的理解
java·数据库·spring
小光学长40 分钟前
基于flask+vue框架的传染病防控酒店信息系统zvt93(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库
M-bao1 小时前
1000w条数据插入mysql如何设计?
数据库·mysql
666786661 小时前
Mysql高级篇(中)—— SQL优化
linux·运维·服务器·数据库·sql·mysql
十年人间~1 小时前
mysql等保数据库命令
数据库·mysql
Amagi.1 小时前
Redis的内存淘汰策略
数据库·redis·mybatis