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

相关推荐
开开心心就好1 小时前
PDF转长图工具,一键多页转图片
java·服务器·前端·数据库·人工智能·pdf·推荐算法
卡拉叽里呱啦2 小时前
深入理解事务一致性和隔离性
数据库
liweiweili1262 小时前
基于金庸武侠小说人物关系设计的完整 SQL 语句,包括数据库创建、表结构定义和示例数据插入
数据库·sql·oracle
梓沂4 小时前
centos7 安装memcached
数据库·缓存·memcached
她说人狗殊途4 小时前
[特殊字符] MySQL性能参数查询总结
数据库·mysql
TDengine (老段)4 小时前
TDengine 数据订阅支持 MQTT 协议用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
灵犀物润4 小时前
MySQL 8 与 PostgreSQL 17 对比分析及迁移指南
数据库·mysql·postgresql
二闹5 小时前
别再傻傻分不清!MyBatis两种分页方式到底用哪个?
后端·mysql
异世界贤狼转生码农5 小时前
Ubuntu操作系统下使用mysql、mongodb、redis
mysql·mongodb·ubuntu
IBMS楼宇自控6 小时前
IBMS-建筑内分散的子系统(如 BA、安防、消防、能源、电梯等)进行数据互联、功能协同与智能管控
大数据·数据库·人工智能