MySql 主从复制操作步骤

本文详细介绍了如何通过MySQL的主从复制来实现数据库的高可用和高并发。首先,关闭防火墙确保端口可达,然后在主库上配置二进制日志、设置权限并获取主库状态。接着,在从库上配置相关参数,初始化从库状态,并进行同步设置。通过这种方式,可以实现数据的实时同步,当读写分离后,从库可作为读库以减轻主库压力,解决单机数据库的高并发问题。需要注意的是,数据库表结构、存储过程需保持一致,以避免同步错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们所用的单机mysql不能做高可用,高并发,那么解决该问题需要进行集群,集群就必须先做到主从复制

主从复制顾名思义就是主库作为和后台直接对接的库,从库一般是作为备份,当读写分离实现后,从库可以作为读库,主库既可以读,也可以写。

主从原理:

Mysql 进行sql更新插入操作 事务提交会记录到binLog日志中,从库通过I/O线程会读取binLog日志,将数据同步到relay日志中,sql线程再读取relay日志生成对应操作sql,在从库执行。

操作步骤:

关闭主从库防火墙。避免端口无法被访问,由于主从库一般是在同一个内网中的,关闭防火墙并无大碍

centos7:sudo systemctl disable firewalld

主库操作:

1:要开启二进制binLog日志

(1):修改主库my.cnf文件

在[mysqld]中加入

#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,一般取IP最后一段
server-id=133
#指定复制的数据库(可选)
binlog-do-db=kkb2
binlog-ignore-db=kkb(和replicate-ignore-db是一样的)
#指定不复制的数据库(可选,mysql5.7版本及以上)
replicate-ignore-db=kkb
#指定忽略的表(可选,mysql5.7版本及以上)
replicate-ignore-table=db.table1

2:重新启动mysql服务

sudo systemctl restart mysql

3:进到mysql的命令行  进行主库给从库授权备份

mysql >  GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by 'root';

mysql >  GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by 'root';

mysql >  FLUSH PRIVILEGES;  //刷新权限

4:查看主库的状态

mysql >  show master status;

File:binlog日志名称  注意:binlog日志的名称只要数据库重启就会生成新的名称

Position:定位从库开始读的位置  也就是394之前的sql是不会同步到从库中的,如果要同步之前的数据,使用mysql dump进行复制即可

从库操作:

1:修改my.cnf文件

[mysqld]

server-id=135  #服务器唯一ID,一般取IP最后一段

2:查看以前的slave状态,如果没有设置过是没

mysql >  show slave status \G;

3:关闭从库

mysql >  stop slave

4:初始化重置从库的状态

mysql>change master to
master_host='192.168.56.101',
master_port=3306, 
master_user='root',
master_password='root',
master_log_file='mysql-bin.000059',
master_log_pos=394;

mysql>change master to
master_host='192.168.56.101',      #主库的地址IP
master_port=3306,        #主库数据库端口        
master_user='root',       #主库用户账号
master_password='root',    #主库用户密码
master_log_file='mysql-bin.000059',   #主库binLog日志名称
master_log_pos=394;         #从库进行同步主库binLog日志开始的位置

5:启动从库

mysql>  start slave;

6:查看从库是否开启成功

mysql> show slave status \G;

两个都为yes说明从库开启成功

此时两个库的数据会进行同步成功

这里需要说明一下,数据库表/存储过程等在主从同步时需要一致,然后再进行主从同步,不然在处理主库的一些sql时在从库会进行报错,然后从库就不会再进行同步了

可以设置global sql_slave_skip_counter,进行忽略几次错误,但是建议不开。

mysql> set global sql_slave_skip_counter =1; # 忽略一个错误
mysql> start slave

 

从库延时优化:

查看延时 show slave status中Seconds_Behind_Master=0则不延时

由于主库读写的操作量很大时,从库来不及读,那么会出现从库的同步延时问题

解决方案: 将thread改成多线程模式 MySQL5.6改表,MySQL5.7改GTID

网络延时导致的同步延时问题就用内网

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值