文章目录
MySQL主从复制的原理与实操
主从复制原理
当一个MySQL数据库服务器负载过重或者需要横向扩展时,主从复制是一种非常常见的解决方案。MySQL主从复制是将一个数据库服务器(master)的数据复制到其他数据库服务器(salve)的过程。在这个过程中,主服务器上的所有更改都将被自动复制到从服务器,从而实现数据同步。
下面是MySQL主从复制的基本原理:
- 主服务器记录二进制日志(Binary Log)。
- 从服务器连接到主服务器并请求复制数据。主服务器创建一个复制线程,将复制数据发送给从服务器。从服务器通过IO Thread(输入/输出线程)连接到主服务器,并从主服务器请求二进制日志文件。主服务器在二进制日志中记录所有的更改,然后将这些更改发送给从服务器。IO Thread 将这些更改写入从服务器上的中继日志文件(Relay Log)。
- 从服务器执行中继日志中的更改。SQL Thread(SQL 线程)从中继日志中读取数据并将其应用到从服务器上。SQL Thread 按照主服务器的顺序执行每个更改,以确保从服务器与主服务器保持同步。
- 当有新的更改发生时,主服务器将记录更改并将其发送到所有连接的从服务器。从服务器将这些更改写入中继日志文件并应用这些更改。
- 如果从服务器出现问题,可以通过将一个新的从服务器连接到主服务器来重新启动复制进程。
需要注意的是,MySQL主从复制并不是一种高可用性解决方案。如果主服务器宕机,从服务器将不能自动接管服务。因此,在设计高可用性系统时,可能需要使用其他技术。
MySQL主从复制的高级应用
- 复制方式:MySQL主从复制可以通过同步或异步的方式进行复制。在同步复制中,主服务器必须等待所有的从服务器确认它们已成功地接收并应用了所有更改,才能提交更改。这确保了数据的一致性,但会降低系统的性能。在异步复制中,主服务器无需等待从服务器确认,因此可以提高系统的性能,但可能会导致数据不一致。
- 复制过滤:在进行主从复制时,可以使用复制过滤来控制哪些更改将被复制到从服务器。例如,可以指定仅复制特定的数据库、表或列。
- 自动故障转移:MySQL主从复制本身并不支持自动故障转移,因此在设计高可用性系统时,需要使用其他技术,例如基于虚拟IP地址的故障转移技术或者结合使用MySQL主从复制和集群技术来实现。
- 主从切换:在某些情况下,需要手动切换主从角色,例如当主服务器出现故障时,需要手动将从服务器提升为主服务器。在进行主从切换时,需要注意切换的正确性以及避免数据不一致。
总的来说,MySQL主从复制是一种非常强大和灵活的技术,它可以实现数据的高可用性、负载均衡和数据备份等目的。但是在使用时需要了解其原理和细节,以避免出现潜在的问题。
MySQL主从复制实操(一主两从)
环境准备
两台机器一主两从。
主master:IP 192.168.133.129
从slave1:IP 192.168.133.130
从slave2:IP 192.168.133.131
master配置
-
[mysqld] log_bin = mysql-bin server_id = 1 systemctl restart mysqld # 重启服务
-
建立同步账号
mysql> grant replication slave on *.* to 'rep'@'192.168.133.%' identified by '123456'; mysql> show grants for 'rep'@'192.168.133.%';
-
通过mysqldump同步三个数据库中的db
# 锁表设置只读为后面备份准备,注意生产环境要提前申请停机时间; mysql> flush tables with read lock; # 提示:如果超过设置时间不操作会自动解锁。 mysql> show variables like '%timeout%'; # 测试锁表后是否可以创建数据库: # 查看主库状态,即当前日志文件名和二进制日志偏移量 mysql> show master status; # 备份数据库数据 mysqldump -uroot -p -A -B ···> /server/backup/mysql_bak.$(date +%F).sql
-
解锁
mysql> unlock tables;
-
主库备份数据上传到从库
scp /server/backup/mysql_bak.2015-11-18.sql.gz 192.168.9