主从复制原理
- MySQL的复制类型
- 基于语句的复制 (默认)
- 基于行的复制
- 混合类型的复制
- MySQL主从复制的工作过程
主从复制设置
主从复制时基于二进制文件的所以需要打开二进制文件
主数据库
在MySQL配置文件/etc/my.cnf修改或增加
#启用了MySQL的二进制日志功能二进制文件名字
log-bin=主机名-bin
#二进制文件格式
binlog_format = MIXED
#设置MySQL服务器的唯一ID为1
server-id=1
重启mysql服务
systemctl restart mysqld
登录mysql创建一个用于复制的用户并授权
mysql -uroot -p
grant replication slave on *.* to 'myslave'@'192.168.78.%' identified by '123465';
刷新权限
flush privileges;
查看当前MySQL数据库当前二进制文件最新的信息,文件名与位置和偏移量
show master status;
从数据库
主从数据库的MySQL唯一ID不可以相同
在MySQL配置文件/etc/my.cnf修改或增加
#启用了MySQL的二进制日志功能二进制文件名字
log-bin=主机名-bin
#二进制文件格式
binlog_format = MIXED
#设置MySQL服务器的唯一ID为2
server-id=2
重启mysql服务
systemctl restart mysqld
设置主服务器数据库的信息
mysql -uroot -p
change master to
#主服务器的IP地址或主机名
master_host='192.168.78.129',
#用于连接到数据库的MySQL用户名
master_user='myslave',
#MySQL用户的密码
master_password='123456',
#从哪个二进制日志文件开始复制
master_log_file='master-bin.000001',
#从二进制文件的哪个位置开始复制
master_log_pos=1103;
#下面这两个可以不用设置
#主服务器监听的端口号(默认为3306)
master_port=port_number
#如果连接失败,重新连接的间隔时间
MASTER_CONNECT_RETRY=interval
开启从服务器复制线程
MySQL会从配置的二进制日志文件的指定位置开始读取事件,并将这些事件应用到从服务器的数据上,以保持与主服务器的数据一致
start slave; //开启复制线程
stop slave; //关闭复制线程
reset slave; //重置复制线程
显示MySQL从节点的复制状态(注意 \G 是让MySQL以更易于阅读的格式输出结果,即每行一个字段值)
查看服务器复制状态
show slave status\G;
关键字段和含义
必须保证Slave_IO_Running和Slave_SQL_Running均为yes才算主从复制成功
- Slave_IO_Running:显示I/O线程的状态(Yes 表示正在运行,No 表示停止)。
- Slave_SQL_Running:显示SQL线程的状态(Yes 表示正在运行,No 表示停止)。
- Slave_IO_State: I/O线程当前的状态,比如正在连接主服务器、正在请求二进制日志事件等。
- Master_Host, Master_User, Master_Port: 分别表示主服务器的地址、用于连接的用户名和端口号。
- Connect_Retry: 如果连接失败,重试连接的间隔时间(秒)。
- Master_Log_File, Read_Master_Log_Pos: 分别表示从服务器正在读取的主服务器的二进制日志文件名和位置。
- Relay_Master_Log_File, Exec_Master_Log_Pos: 分别表示从服务器已经执行到哪个主服务器的二进制日志文件和位置。
- Slave_IO_Running, Slave_SQL_Running: 分别表示I/O线程和SQL线程的状态(Yes表示正在运行,No表示停止)。
- Last_IO_Error, Last_SQL_Error: 分别表示I/O线程和SQL线程遇到的最后一个错误(如果有的话)。
- Seconds_Behind_Master: 表示从服务器落后主服务器多少秒,即复制延迟。
- Relay_Log_Space: 所有中继日志占用的空间大小(字节)。
- Until_Condition, Until_Log_File, Until_Log_Pos: 这些字段用于设置从服务器复制到哪个日志文件的哪个位置就停止,通常用于故障恢复或数据迁移。