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

相关推荐
IT龟苓膏3 小时前
Redis 数据类型底层原理:SDS、quicklist、intset、skiplist、Bitmap、HyperLogLog 一篇讲清
数据库·redis·skiplist
流星白龙4 小时前
【MySQL高阶】19.变更缓冲区,自适应哈希索引,日志缓冲区
数据库·windows·mysql
晴天¥4 小时前
Oracle中的监听配置与管理(动态、静态监听配置对比以及listener.ora和tnsnames.ora)
数据库·oracle
瀚高PG实验室5 小时前
python连接HGDB超时
数据库·瀚高数据库·highgo
闪电悠米6 小时前
黑马点评-Redisson-01_why_redisson
java·服务器·网络·数据库·缓存·wpf
Counter-Strike大牛6 小时前
SpringBoot2.7.10+MyBatisPlus实现MySQL+DM双数据库切换
数据库·mysql
dllxhcjla6 小时前
Redis
数据库·redis·缓存
睡不醒男孩0308236 小时前
数据库高可用运维实操指南:基于CLup的PostgreSQL生产环境自动化管理
运维·数据库·postgresql
神仙别闹6 小时前
基于Python + SQL server 实现(GUI)原神圣遗物管理与角色数值模拟系统
java·数据库·python
Crazy_eater7 小时前
Mysql(6)--基础查询
数据库·mysql