Mysql 5.7.42 主从复制搭建(一主一从)
一:主从复制说明
主从复制,顾名思义,将主库数据库内容复制到从库数据库中,那么针对这一操作的意义是什么?主要能解决什么问题?
主从复制能解决的问题就是在我们平时开发的程序中操作数据库的时候,大多数的情况查询的操作大大超过了写的操作,
也就说对数据库读取数据的压力比较大的问题,为了保证数据库操作的效率,我们一般把读的操作放在一个数据库执行(从库),
比较耗时与频繁I/O的操作放在另外一个数据库(我们称之为主库);这样做的意义就是减轻主库操作的压力,主从库可以各行其事,提高了数据库的操作效率!
二:主从复制的原理
主库会生成一个I/O操作线程进去写的的操作,而从库则生成两个线程,其一是I/O读取线程,其二是一个SQL线程。
总结如下三点:
1、主库将数据的操作记录到一个二进制日志中(即:binary log),也就是配置文件中指定的log-bin指定的文件就是日志文件。
2、从库将主库的日志文件拷贝到他的中继日志即配置文件中指定的relay log日志文件中,I/O线程去请求主库的bin-log日志,
并将日志写入到relay log中继日志中,此时主库会生成一个log dump线程,用来给从库I/O线程传输bin-log日志件。
3、从库会更新relay log文件中的操作,将数据的改变在从库中进行数据重演即重新执行一次,即SQL线程执行操作,
将日志文件中的记录变为数据操作行为再次执行,以达到主从数据最终一致性的目的。
三:主从复制的步骤
1、master将改变记录到二进制日志( binary log)
2、slave将master的binary log拷贝到它的中继日志(relay log)
3、slave重做中继日志中的事件,将改变应用到自己的数据库中
如下图所示:
四:环境介绍
服务器环境:ubuntu 18.04.1
Mysql版本:5.7.42
主库Ip(Master):192.168.0.179
从库Ip(Slave):192.168.0.166
注:操作数据库以及配置服务器环境均要以root账号为基础,主库与从库的数据库版本要保持一致
五:主库的配置(Master)
1.修改主库Mysql的配置文件
1 | vim /etc/mysql/mysql.conf.d/mysqld.cnf |
2.找到【mysqld】标记,进行如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # [必须]启用二进制日志,数据间复制必不可少 log-bin=/ var /lib/mysql/mysql-bin # [必须]服务器唯一ID(如果是集群,切记切记不能重复,可设置为ip的最后位) server-id=179 # ⽇日志中会记录成一⾏行行数据被修改的形式 binlog-format=ROW # 二进制日志自动删除的天数。一般将x设置为短点,如10,默认值为0,表示“没有自动删除” expire_logs_days = 10 # 日志最大大小 max_binlog_size = 100M # 不同步哪些数据库 binlog-ignore-db = mysql binlog-ignore-db = information_schema # 只同步哪些数据库,除此之外,其他不同步 # binlog-do-db = test # 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 # 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 |
3.重启Mysql服务
1 | service mysql restart |
4.登录Mysql数据库,进入Mysql控制台
1 | mysql -uroot -p |
5.创建一个用户用来给从库复制用
1 2 3 | mysql> CREATE USER 'slave' @ '%' IDENTIFIED BY 'slave' ; mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave' @ '%' ; mysql> Flush Privileges; |
6.查看主库参数 ,记住 File 和 Position 对应的参数,从库需要配置这些参数
1 2 3 4 5 6 7 | mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000003 | 2336 | firecontrol | mysql | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) |
六:从库的配置(Slave)
1.修改主库Mysql的配置文件
1 | vim /etc/mysql/mysql.conf.d/mysqld.cnf |
2.找到【mysqld】标记,进行如下配置:
1 | server-id=166 # [必须]服务器唯一ID(如果是集群,切记切记不能重复,可设置为ip的最后位) |
3.重启Mysql服务
1 | service mysql restart |
4.登录Mysql数据库,进入Mysql控制台
1 | mysql -uroot -p |
5.Mysql控制台执行以下SQL
1 2 3 4 5 6 7 8 | //执行前先停下slave stop slave; //这是从库和主库连接的关键一步,host是主库的ip,user是前面创建的slave用户,file和pos是主库show master status的信息 change master to master_host= '192.168.0.179' ,master_user= 'slave' ,master_password= 'slave' ,master_log_file= 'mysql-bin.000003' ,master_log_pos=2336; //执行后启动slave start slave; |
6.执行下面SQL,查看从数据库状态
1 2 | show slave status;输出会很乱 show slave status\G;这样就竖着输出,不会乱 |
效果如下所示:
两个yes则表示成功配置主从复制,Connection和No都是配置有问题
七:验证主从复制
在主库中执行增、删、改语句,看从库数据是不是也改变。
到这就完成了针对Mysql主从复制的搭建了,欧啦,劳逸结合,下班下班!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!