没有日志 mysql 5.6主从同步_MySQL5.6主从复制搭建基于日志(binlog)

什么是MySQL主从复制

简单来说就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保证数据的一致性,就是主从复制。

MySQL主从能解决什么问题

一、高可用

因为数据都是相同的,所以当Master挂掉后,可以指定一台Slave充当Master继续保证服务运行,因为数据是一致性的(如果当插入Master就挂掉,可能不一致,因为同步也需要时间),当然这种配置不是简单的把一台Slave充当Master,毕竟还要考虑后续的Salve同步Master,当然本文并不是将高可用的配置,所以这里就不多讲了

二、负载均衡

因为读写分离也算是负载均衡的一种,所以就不单独写了,因为一般都是有多台Slave的,所以可以将读操作指定到Slave服务器上(需要代码控制),然后再用负载均衡来选择那台Slave来提供服务,同时也可以吧一些大量计算的查询指定到某台Slave,这样就不会影响Master的写入以及其他查询

三、数据备份

一般我们都会做数据备份,可能是写定时任务,一些特殊行业可能还需要手动备份,有些行业要求备份和原数据不能在同一个地方,所以主从就能很好的解决这个问题,不仅备份及时,而且还可以多地备份,保证数据的安全

四、业务模块化

可以一个业务模块读取一个Slave,再针对不同的业务场景进行数据库的索引创建和根据业务选择MySQL存储引擎

五、高扩展(硬件扩展)

主从复制支持2种扩展方式

1、scale-up

向上扩展或者纵向扩展,主要是提供比现在服务器更好性能的服务器,比如增加CPU和内存以及磁盘阵列等,因为有多台服务器,所以可扩展性比单台更大

2、scale-out

向外扩展或者横向扩展,是指增加服务器数量的扩展,这样主要能分散各个服务器的压力

主从复制的缺点

一、成本增加

无可厚非的是搭建主从肯定会增加成本,毕竟一台服务器和两台服务器的成本完全不同,另外由于主从必须要开启二进制日志,所以也会造成额外的性能消耗

二、数据延迟

Slave从Master复制过来肯定是会有一定的数据延迟的,所以当刚插入就出现查询的情况,可能查询不出来,当然如果是插入者自己查询,那么可以直接从Master中查询出来,当然这个也是需要用代码来控制的

三、写入更慢

主从复制主要是针对读远大于写或者对数据备份实时性要求较高的系统中,因为Master在写中需要更多操作,而且只有一台写入的Master(因为我目前只会配置一台写入Master,最多就是有从Master的Slave,用来在Master挂掉后替换成Master,平时不对外进行服务),所以写入的压力并不能被分散,当然如果直接怎么解决这个问题的话,欢迎留言指教

复制方式

MySQL5.6开始主从复制有两种方式:基于日志(binlog)、基于GTID(全局事务标示符)。

本文只涉及基于日志binlog的主从配置

复制原理

1、Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志事件(binary log events)

2、Slave通过I/O线程读取Master中的binary log events并写入到它的中继日志(relay log)

3、Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)

要求

1、主从服务器操作系统版本和位数一致

2、Master和Slave数据库的版本要一致

3、Master和Slave数据库中的数据要一致

4、Master开启二进制日志,Master和Slave的server_id在局域网内必须唯一

具体配置

硬件需求

两台或两台以上安装了相同版本的MySQL(我没有试过不同版本会不会有问题,有兴趣的可以试试),当然这个可以用虚拟机或者Docker代替,个人推荐用Docker,比虚拟机消耗少太多了,当然用起来可能没有虚拟机那么方便,但是却不用挨个环境配置了

配置Master

一、安装数据库

二、配置my.cnf

不同的系统my.cnf路径不同,所以我们只讲解牵扯修改的地方。添加配置

[mysqld]

## 设置server_id,一般设置为IP,注意要唯一

server_id=100

## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql

## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)

log-bin=edu-mysql-bin

## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

## 主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

配置完成后重启mysql

关于复制过滤

复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:

1、在Master上过滤二进制日志中的事件

2、在Slave上过滤中继日志中的事件。

复制类型

1、基于语句的复制

在Master上执行的SQL语句,在Slave上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制

2、基于行的复制

把改变的内容复制到Slave,而不是把命令在Slave上执行一遍。从MySQL5.0开始支持

