MySQL主从复制配置
文章目录

为什么要主从复制与读写分离
随着现代信息科技的飞速发展,导致现在的数据库数据量越来越大,在高并发读写的情况下,单机数据库很难满足需求。容易出现难以扩容、读写压力大、单机QPS过大等情况。所以我们需要使用集群数据库,进行动态扩容,以满足需求。
什么是主从复制
在任意集群模式下都涉及两个内容,一个是master另一个是slave,尤其是数据库这种管理与储存数据库的软件,都需要有主数据和从数据,MySQL 主从复制(Master-Slave Replication)是一种数据复制技术,用于在多个数据库服务器之间的数据同步。在主从复制架构中,一个服务器被设置为主服务器(Master),充当数据源,其他服务器被设置为从服务器(Slave),用来复制主服务器的数据。
具体的主从复制是什么、原理、和发展史可以网上搜索一下,这里不详细介绍
什么是读写分离
读写分离的实现是基于主从复制架构:一主多从,只写主库,主库会自动将数据同步到从库。读和写的操作在不同的数据库中进行,减少单数据库的压力。
读写分离是高并发场景下MySQL的一种优化方案,依靠主从复制使得MySQL实现了数据复制为多份,增强了抵抗 高并发读请求的能力,提升了MySQL查询性能同时,也提升了数据的安全性。当某一个MySQL节点,无论是主库还是从库故障时,还有其他的节点中存储着全量数据,保证数据不会丢失。
如何部署主从复制
部署主从复制需要多台mysql服务器(至少两台做一主一从)这里我们用三台msyql服务器做一主多从的模式。
安装并配置mysql
在上一篇文章中有详细的描述怎么安装mysql,这里不在赘述,你可以参照我的文章或者使用包管理器
Linux安装mysql使用压缩包方式安装前言:这篇文章是以ArchLinux使用压缩包的方式进行安装配置MySQL,并且安装的是5.7的版本,其他版本可以使用包管理器来安装,比较方便快捷,只有MySQL5.7安装的时候比较麻烦,而且会出现各种各样的情况,所以本文将安装MySQL5.7安装完成以后请一定检查你的mysql是否启动,是否能正常使用


安装完成后请配置mysql开启远程登录并设置密码
sudo mysql_secure_installation按提示操作:
- 启用密码验证策略(可选,推荐输入 Y)。
- 设置 root 密码(输入你的新密码)。
- 删除匿名用户(输入 Y)。
- 禁止 root 远程登录(输入 N)。
- 删除测试数据库(输入 Y)。
- 重新加载权限表(输入 Y)。

每一节点都需要安装并且配置
查看主节点ip
使用net-tools或者直接使用ip a命令就可以看见ip地址了,我这里是虚拟机所以内网ip就行了,如果是服务器,请使用自己的外网ip

配置主节点
1、修改 MySQL 配置
在 主服务器上,修改 /etc/mysql/mysql.conf.d/mysqld.cnf:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf找到 [mysqld] 段,添加或修改以下内容:
[mysqld]bind-address = 0.0.0.0server-id=1log_bin=mysql-binbinlog_format=rowexpire_logs_days=7 # 设置 binlog 日志保留 7 天保存并退出
2、重启 MySQL
sudo systemctl restart mysql重启后看一下主节点监听的3306端口是不是外网
sudo netstat -tulnp | grep 3306
3、 创建复制用户
执行以下 SQL:
CREATE USER 'replicator'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;请替换 'yourpassword' 为你的实际密码,请设置复杂密码并将这个密码保存或记住

4、 获取 Master 状态
SHOW MASTER STATUS;
记住 File 和 Position 值(这里是 mysql-bin.000002 和 1173),稍后用在从服务器上。
配置从节点
我这里俩台从节点服务器,每一个从节点的配置都是一样的,除了id,id一定不能一样
1、修改 MySQL 配置
在 从服务器 上,编辑 /etc/mysql/mysql.conf.d/mysqld.cnf:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf找到 [mysqld] 段,添加或修改以下内容:
[mysqld]
server-id=2 #id要确保唯一
relay-log=relay-bin
log_bin=mysql-bin
log_slave_updates=1
read_only=1 # 只读模式,防止意外修改2、 重启 MySQL
sudo systemctl restart mysql3、连接主服务器
在 MySQL 终端执行以下命令(替换IP、File、Password 、Position 值):
CHANGE MASTER TO
MASTER_HOST='198.19.249.99',
MASTER_USER='replicator',
MASTER_PASSWORD='@k^U%NQMs4^fVz3N',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=1173,
GET_MASTER_PUBLIC_KEY=1; -- MySQL 8.0 需要此选项
4、启动复制和检查复制状态
START SLAVE;
SHOW SLAVE STATUS\G如果 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes,说明主从复制配置成功。

测试主从复制
在 Master 上创建测试数据库:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO users VALUES (1, 'Alice');
然后在 Slave 查询:
SHOW DATABASES;
SELECT * FROM test_db.users;
这样就是没有问题了
本文标题:MySQL主从复制配置
本文链接:https://blog.luola.me/119.html
除非另有说明,本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议。
声明:转载请注明文章来源。