Mysql主从复制
一、主从复制
1. 主从复制作用
主从复制:主设备通过二进制日志传输到从设备,从设备通过二进制日志和主同步数据。
作用:负载均衡读操作,备份(实时备份,不能替换手动的备份),高可用和故障切换,数据分布,Mysql升级。
2. 主从复制原理
①从数据库处理用户读操作,主数据库处理用户写操作。
②用户写入数据到主数据库时,主数据库更新并写入binlog二进制日志中。
③主数据库开启dump线程一边读取binlog日志一边通过网络将日志传输给从数据库。
④从数据库通过io线程接收binlog日志并保存为中继日志(即binlog日志只是换了名称)。
⑤从数据库开启sql线程将中继日志写入从数据库主从数据库复制完成。
3. 三个重要线程
dump线程:由主数据库开启,用于读取主的二进制日志并传输给从数据库 。
io线程:由从数据库开启,用于接收二进制日志并保存为中继日志。
sql线程:由从数据库开启,用于将中继日志写入备数据库中完成主从复制。
4. 主从复制实验
4.1 实验环境
准备两台安装了相同版本mysql数据库的服务器
master(pc1):192.168.50.200
slave(pc2): 192.168.50.100
关闭防火墙,增强功能
4.2 重置密码
pc1、pc2执行: systemctl stop firewalld.service setenforce 0 systemctl start mysqld #开启数据库 grep password /var/log/mysqld.log #在错误日志中找到mysql初始密码,如下图 mysql -uroot -p'初始密码' #登录数据库 alter user root@'localhost' identified by 'Admin@123'; quit; #修改root默认密码并退出
4.3 主节点配置
1 vim /etc/my.cnf 2 [mysqld]下一行添加内容: 3 server_id=11 4 #serverid建议配置为ip地址最后8位 5 log-bin=/data/mysql/mysql-bin 6 #指定二进制日志文件保存位置为/data/mysql/,保存后退出 7 mkdir -p /data/mysql 8 #创建保存二进制文件的目录 9 chown mysql:mysql -R /data/ 10 #目录的属主属组都给到mysql用户 11 systemctl restart mysqld 12 #重启数据库 13 mysql -uroot -p'Admin@123' 14 #登录数据库 15 grant replication slave on *.* to test@'192.168.50.%' identified by 'Admin@123'; 16 #创建复制用户只要是192.168.50开头的地址都可使用用户名test密码Admimin@123登录数据库。 17 show master status; 18 #查看主从复制从那个二进制日志的那个初始节点开始,从服务器配置需要依赖此条查看结果,如下图
4.4 从节点配置
1 vim /etc/my.cnf 2 [mysqld]下一行添加内容: 3 server_id=12 4 #serverid建议配置为ip地址最后8位 5 log-bin=/data/mysql/mysql-bin 6 #指定二进制日志文件保存位置为/data/mysql/ 7 relay-log=relay-log-bin#开启中继日志 8 relay-log-index=slave-relay-bin.index#添加,定义中继日志文件的位置和名称,保存后退出 9 mkdir -p /data/mysql 10 #创建保存二进制文件的目录 11 chown mysql:mysql -R /data/ 12 #目录的属主属组都给到mysql用户 13 systemctl restart mysqld 14 #重启数据库 15 mysql -uroot -p'Admin@123' 16 #登录数据库 17 help change master to 18 #可以查看配置帮助复制出来修改,或直接复制下面模板 19 CHANGE MASTER TO 20 MASTER_HOST='192.168.50.200', 21 #主服务器主机ip 22 MASTER_USER='test', 23 #主从复制登录用户名 24 MASTER_PASSWORD='Admin@123', 25 #主从复制登录用户名的密码 26 MASTER_PORT=3306, 27 #主服务器数据库端口 28 MASTER_LOG_FILE='mysql-bin.000001', 29 #从那个二进制日志开始复制,show master status;看到的结果 30 MASTER_LOG_POS=448; 31 #从二进制日志的那个at节点开始复制,show master status;看到的结果 32 start slave; 33 #开启主从复制 34 show slave status\G 35 #查看主从复制状态,找到Slave_IO_Running: Yes Slave_SQL_Running: Yes 此2个参数为yes则主从复制开启完成。 36
4.5 实验验证
1 主数据库: 2 create databases test1; 3 #创建一个test1测试库 4 备数据库: 5 show databases; 6 #查看是否同步到test1库
master:
slave:
二、 级联复制
1. 级联复制原理
①一级主是二级主的主数据库,二级主是从数据库的主服务器
②配置时二级主的主服务器ip日志远程用户等配置一级主的信息,二级主将一级主的二进制日志转发给从数据库
③配置从数据库时主服务器ip日志远程用户等配置二级主的信息
2. 级联复制实验
2.1 实验环境
准备三台相同mysql数据库的服务器
master1(pc1):192.168.50.200
master2(pc2):192.168.50.100
slave(pc3) :192.168.50.150
2.2 关闭防火墙,增强功能,重置mysql密码为‘Admin@123’
2.3 master主服务器配置与主从复制master一致
2.4 二级主master2配置与主从复制从服务器配置相同,只需要在修改配置文件时多添加一条:log_slave_updates(此条为开启log转发更新即将一级主的binlog转发给从服务器)
2.5 slave配置:从服务器配置:与主从复制从服务器配置相同,注意从服务器的主是二级主,所以配置主机ip,远程用户密码以及端口和日志位置时要写二级主的信息。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构