3、混合类型的复制

默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制

三、创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

这里主要是要授予用户REPLICATION SLAVE权限和REPLICATION CLIENT权限

配置Slave

一、安装数据库

二、配置my.cnf

[mysqld]

## 设置server_id,一般设置为IP,注意要唯一

server_id=101

## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql

## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用

log-bin=edu-mysql-slave1-bin

## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

## 主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

## relay_log配置中继日志

relay_log=edu-mysql-relay-bin

## log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1

## 防止改变数据(除了特殊的线程)

read_only=1

如果Slave为其它Slave的Master时,必须设置bin_log。配置完成后重启mysql

完成Master和Slave链接

一、初始化数据

保证Master和Slave除不同步的数据库,其他库的数据一致

二、查询Master状态

在Master中执行

show master status;

记录下返回结果的File列和Position列的值

三、Slave中设置Master信息

在Slave中执行

change master to master_host='192.168.1.100', master_user='slave', master_password='123456', master_port=3306, master_log_file='edu-mysql-bin.000001', master_log_pos=1389, master_connect_retry=30;

上面执行的命令的解释:

master_host='192.168.1.100' ## Master的IP地址

master_user='slave' ## 用于同步数据的用户(在Master中授权的用户)

master_password='123456' ## 同步数据用户的密码

master_port=3306 ## Master数据库服务的端口

master log file='edu-mysql-bin.000001' ##指定Slave从哪个日志文件开始读复制数据(Master上执行命令的结果的File字段)

master log pos=429 ## 从哪个POSITION号开始读(Master上执行命令的结果的Position字段)

master connect retry=30 ##当重新建立主从连接时,如果连接建立失败,间隔多久后重试。单位为秒,默认设置为60秒,同步延迟调优参数。

四、查看主从同步状态

在Slave中执行命令

show slave status;

可看到Slave IO State为空, Slave IO Running和Slave SQL Running是No,表明Slave还没有开始复制过程。相反Slave IO Running和Slave SQL Running是Yes表明已经开始工作了

五、开启主从同步

在Slave中执行命令

start slave;

查询查看主从同步状态,会发现Slave IO Running和Slave SQL Running是Yes了,表明开启成功

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要配置MySQL 5.6主从同步,你需要按照以下步骤进行操作: 1. 在主服务器上修改配置文件。打开主服务器的my.cnf(或my.ini)文件,并添加以下配置: ``` [mysqld] server-id=1 log-bin=mysql-bin binlog-format=ROW ``` 2. 重启主服务器。在应用了配置更改后,重启主服务器以使更改生效。 3. 创建用于复制的用户。在主服务器上创建一个用于复制目的的用户,并授予适当的权限。例如,执行以下命令创建名为replica的用户: ``` CREATE USER 'replica'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES; ``` 确保将 'password' 替换为实际的密码,并根据需要设置更具体的权限。 4. 获取主服务器的二进制日志位置。登录到主服务器的MySQL命令行客户端,并执行以下命令: ``` SHOW MASTER STATUS; ``` 记录下返回的结果中的File和Position值,后续步骤将需要使用。 5. 配置从服务器。在从服务器上的my.cnf(或my.ini)文件中添加以下配置: ``` [mysqld] server-id=2 ``` 确保将server-id设置为不同于主服务器的唯一值。 6. 重启从服务器。在应用了配置更改后,重启从服务器以使更改生效。 7. 启动从服务器的复制进程。登录到从服务器的MySQL命令行客户端,并执行以下命令: ``` CHANGE MASTER TO MASTER_HOST='主服务器IP地址', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='主服务器返回的File值', MASTER_LOG_POS=主服务器返回的Position值; ``` 确保将 '主服务器IP地址'、'password'、'主服务器返回的File值'和'主服务器返回的Position值' 替换为实际的值。 8. 启动从服务器的复制进程。执行以下命令启动从服务器的复制进程: ``` START SLAVE; ``` 9. 检查复制状态。执行以下命令检查从服务器的复制状态: ``` SHOW SLAVE STATUS\G ``` 在结果中,确保Slave_IO_Running和Slave_SQL_Running两个字段的值均为"YES",表示复制正在正常运行。 完成上述步骤后,你应该成功配置了MySQL 5.6主从同步。请注意,这只是一个基本的配置示例,你可能需要根据你的实际环境进行适当的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值