mysql 主从配置
-
核心概念:
- 主服务器(Master):负责处理客户端的写操作,并将数据更改记录到二进制日志(binlog)中。
- 从服务器(Slave):负责读取主服务器的二进制日志,并在本地执行这些更改,以保持数据同步。
-
工作流程:
- 主服务器:
- 执行数据更改操作(如INSERT、UPDATE、DELETE)。
- 将这些操作记录到二进制日志中。
- 从服务器:
- 启动I/O线程连接到主服务器,请求二进制日志。
- 主服务器将二进制日志发送到从服务器。
- 从服务器将接收到的日志写入中继日志(relay log)。
- SQL线程从中继日志中读取日志并执行相应的SQL语句。
- 主服务器:
3.配置过程:
实验选取三台机器(一主两从),ip分别为:
Master:172.25.254.220/24
Slave-1:172.25.254.230/24
Slave-2:172.25.254.240/24
实验中要将防火墙关闭:
sudo systemctl stop firewalld
检查防火墙状态:
sudo systemctl status firewalld
安装MySQL
yum install -y mysql-server
3.1 对Master进行配置:
配置文件:
文件可以在/etc/my.cnf下配置,也可以在/etc/my.cnf.d/mysql-server.cnf里配置
这里选择在/etc/my.cnf.d/mysql-server.cnf里配置。
[mysqld]
server_id=220 # 使用IP的最后一个数字,确保每台机器唯一
log-bin=master-bin
binlog-format=ROW
expire_logs_days=7
添加如下内容:
server_id=ID(这里的id自定义,我填的是IP主机位,方便记忆)
重启MySQL服务:
systemctl restart mysqld
检查MySQL服务状态:
systemctl status mysqld
检查状态为active
登录MySQL,创建复制用户并授权:
CREATE USER 'rin'@'172.25.254.%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT REPLICATION SLAVE ON *.* TO 'rin'@'172.25.254.%';
FLUSH PRIVILEGES;
创建用户:
创建了一个名为 rin 的用户,允许其从 172.25.254 网段下的任何主机连接到 MySQL 服务器,并且使用 mysql_native_password 认证方式,密码为 123
create user rin@'172.25.254.%' identified with mysql_native_password by '123';
进行授权:
赋予 rin 用户对所有数据库的所有权限
grant replication slave on *.* to rin@'172.25.254.%';
显示主服务器(Master)的复制状态信息
show master status;
File:这是当前主服务器正在使用的二进制日志文件名。
Position:表示当前二进制日志文件中的偏移位置。
Binlog_Do_DB:此列指定了哪些数据库的更改会被记录到二进制日志中。
Binlog_Ignore_DB:与 Binlog_Do_DB 相反,此列指定了哪些数据库的更改不会被记录到二进制日志中。为空表示没有忽略任何数据库的更改。
Executed_Gtid_Set:在启用了全局事务标识符(GTID)的情况下,这个字段记录了主服务器已经执行的 GTID 集合。
查看主服务器状态:
SHOW MASTER STATUS;
3.2 对Salve-1进行配置:
配置Slave-1和Slave-2(以下步骤对两台从服务器相同):
- 修改配置文件
/etc/my.cnf.d/mysql-server.cnf
:[mysqld] server_id=230 # 对于Slave-1使用230,对于Slave-2使用240 relay-log=slave-relay-bin read_only=1
重启MySQL:
systemctl restart mysqld
查看MySQL服务状态:
systemctl status mysqld
配置从服务器连接主服务器:
CHANGE MASTER TO
MASTER_HOST='172.25.254.220',
MASTER_USER='rin',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='master-bin.000001', # 根据主服务器SHOW MASTER STATUS的输出填写
MASTER_LOG_POS=154; # 根据主服务器SHOW MASTER STATUS的输出填写
启动从服务器复制线程:
START SLAVE;
查看复制状态:
SHOW SLAVE STATUS\G
3. 3 对Salve-2进行配置:
配置 /etc/my.cnf.d/mysql-server.cnf 文件:
重启MySQL:
systemctl restart mysqld
查看MySQL服务状态:
systemctl status mysqld
配置Salve-1服务器连接Master服务器:
CHANGE MASTER TO
master_host='172.25.254.220',
master_user='rin',
master_password='123',
master_log_file='binlog.000001',
master_log_pos=680;
查看复制状态:
show slave status\G
4.验证主从复制:
在Master设备上建库建表并插入数据:
-- 创建一个新的数据库
CREATE DATABASE test_db;
-- 使用该数据库
USE test_db;
-- 创建一个表
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT
);
-- 插入一些测试数据
INSERT INTO test_table (name, age) VALUES ('Alice', 25);
INSERT INTO test_table (name, age) VALUES ('Bob', 30);
INSERT INTO test_table (name, age) VALUES ('Charlie', 35);
-- 查看是否存在数据库
SHOW DATABASES;
-- 查看表是否存在
SHOW TABLES;
在Slave上进行查看复制情况: