当前位置:网站首页>MySQL数据库主从复制集群原理概念以及搭建流程
MySQL数据库主从复制集群原理概念以及搭建流程
2022-07-27 11:02:00 【InfoQ】
MySQL数据库主从复制集群原理概念以及搭建流程
1.MySQL主从复制集群的核心概念
1.1.什么是主从复制集群
- 主库出现问题,可以快速切换到从库提供服务。
- 实现读写分离,降低主库的访问压力。
- 可以在从库中执行备份,以避免备份期间影响主库服务。
1.2.主从复制集群中的专业术语
- 主库
- Binlog:二进制日志。
- 从库
- relay-log:中继日志,主库推送过来的Binlog日志都存放在中继日志中。
- master.info:从库复制主库的信息文件,记录着主库的地址、用户、Binlog等信息。
- relay-log.info:中继日志的信息文件,该文件记录了上次执行relay-log的位置等信息。
- 主库
- binlog_dump_thread:二进制日志投递线程,主要将二进制日志发送给从库的线程。
- 从库
- IO_Thread:从库的IO线程,用于请求和接收主库的Binlog二进制日志。
- SQL_Thread:从库的SQL线程,用于将主库发来的二进制日志在数据库中进行数据复制。
1.3.主从复制集群工作原理
change master to
1.4.主从复制中的小细节
1.5.搭建主从复制集群的前提条件
- 首先需要准备多个MySQL实例,最少两个MySQL实例,能够实现一主一从的架构,可以在多个服务器中分布部署独立的MySQL节点,也可以在一台服务器中部署多个MySQL实例。
- 每个MySQL实例都需要由单独的sever_id。
- 身为主库角色的MySQL实例需要开启二进制日志,从库在特定场景下需要开启。
- 主库需要授权一个专门的用户作为主从复制的用户。
- 如果主库是一个运行很多年的数据库,突然要升级为主从复制集群,最好先将主库的数据同步一份到从库中。
- 开启专用的复制线程。
1.6.MySQL主从复制集群的架构信息
2.搭建MySQL多实例环境
2.1.在mysql-1中搭建身为主库的MySQL实例
1.解压MySQL
[[email protected] ~]# tar xf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[[email protected] ~]# mv /usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql
2.设置MySQL的环境变量
[[email protected] ~]# vim /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
export LD_LIBRARY_PATH=:/usr/local/mysql/lib
3.创建mysql用户
[[email protected] ~]# groupadd -r mysql
[[email protected] ~]# useradd -M -r -s /sbin/nologin -g mysql mysql
4.准备数据目录
[[email protected] ~]# mkdir /data/mysql
[[email protected] ~]# chown -R mysql. /data/mysql
5.初始化数据库
[[email protected] ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
6.准备mysql配置文件
[[email protected] ~]# vim /etc/my.cnf
[mysqld]
user=mysql
port=3306
server_id=1 #每个MySQL数据库的server_id都设置成不同的
basedir=/usr/local/mysql
datadir=/data/mysql
log_bin=mysql-bin
gtid-mode=on
enforce-gtid-consistency=true
socket=/tmp/mysql.sock
log_error=/data/mysql/mysql_err.log
character-set-server=utf8
[mysql]
socket=/tmp/mysql.sock
7.准备服务管理脚本
[[email protected] ~]# vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
8.启动数据库
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl start mysqld
9.设置root密码
[[email protected] ~]# mysqladmin -u root -P 3306 password '123456'
10.登陆数据库
[[email protected] ~]# mysql -uroot -p123456
mysql>
2.2.在mysql-2中搭建MySQL多实例
2.2.1.安装数据库软件
1.解压MySQL
[[email protected] ~]# tar xf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[[email protected] ~]# mv /usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql
2.设置MySQL的环境变量
[[email protected] ~]# vim /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
export LD_LIBRARY_PATH=:/usr/local/mysql/lib
3.创建mysql用户
[[email protected] ~]# groupadd -r mysql
[[email protected] ~]# useradd -M -r -s /sbin/nologin -g mysql mysql
2.2.1.搭建第一个3306从库的MySQL实例
1.创建3306从库的数据目录
[[email protected] ~]# mkdir /data/mysql3306
[[email protected] ~]# chown -R mysql.mysql /data/mysql3306/
2.准备3306从库的配置文件
[[email protected] ~]# vim /etc/my3306.cnf
[mysqld]
user=mysql
port=3306
server_id=2 #每个MySQL数据库的server_id都设置成不同的
basedir=/usr/local/mysql
datadir=/data/mysql3306
log_bin=/data/mysql3306/mysql-bin
gtid-mode=on
enforce-gtid-consistency=true
socket=/data/mysql3306/mysql.sock
log_error=/data/mysql3306/mysql_err.log
character-set-server=utf8
[mysql]
socket=/data/mysql3306/mysql.sock
3.初始化3306从库
[[email protected] ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3306
4.准备服务管理脚本
[[email protected] ~]# vim /etc/systemd/system/mysqld3306.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnf
LimitNOFILE = 5000
5.启动数据库
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl start mysqld3306
6.设置root密码
[[email protected] ~]# mysqladmin -u root -P 3306 -S /data/mysql3306/mysql.sock password '123456'
7.登陆数据库
[[email protected] ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock
mysql>
2.2.2.搭建第二个3307从库的MySQL实例
1.创建3307从库的数据目录
[[email protected] ~]# mkdir /data/mysql3307
[[email protected] ~]# chown -R mysql.mysql /data/mysql3307/
2.准备3307从库的配置文件
[[email protected] ~]# vim /etc/my3307.cnf
[mysqld]
user=mysql
port=3307
server_id=3 #每个MySQL数据库的server_id都设置成不同的
basedir=/usr/local/mysql
datadir=/data/mysql3307
log_bin=/data/mysql3307/mysql-bin
gtid-mode=on
enforce-gtid-consistency=true
socket=/data/mysql3307/mysql.sock
log_error=/data/mysql3307/mysql_err.log
character-set-server=utf8
[mysql]
socket=/data/mysql3307/mysql.sock
3.初始化3307从库
[[email protected] ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3307
4.准备服务管理脚本
[[email protected] ~]# vim /etc/systemd/system/mysqld3307.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf
LimitNOFILE = 5000
5.启动数据库
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl start mysqld3307
6.设置root密码
[[email protected] ~]# mysqladmin -u root -P 3307 -S /data/mysql3307/mysql.sock password '123456'
7.登陆数据库
[[email protected] ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock
mysql>
2.3.MySQL多个节点搭建完毕

3.配置MySQL主从复制集群
- 主库开启Binlog日志,从库复制主库数据要通过Binlog进行复制。
- 主库创建专门用作主从复制的用户。
- 将主库数据进行备份,再从库中恢复。
- 配置从库连接主库的复制信息。
- 启动主从复制集群。
3.1.在主库开启Binlog二进制日志
mysql> show variables like '%log_bin%';
+---------------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------+
| log_bin | ON |
| log_bin_basename | /data/mysql/mysql-bin |
| log_bin_index | /data/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-----------------------------+
6 rows in set (0.01 sec)
3.2.在主库上创建主从复制的用户
mysql> grant replication slave on *.* to [email protected]'192.168.20.%' identified by '123456';
3.3.将主库数据备份并在从库中进行还原
[[email protected] ~]# mysqldump -uroot -p123456 -A --master-data=2 -R -E --triggers --single-transaction > all_db.sql
1.将备份上传到从库的服务器上
[[email protected] ~]# scp -rp all_db.sql [email protected]:/root
2.3306从库还原主库备份数据
[[email protected] ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock
mysql> set sql_log_bin=0;
mysql> source /root/all_db.sql;
3.3307从库还原主库备份数据
[[email protected] ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock
mysql> set sql_log_bin=0;
mysql> source /root/all_db.sql;
3.4.配置从库连接主库的复制信息
vim all_db.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=452;
mysql> show master status;
+------------------+----------+--------------+------------------+----------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+----------------------------------------+
| mysql-bin.000001 | 452 | | | 4f87bad8-fc67-11ec-be7b-005056b791aa:1 |
+------------------+----------+--------------+------------------+----------------------------------------+
1 row in set (0.00 sec)
help change master to1.3306从库配置
[[email protected] ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.20.11',
MASTER_USER='replicas',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=452,
MASTER_CONNECT_RETRY=10;
1.3307从库配置
[[email protected] ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.20.11',
MASTER_USER='replicas',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=452,
MASTER_CONNECT_RETRY=10;
3.5.启动主从复制线程
1.3306从库配置
[[email protected] ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock
mysql> start slave;
1.3307从库配置
[[email protected] ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock
mysql> start slave;
4.查看主从复制集群状态
1.3306从库配置
[[email protected] ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock
mysql> show slave status\G;
1.3307从库配置
[[email protected] ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock
mysql> show slave status\G;

边栏推荐
- 第13章 IO流
- Summary of leetcode SQL exercises (MySQL Implementation)
- compute_class_weight() takes 1 positional argument but 3 were given
- Database cli tool docker image
- Keil MDK compilation appears..\user\stm32f10x H (428): error: # 67: expected a "}" wrong solution
- iptables防火墙
- Proteus8专业版破解后用数码管闪退的解决
- CTF crypto RSA getting started
- Solution of digital tube flash back after proteus8 professional version cracking
- C programming language (2nd Edition) -- Reading Notes -- 1.4
猜你喜欢

Modelarts voice detection and text classification

Principle of control system based on feedback rate

Tlc549proteus simulation &sallen key filter &ad736vrms to DC conversion &proteus view 51 register value

VSCode复制代码时去掉样式/语法高亮/代码高亮/黑色背景

Shell脚本文本三剑客之awk

82.(cesium之家)cesium点在3d模型上运动

TLC549Proteus仿真&Sallen-Key滤波器&AD736Vrms到DC转换&Proteus查看51寄存器值
Synchronous use reference of the new version of data warehouse (for beginners)

Interaction free shell programming

EfficientNet
随机推荐
ZABBIX custom monitoring items
第10章 枚举类与注解
Tlc549proteus simulation &sallen key filter &ad736vrms to DC conversion &proteus view 51 register value
1.Flume 简介及基本使用
TapNet: Multivariate Time Series Classification with Attentional Prototypical Network
Moveit2 -- 2. Quick start of moveit in rviz
Could not load dynamic library ‘libcudnn.so.8‘;
Keil MDK compilation appears..\user\stm32f10x H (428): error: # 67: expected a "}" wrong solution
Matlab draws Bode diagram with time delay system
w.r.t. ; i.e.; etc.; e. G. what does it mean
82.(cesium之家)cesium点在3d模型上运动
MATLAB画带延时系统的伯德图
N ¨UWA: Visual Synthesis Pre-training for Neural visUal World creAtionChenfei
USB 网卡驱动数据流
origin如何作一张图中多张子图是柱状图(或其他图)
一些MathType常用快捷键
C# 自定义集合
LeetCode 01: T1. 两数之和 ; T1108. IP 地址无效化 ; T344. 反转字符串
CTF crypto RSA getting started
Arduino常见供电问题与解决