基于mysql5.7.10 主从复制-并遇到提示表不存在得问题


结合上篇源码编译安装创建得数据库实例,现在测试msyql5.7.10主从复制功能

壹,在主服务器上

主服务器:192.168.6.241
从服务器:192.168.6.242
参考得博文

壹-壹:开启bin-log

cat /etc/my.cnf
[mysqld]
server-id=1 ###注意正式网络环境中server-id 唯一
log-bin=/henanzhengzhou/mysql/logdir/binlog
在这里插入图片描述

壹-贰:重启服务,并检查bin-log是否开启

~]# systemctl restart mysqld
mysql> show variables like ‘%log_bin%’;
在这里插入图片描述

壹-叁:在master主服务器上设置复制使用账号,并设置REPLICATION SLAVE权限
 mysql>  grant replication slave on *.* to 'rep1'@'192.168.6.242' identified by '123';
 mysql>  grant replication slave on *.* to 'rep1'@'%' identified by '123';  #要求比较严得话,这条可以不用执行

贰,在从服务器上

relay_log_recovery={0|1}:紧随服务器启动立即启用自动中继日志恢复。默认值是0,禁用。
预设从服务器只作备份数据库使用

my.cnf 配置

[mysqld]
max_connections = 1000
log_bin = slave-bin         #开启bin-log日志
server_id = 2               
relay_log = slave-relay-bin     # 开启中继日志
log_slave_updates = 1
read_only = 1
#以下两个为可选选项,如果要保证数据不丢失最好在清理binlog之前把要清理的日志备份,日志文件的大小根据磁盘的性能做适当的调整
expire_logs_days = 7 //binlog过期清理时间
max_binlog_size = 100m //binlog每个日志文件大小
 
replicate_ignore_db=information_schema    #忽略不复制得库
replicate_ignore_db=performance_schema    #忽略不复制得库 
replicate_ignore_db=mysql               #忽略不复制得库
replicate_ignore_db=sys                  #忽略不复制得库
replicate_do_db=test                  #可以复制得库
replicate_do_table=test.a             #可以复制得表
replicate_ignore_table=test.b         #不允许复制得表

重启mysql服务
systemctl restart mysqld
flush tables with read lock; # 锁表语句
为了保证数据一致性,主服务器需要设定锁定有效,这个操作为了确保没有数据库操作,以便获得一致性得快照,备份后还原到从服务器上,
show master status \G #查询主机二进制日志名和偏移值
unlock tables; # 备份后主数据库恢复写操作
进入从服务器:
mysql> stop slave ; #停止从机上得slave 线程
对从服务设置主服务器上得配置
mysql> change master to
master_host=‘192.168.6.241’,
master_user=‘rep1’,
master_password=‘123’,
master_port=3307,
master_log_file=‘binlog.000007’,
master_log_pos=578;
########## master_connect_retry=30; #重试时间、单位秒,默认重试时间为 60s
在这里插入图片描述
start slave ; #在从机上启动slave 线程
show slave status \G # 查询从机服务器得状态

上边得两个进程一定是yes ,不然主从复制没戏

下面这条语句 延申得以备配置错误
mysql> reset slave all; #清理掉之前的配置,防止同步已经同步了的数据

叁: 验证主从复制

叁-壹 ,重置数据库使主从数据库服务器一致

在这里插入图片描述

叁-贰 ,停止从机slave 进程

mysql> stop slave ;
设置复制基本信息:
在这里插入图片描述

叁-叁 ,开启从机slave进程

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

叁-肆,查看从机slave进程状态

show slave status \G
在这里插入图片描述

叁-伍,在主机上创建数据库、表并插入数据,检查是否主从数据一致

在这里插入图片描述

肆,搭建主从复制时,报错示例

Table’mysql.servers’doesn’t exist

在搭建mysql主从复制时,遇到的一个报错。在执行flush privileges命令时提示 mysql.servers表不存在

mysql>  flush privileges;
ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist

因为是一个刚建立的实例,表中没有任何数据,又新建一个实例,找到对应系统自带得创表语句,在执行建表语句时,又提示表空间存在这个表

ERROR 1813 (HY000): Tablespace '`mysql`.`servers`' exists.

瞬间来了兴致,一番百度,找到了问题所在,在对应得表得数据目录下一般会同时存在如下两个文件,不知某种原因导致其中一个文件丢失,在执行语句时,才会出现这种问题,5.7.10版得直接停掉服务,删除对应得残留文件,再重新走一遍建表语句,问题顺利解决
参考文章

  • 1, .frm 文件 数据表定义信息
  • 2 ,.ibd 文件 数据表内容
    在这里插入图片描述

肆:主从服务架构图

在这里插入图片描述

肆-壹,MySQL主从复制简介

MySQL主从复制(也称A/B复制、Replication),简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步。
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
主从过程大致分为三个步骤:
1)主将更改操作记录到binlog里;
2)从将主的binlog事件(SQL语句)同步到从本机上,并记录在relaylog里;
3)从根据relaylog里面的SQL语句按顺序执行;
主上有一个log dump线程,用来和从的I/O线程传递binlog
从上有两个线程,其中I/O线程,用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的SQL语句落地

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值