目录
一、代码
1.apt安装(记得查看主从版本是否一致)
apt update
apt install mysql-server-8.0 -y
2.数据同步
主服务器上
mysqldump -uroot. -A -F --single-transaction --source-data > /opt/all.sql
scp /opt/all.sql 目标主机:/opt
从服务器上
myslq -uroot < /opt/all.sql
3.实现主从复制
主服务器上
vim /etc/mysql/mysql.conf.d/mysqld.cnf
在文件内
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
即可以使用 % s/127.0.0.1/0.0.0.0/ 来直接更改这两行
去掉 server-id =1 的注释并改成server-id =122 (此处数字主和从不同即可)
systemctl restart mysql
mysql界面
create user test@'192.168.213.%' identified by "abc123";
grant replication slave on *.* to test@'192.168.213.%';
ALTER USER test@'192.168.213.%' IDENTIFIED WITH mysql_native_password BY 'abc123';
flush privileges;
show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000005 | 1174 | | | |
+---------------+----------+--------------+------------------+-------------------+
(后面的从服务器要根据这个做配置)
从服务器上
vim /etc/mysql/mysql.conf.d/mysqld.cnf
在文件内
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
即可以使用 % s/127.0.0.1/0.0.0.0/ 来直接更改这两行
去掉 server-id =1 的注释并改成server-id =55 (此处数字主和从不同即可)
systemctl restart mysql
mysql内
CHANGE MASTER TO
MASTER_HOST = '192.168.213.122',
MASTER_USER = 'test',
MASTER_PASSWORD = 'abc123',
MASTER_PORT = 3306,
MASTER_LOG_FILE = 'binlog.000005',
MASTER_LOG_POS = 1174;
start slave;
show slave status;
二、具体实现过程
2.1 数据同步
主:192.168.213.122 从:192.168.213.55
主上已经存在运行数据,因而首先要保持主从数据同步
在主上实现主从数据一致
在 从 上接收
2.2 主从复制
首先,修改主服务器上的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
新建用户test
[ MySQL 8.0 引入的一个新特性:默认使用 caching_sha2_password 插件作为身份验证方式,并且该插件要求客户端使用 加密连接(SSL) 或者支持安全登录的客户端。但在主从复制中,如果未配置 SSL 连接,从库尝试连接主库时就会因为不满足“安全连接”条件而被拒绝。因而需要将复制用户使用的认证插件从 caching_sha2_password 改为 mysql_native_password,后者不要求必须使用 SSL。即使用命令ALTER USER test@'192.168.213.%' IDENTIFIED WITH mysql_native_password BY 'abc123'; flush privilegs;那么此时就需要重新显示master status,以保证后面从配置正确。]
修改从上的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf也是同理,
进入从 的mysql界面 根据前面主上的内容修改,
三、理论基础
MySQL 主从复制(Master-Slave Replication)是通过将主数据库(Master)上的数据变更同步到一个或多个从数据库(Slave)上来实现的。这是一种常见的架构模式,用于提高系统的读性能、提供数据冗余和故障恢复能力。
3.1 原理
当主服务器产生数据更新,会将更新的数据写入二进制日志中,主服务器的mysqldump线程会接收 从服务器io线程的请求,将主服务器的二进制日志复制给 从服务器的io线程,io线程将主服务器的二进制日志拷贝到本机的中继日志中,再开启 sql线程,读取中继日志中的数据,将中继日志的数据更新同步到数据库中。
- Master:主服务器,负责处理所有的写操作(insert,update,delete等),并记录这些操作到二进制日志文件(binary log)中。
- Slave:从服务器,从 Master 复制数据,并执行相同的 SQL 操作来保持与 Master 数据一致。
- Binary Log (binlog):记录了所有对数据库的数据更改(包括结构变更)的日志文件。
- Relay Log:从服务器上存储从 Master 接收到的 binlog 的副本。
- IO Thread 和 SQL Thread:Slave 上有两个线程,分别是 IO 线程和 SQL 线程。IO 线程负责从 Master 获取 binlog 并写入 Relay Log;SQL 线程则负责读取 Relay Log 并在 Slave 上重放这些事件。
3.2 格式
复制需要考虑二进制日志事件记录格式
-
STATEMENT(5.0之前), Mariadb5.5 默认使用此格式
-
ROW(5.1之后,推荐),MySQL 8.0 默认使用此格式
-
MIXED: Mariadb10.3 默认使用此格式
3.3 功能
- 数据冗余(Data Redundancy)将数据从主库复制到多个从库,形成多份副本;提高了系统的容错能力,即使主库宕机,也能从从库恢复数据;是实现高可用(HA)的基础。
- 读写分离(Read/Write Splitting)所有写操作(INSERT、UPDATE、DELETE)在主库执行;读操作(SELECT)可以分发到多个从库;显著提升系统整体性能,尤其是读密集型应用。
- 故障转移(Failover)当主库出现故障时,可以通过手动或自动方式将某个从库提升为主库;实现服务快速恢复,减少停机时间;常用于生产环境的高可用架构中。
- 数据备份与恢复:可以使用从库作为热备份节点;在主库发生逻辑错误(如误删表)时,可以从从库恢复数据;搭配 mysqldump 或物理备份工具(如 Percona XtraBackup)效果更佳。
- 数据分析与报表:为了避免影响主库性能,可以将报表生成、大数据分析等任务放在从库执行;避免对主库造成压力,保证核心业务稳定运行。
- 异地容灾:可以将从库部署在不同地理位置(例如跨城市或跨数据中心);实现异地灾备,提高业务连续性。
- 测试与开发环境搭建:可以定期将主库数据同步到测试环境;保证测试数据与生产环境一致,便于排查问题或进行新功能验证。
- 延迟复制(Delayed Replication):从库故意延迟一定时间(如 1 小时)复制主库数据;用于防止误操作(如误删数据),可以在延迟时间内从从库恢复。